From f80a0ce35b5b4d179b043d01ec7a55dcaf04f8ab Mon Sep 17 00:00:00 2001 From: Christophe Troestler Date: Mon, 27 Dec 2021 11:40:28 +0100 Subject: Do not prettify && when it is a double reference --- rust-mode.el | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/rust-mode.el b/rust-mode.el index eec6057..6f8a214 100644 --- a/rust-mode.el +++ b/rust-mode.el @@ -222,12 +222,14 @@ Use idomenu (imenu with `ido-mode') for best mileage.") See `prettify-symbols-compose-predicate'." (and (fboundp 'prettify-symbols-default-compose-p) (prettify-symbols-default-compose-p start end match) - ;; Make sure there is a space before || as it is also used for - ;; functions with 0 arguments. - (not (and (string= match "||") - (save-excursion - (goto-char start) - (looking-back "\\(?:\\ Date: Mon, 27 Dec 2021 19:56:51 +0100 Subject: Do not prettify || after various symbols --- rust-mode.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust-mode.el b/rust-mode.el index 6f8a214..32794c5 100644 --- a/rust-mode.el +++ b/rust-mode.el @@ -227,7 +227,7 @@ See `prettify-symbols-compose-predicate'." (pcase match ("||" (not (save-excursion (goto-char start) - (looking-back "\\(?:\\ Date: Mon, 27 Dec 2021 12:11:49 +0100 Subject: Improve regexp to match the reference mark & --- rust-mode.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rust-mode.el b/rust-mode.el index 32794c5..773251d 100644 --- a/rust-mode.el +++ b/rust-mode.el @@ -467,7 +467,8 @@ Does not match type annotations of the form \"foo::<\"." ;; Question mark operator ("\\?" . 'rust-question-mark) - ("\\(&\\)'?\\<" 1 'rust-ampersand-face) + ("\\(&+\\)\\(?:'\\(?:\\<\\|_\\)\\|\\<\\|[[({:*_|]\\)" + 1 'rust-ampersand-face) ) ;; Ensure we highlight `Foo` in `struct Foo` as a type. -- cgit v1.2.3 From 2d4d2d2722db0ed589f4ba9e7b9ded4bee45eec7 Mon Sep 17 00:00:00 2001 From: Christophe Troestler Date: Mon, 27 Dec 2021 12:12:56 +0100 Subject: Add tests to check the syntax highlighting of & --- rust-mode-tests.el | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/rust-mode-tests.el b/rust-mode-tests.el index 24c2682..0d9f06b 100644 --- a/rust-mode-tests.el +++ b/rust-mode-tests.el @@ -1354,6 +1354,92 @@ list of substrings of `STR' each followed by its face." "mut" font-lock-keyword-face "bar" font-lock-variable-name-face))) +(ert-deftest font-lock-ampersand () + (rust-test-font-lock + "f(&a)" + '("&" rust-ampersand-face)) + (rust-test-font-lock + "a && b &&& c" + nil) + (rust-test-font-lock + "&'a v" + '("&" rust-ampersand-face + "a" font-lock-variable-name-face)) + (rust-test-font-lock + "&'static v" + '("&" rust-ampersand-face + "static" font-lock-keyword-face)) + (rust-test-font-lock + "&mut v" + '("&" rust-ampersand-face + "mut" font-lock-keyword-face)) + (rust-test-font-lock + "&f(&x)" + '("&" rust-ampersand-face + "&" rust-ampersand-face)) + (rust-test-font-lock + "fn f(x: &X)" + '("fn" font-lock-keyword-face + "f" font-lock-function-name-face + "x" font-lock-variable-name-face + "&" rust-ampersand-face + "X" font-lock-type-face)) + (rust-test-font-lock + "f(&X{x})" + '("&" rust-ampersand-face + "X" font-lock-type-face)) + (rust-test-font-lock + "let x: &'_ f64 = &1.;" + '("let" font-lock-keyword-face + "x" font-lock-variable-name-face + "&" rust-ampersand-face + "_" font-lock-variable-name-face + "f64" font-lock-type-face + "&" rust-ampersand-face)) + (rust-test-font-lock + "let x = &&1;" + '("let" font-lock-keyword-face + "x" font-lock-variable-name-face + "&&" rust-ampersand-face)) + (rust-test-font-lock + "let x = &*y;" + '("let" font-lock-keyword-face + "x" font-lock-variable-name-face + "&" rust-ampersand-face)) + (rust-test-font-lock + "let x = &::std::f64::consts::PI;" + '("let" font-lock-keyword-face + "x" font-lock-variable-name-face + "&" rust-ampersand-face + "std" font-lock-constant-face + "f64" font-lock-type-face + "consts" font-lock-constant-face + "PI" font-lock-type-face)) + (rust-test-font-lock + "let x = &(1, 2);" + '("let" font-lock-keyword-face + "x" font-lock-variable-name-face + "&" rust-ampersand-face)) + (rust-test-font-lock + "let x = &{1};" + '("let" font-lock-keyword-face + "x" font-lock-variable-name-face + "&" rust-ampersand-face)) + (rust-test-font-lock + "let f = &|x| {x + 1};" + '("let" font-lock-keyword-face + "f" font-lock-variable-name-face + "&" rust-ampersand-face)) + (rust-test-font-lock + "let x: &_ = &1;" + '("let" font-lock-keyword-face + "x" font-lock-variable-name-face + "&" rust-ampersand-face + "&" rust-ampersand-face)) + (rust-test-font-lock + "&[1,2]" + '("&" rust-ampersand-face))) + (ert-deftest font-lock-if-let-binding () (rust-test-font-lock "if let Some(var) = some_var { /* no-op */ }" -- cgit v1.2.3