emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/swift-mode 592a33f 021/496: Copy syntax table from rust-mo


From: ELPA Syncer
Subject: [nongnu] elpa/swift-mode 592a33f 021/496: Copy syntax table from rust-mode.
Date: Sun, 29 Aug 2021 11:33:00 -0400 (EDT)

branch: elpa/swift-mode
commit 592a33f1a4a71b89f2e5a230ad410c719b39c83a
Author: Chris Barrett <chris.d.barrett@me.com>
Commit: Chris Barrett <chris.d.barrett@me.com>

    Copy syntax table from rust-mode.
    
    This fixes font-locking of C and C++ style comments.
    
    Resolves #1
---
 swift-mode.el | 53 +++++++++++++++++++++++++----------------------------
 1 file changed, 25 insertions(+), 28 deletions(-)

diff --git a/swift-mode.el b/swift-mode.el
index 2177a79..2759dc8 100644
--- a/swift-mode.el
+++ b/swift-mode.el
@@ -30,6 +30,8 @@
 (require 'dash)
 (require 'rx)
 
+(require 'swift-indentation)
+
 ;; Font lock.
 
 (defvar swift-mode--type-decl-keywords
@@ -131,35 +133,29 @@
 
 ;; Mode definition.
 
-;; FIXME: Syntax table cobbled together from entries in tuareg-mode and
-;; fsharp-mode. Not really tested.
+;; HACK: This syntax table is lifted directly from `rust-mode'. There may be
+;; corner cases in the Swift syntax that are not accounted for.
 (defvar swift-mode-syntax-table
-  (let ((st (make-syntax-table)))
-    (modify-syntax-entry ?_ "_" st)
-    (modify-syntax-entry ?. "'" st)     ; Make qualified names a single symbol.
-    (modify-syntax-entry ?? ". p" st)
-    (modify-syntax-entry ?& ". p" st)
-    (modify-syntax-entry ?! ". p" st)
-
-    ;; C++-style comments (//)
-    (modify-syntax-entry ?/ ". 12b" st)
-    (modify-syntax-entry ?\n "> b" st)
-    ;; C-style comments (/* */)
-    (modify-syntax-entry ?/ "()1n" st)
-    (modify-syntax-entry ?*  ". 23n" st)
-    (modify-syntax-entry ?/ ")(4n" st)
-
-    (dolist (c '(?$ ?% ?+ ?- ?/ ?: ?< ?= ?> ?@ ?^ ?|))
-      (modify-syntax-entry c "." st))
-
-    (modify-syntax-entry ?' "_" st)      ; ' is part of symbols (for primes).
-    (modify-syntax-entry ?\" "\"" st)    ; " is a string delimiter
-    (modify-syntax-entry ?\\ "\\" st)
-    (modify-syntax-entry ?*  ". 23" st)
-    (modify-syntax-entry ?\( "()1n" st)
-    (modify-syntax-entry ?\) ")(4n" st)
-    st)
-  "Syntax table for `swift-mode'.")
+  (let ((table (make-syntax-table)))
+
+    ;; Operators
+    (dolist (i '(?+ ?- ?* ?/ ?& ?| ?^ ?! ?< ?> ?~ ?@))
+      (modify-syntax-entry i "." table))
+
+    ;; Strings
+    (modify-syntax-entry ?\" "\"" table)
+    (modify-syntax-entry ?\\ "\\" table)
+
+    ;; _ is a word-char
+    (modify-syntax-entry ?_ "w" table)
+
+    ;; Comments
+    (modify-syntax-entry ?/  ". 124b" table)
+    (modify-syntax-entry ?*  ". 23"   table)
+    (modify-syntax-entry ?\n "> b"    table)
+    (modify-syntax-entry ?\^m "> b"   table)
+
+    table))
 
 ;;;###autoload
 (define-derived-mode swift-mode prog-mode "Swift"
@@ -167,6 +163,7 @@
 
 \\<swift-mode-map>"
   :group 'swift
+  :syntax-table swift-mode-syntax-table
   (setq-local font-lock-defaults swift-mode--font-lock-defaults)
   (setq-local comment-start "// ")
   (setq-local comment-end "")



reply via email to

[Prev in Thread] Current Thread [Next in Thread]