[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/rust-mode 4d633fc 125/486: Merge pull request #32 from Mic
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/rust-mode 4d633fc 125/486: Merge pull request #32 from MicahChalmer/raw-string-handling |
Date: |
Sat, 7 Aug 2021 09:25:02 -0400 (EDT) |
branch: elpa/rust-mode
commit 4d633fc20de2560f26bcaca95b5458dfa2efb6eb
Merge: 19bc0e9 bddc933
Author: Niko Matsakis <niko@alum.mit.edu>
Commit: Niko Matsakis <niko@alum.mit.edu>
Merge pull request #32 from MicahChalmer/raw-string-handling
Parse and highlight raw strings correctly
---
rust-mode-tests.el | 38 +++++++++++++++++++++++++++++++++++++-
rust-mode.el | 24 ++++++++++++++++++------
2 files changed, 55 insertions(+), 7 deletions(-)
diff --git a/rust-mode-tests.el b/rust-mode-tests.el
index 36e59df..e20e5fa 100644
--- a/rust-mode-tests.el
+++ b/rust-mode-tests.el
@@ -290,7 +290,7 @@ very very very long string
deindented
1
(lambda ()
- ;; The indentation will fial in some cases if the syntax properties are
+ ;; The indentation will fail in some cases if the syntax properties are
;; not set. This only happens when font-lock fontifies the buffer.
(font-lock-fontify-buffer)
(indent-region 1 (buffer-size)))
@@ -927,6 +927,42 @@ list of substrings of `STR' each followed by its face."
"let" font-lock-keyword-face
"'\\''" font-lock-string-face)))
+(ert-deftest font-lock-raw-strings-no-hashes ()
+ (rust-test-font-lock
+ "r\"No hashes\";"
+ '("r\"No hashes\"" font-lock-string-face)))
+
+(ert-deftest font-lock-raw-strings-double-quote ()
+ (rust-test-font-lock
+ "fn main() {
+ r#\"With a double quote (\")\"#;
+}
+"
+ '("fn" font-lock-keyword-face
+ "main" font-lock-function-name-face
+ "r#\"With a double quote (\")\"#" font-lock-string-face)))
+
+(ert-deftest font-lock-raw-strings-two-hashes ()
+ (rust-test-font-lock
+ "r##\"With two hashes\"##;"
+ '("r##\"With two hashes\"##" font-lock-string-face)))
+
+(ert-deftest font-lock-raw-strings-backslash-at-end ()
+ (rust-test-font-lock
+ "r\"With a backslash at the end\\\";"
+ '("r\"With a backslash at the end\\\"" font-lock-string-face)))
+
+(ert-deftest font-lock-two-raw-strings ()
+ (rust-test-font-lock
+ "fn main() {
+ r\"With a backslash at the end\\\";
+ r##\"With two hashes\"##;
+}"
+ '("fn" font-lock-keyword-face
+ "main" font-lock-function-name-face
+ "r\"With a backslash at the end\\\"" font-lock-string-face
+ "r##\"With two hashes\"##" font-lock-string-face)))
+
(ert-deftest indent-method-chains-no-align ()
(let ((rust-indent-method-chain nil)) (test-indent
"
diff --git a/rust-mode.el b/rust-mode.el
index 43afd9a..fe9660b 100644
--- a/rust-mode.el
+++ b/rust-mode.el
@@ -51,6 +51,13 @@
table))
+(defvar rust-mode-inside-raw-string-syntax-table
+ (let ((table (make-syntax-table rust-mode-syntax-table)))
+ (modify-syntax-entry ?\" "_" table)
+ (modify-syntax-entry ?\\ "_" table)
+
+ table))
+
(defgroup rust-mode nil
"Support for Rust code."
:link '(url-link "http://www.rust-lang.org/")
@@ -312,12 +319,17 @@
("static" . font-lock-constant-face)))))
(defvar rust-mode-font-lock-syntactic-keywords
- (mapcar (lambda (re) (list re '(1 "\"") '(2 "\"")))
- '("\\('\\)[^']\\('\\)"
- "\\('\\)\\\\['nrt]\\('\\)"
- "\\('\\)\\\\x[[:xdigit:]]\\{2\\}\\('\\)"
- "\\('\\)\\\\u[[:xdigit:]]\\{4\\}\\('\\)"
- "\\('\\)\\\\U[[:xdigit:]]\\{8\\}\\('\\)")))
+ (append
+ ;; Handle single quoted character literals:
+ (mapcar (lambda (re) (list re '(1 "\"") '(2 "\"")))
+ '("\\('\\)[^']\\('\\)"
+ "\\('\\)\\\\['nrt]\\('\\)"
+ "\\('\\)\\\\x[[:xdigit:]]\\{2\\}\\('\\)"
+ "\\('\\)\\\\u[[:xdigit:]]\\{4\\}\\('\\)"
+ "\\('\\)\\\\U[[:xdigit:]]\\{8\\}\\('\\)"))
+ ;; Handle raw strings:
+ `(("\\(r\\)\"\\([^\"]*\\)\\(\"\\)" (1 "|") (2
,rust-mode-inside-raw-string-syntax-table) (3 "|"))
+ ("\\(r\\)#\\(#*\\)\\(\"[^#]*\"\\2\\)\\(#\\)" (1 "|") (3
,rust-mode-inside-raw-string-syntax-table) (4 "|")))))
(defun rust-fill-prefix-for-comment-start (line-start)
"Determine what to use for `fill-prefix' based on what is at the beginning
of a line."
- [nongnu] elpa/rust-mode 679501e 056/486: Cover all cases for padding in paragraph fills as intended, (continued)
- [nongnu] elpa/rust-mode 679501e 056/486: Cover all cases for padding in paragraph fills as intended, ELPA Syncer, 2021/08/07
- [nongnu] elpa/rust-mode bee96e8 067/486: Fix emacs indentation of multi-line match patterns, ELPA Syncer, 2021/08/07
- [nongnu] elpa/rust-mode 9d8dff8 077/486: Use defvar for rust-top-item-beg-re instead, ELPA Syncer, 2021/08/07
- [nongnu] elpa/rust-mode e2cd79b 084/486: auto merge of #14818 : tomjakubowski/rust/emacs-attributes-key-value, r=pnkfelix, ELPA Syncer, 2021/08/07
- [nongnu] elpa/rust-mode 9672625 066/486: Added more scripts to tidy check, ELPA Syncer, 2021/08/07
- [nongnu] elpa/rust-mode 7cb68f7 088/486: Add new keywords (particularly `where` & `virtual`) to editor modes., ELPA Syncer, 2021/08/07
- [nongnu] elpa/rust-mode efbc810 089/486: Replaced some TODO by FIXME, ELPA Syncer, 2021/08/07
- [nongnu] elpa/rust-mode 13c7e25 105/486: Ignore byte-compiled files, ELPA Syncer, 2021/08/07
- [nongnu] elpa/rust-mode 3878cc6 107/486: Allow user to override which emacs is used in run_rust_emacs_tests.sh, ELPA Syncer, 2021/08/07
- [nongnu] elpa/rust-mode 6b57bbf 117/486: Make features (and their tests) work on emacs 23, ELPA Syncer, 2021/08/07
- [nongnu] elpa/rust-mode 4d633fc 125/486: Merge pull request #32 from MicahChalmer/raw-string-handling,
ELPA Syncer <=
- [nongnu] elpa/rust-mode 8d99bf8 126/486: Merge pull request #31 from pnkfelix/more-robust-test-driver, ELPA Syncer, 2021/08/07
- [nongnu] elpa/rust-mode e16c37c 161/486: Remove Marmalade from the README, ELPA Syncer, 2021/08/07
- [nongnu] elpa/rust-mode ee171df 172/486: test $EMACS directly rather than using "which", ELPA Syncer, 2021/08/07
- [nongnu] elpa/rust-mode d1ed015 173/486: Distinguish face for doc-comments, ELPA Syncer, 2021/08/07
- [nongnu] elpa/rust-mode c9c7871 179/486: Merge pull request #79 from MicahChalmer/angle-bracket-madness, ELPA Syncer, 2021/08/07
- [nongnu] elpa/rust-mode ee564d5 185/486: Merge pull request #85 from talchas/master, ELPA Syncer, 2021/08/07
- [nongnu] elpa/rust-mode 99b128c 187/486: Fix slowness in angle bracket matching, ELPA Syncer, 2021/08/07
- [nongnu] elpa/rust-mode 5e77aed 191/486: Correcting highlighting of capitals in function names., ELPA Syncer, 2021/08/07
- [nongnu] elpa/rust-mode 5e51aaa 194/486: Merge pull request #69 from tromey/safe-local-variables, ELPA Syncer, 2021/08/07
- [nongnu] elpa/rust-mode 012537b 195/486: remove byte-compiler warnings and prevent future ones, ELPA Syncer, 2021/08/07