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

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

[nongnu] elpa/rust-mode c62185a 397/486: Merge pull request #304 from ku


From: ELPA Syncer
Subject: [nongnu] elpa/rust-mode c62185a 397/486: Merge pull request #304 from kurnevsky/raw-string-propertize
Date: Sat, 7 Aug 2021 09:26:01 -0400 (EDT)

branch: elpa/rust-mode
commit c62185ae1c6edf0335261f169241eb8ee9713ad5
Merge: 0a94268 e53dc8a
Author: Niko Matsakis <niko@alum.mit.edu>
Commit: GitHub <noreply@github.com>

    Merge pull request #304 from kurnevsky/raw-string-propertize
    
    Don't insert string delimiter inside strings.
---
 rust-mode-tests.el | 13 +++++++++++++
 rust-mode.el       | 49 ++++++++++++++++++++++++++-----------------------
 2 files changed, 39 insertions(+), 23 deletions(-)

diff --git a/rust-mode-tests.el b/rust-mode-tests.el
index 72a9e4e..b21202a 100644
--- a/rust-mode-tests.el
+++ b/rust-mode-tests.el
@@ -1452,6 +1452,19 @@ fn g() {
      "g" font-lock-function-name-face
      "\"xs\"" font-lock-string-face)))
 
+(ert-deftest font-lock-string-ending-with-r-word-boundary ()
+  (with-temp-buffer
+    (rust-mode)
+    (insert "const foo = \"foo bar\"")
+    (font-lock-fontify-buffer)
+    ;; right-word should move the point to the end of the words.
+    (goto-char 14)
+    (right-word)
+    (should (equal 17 (point)))
+    (right-word)
+    (should (equal 21 (point)))
+    ))
+
 (ert-deftest font-lock-raw-string-trick-ending-followed-by-string-with-quote ()
   (rust-test-font-lock
    "r\"With what looks like the start of a raw string at the end r#\";
diff --git a/rust-mode.el b/rust-mode.el
index c7afd34..a5f658a 100644
--- a/rust-mode.el
+++ b/rust-mode.el
@@ -1105,41 +1105,44 @@ should be considered a paired angle bracket."
         (group "'")))
     "A regular expression matching a character literal."))
 
-(defun rust--syntax-propertize-raw-string (end)
+(defun rust--syntax-propertize-raw-string (str-start end)
   "A helper for rust-syntax-propertize.
 
-If point is already in a raw string, this will apply the
-appropriate string syntax to the character up to the end of the
-raw string, or to END, whichever comes first."
-  (let ((str-start (nth 8 (syntax-ppss))))
-    (when str-start
-      (when (save-excursion
-             (goto-char str-start)
-             (looking-at "r\\(#*\\)\\(\"\\)"))
-       ;; In a raw string, so try to find the end.
-       (let ((hashes (match-string 1)))
-         ;; Match \ characters at the end of the string to suppress
-         ;; their normal character-quote syntax.
-         (when (re-search-forward (concat "\\(\\\\*\\)\\(\"" hashes "\\)") end 
t)
-           (put-text-property (match-beginning 1) (match-end 1)
-                              'syntax-table (string-to-syntax "_"))
-           (put-text-property (1- (match-end 2)) (match-end 2)
-                              'syntax-table (string-to-syntax "|"))
-           (goto-char (match-end 0))))))))
+This will apply the appropriate string syntax to the character
+from the STR-START up to the end of the raw string, or to END,
+whichever comes first."
+  (when (save-excursion
+         (goto-char str-start)
+         (looking-at "r\\(#*\\)\\(\"\\)"))
+    ;; In a raw string, so try to find the end.
+    (let ((hashes (match-string 1)))
+      ;; Match \ characters at the end of the string to suppress
+      ;; their normal character-quote syntax.
+      (when (re-search-forward (concat "\\(\\\\*\\)\\(\"" hashes "\\)") end t)
+       (put-text-property (match-beginning 1) (match-end 1)
+                          'syntax-table (string-to-syntax "_"))
+       (put-text-property (1- (match-end 2)) (match-end 2)
+                          'syntax-table (string-to-syntax "|"))
+       (goto-char (match-end 0))))))
 
 (defun rust-syntax-propertize (start end)
   "A `syntax-propertize-function' to apply properties from START to END."
   (goto-char start)
-  (rust--syntax-propertize-raw-string end)
+  (let ((str-start (rust-in-str-or-cmnt)))
+    (when str-start
+      (rust--syntax-propertize-raw-string str-start end)))
   (funcall
    (syntax-propertize-rules
     ;; Character literals.
     (rust--char-literal-rx (1 "\"") (2 "\""))
     ;; Raw strings.
     ("\\(r\\)#*\""
-     (1 (prog1 "|"
-         (goto-char (match-end 0))
-         (rust--syntax-propertize-raw-string end))))
+     (0 (ignore
+          (goto-char (match-end 0))
+          (unless (save-excursion (nth 8 (syntax-ppss (match-beginning 0))))
+            (put-text-property (match-beginning 1) (match-end 1)
+                              'syntax-table (string-to-syntax "|"))
+            (rust--syntax-propertize-raw-string (match-beginning 0) end)))))
     ("[<>]"
      (0 (ignore
         (when (save-match-data



reply via email to

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