diff --git a/elixir-mode.el b/elixir-mode.el index 270d0227..80401ce8 100644 --- a/elixir-mode.el +++ b/elixir-mode.el @@ -112,6 +112,16 @@ "For use with atoms & map keys." :group 'font-lock-faces) +(defvar elixir-ignored-var-face 'elixir-ignored-var-face) +(defface elixir-ignored-var-face + '((((class color) (min-colors 88) (background light)) + :foreground "#424242") + (((class color) (background dark)) + (:foreground "#616161")) + (t nil)) + "For use with ignored variables (starting with underscore)." + :group 'font-lock-faces) + (eval-when-compile (defconst elixir-rx-constituents `( @@ -405,6 +415,14 @@ is used to limit the scan." (one-or-more "\n"))) 1 font-lock-variable-name-face) + ;; Gray out variables starting with "_" + (,(elixir-rx symbol-start + (group (and "_" + (any "A-Z" "a-z" "0-9")) + (zero-or-more (any "A-Z" "a-z" "0-9" "_")) + (optional (or "?" "!")))) + 1 elixir-ignored-var-face) + ;; Map keys (,(elixir-rx (group (and (one-or-more identifiers) ":"))) 1 elixir-atom-face) diff --git a/test/elixir-mode-font-test.el b/test/elixir-mode-font-test.el index 2488e6df..cb4a011b 100644 --- a/test/elixir-mode-font-test.el +++ b/test/elixir-mode-font-test.el @@ -426,6 +426,33 @@ end " (should (eq (elixir-test-face-at 33) 'font-lock-string-face)))) +(ert-deftest elixir-mode-syntax-table/gray-out-ignored-var () + "https://github.com/elixir-lang/emacs-elixir/issues/292" + :tags '(fontification syntax-table) + (elixir-test-with-temp-buffer + "variable + _var + _x + _x! + _x? + _ + __MODULE__ +" + (should (eq (elixir-test-face-at 4) nil)) + (should (eq (elixir-test-face-at 14) 'elixir-ignored-var-face)) + (should (eq (elixir-test-face-at 15) 'elixir-ignored-var-face)) + (should (eq (elixir-test-face-at 23) 'elixir-ignored-var-face)) + (should (eq (elixir-test-face-at 24) 'elixir-ignored-var-face)) + (should (eq (elixir-test-face-at 30) 'elixir-ignored-var-face)) + (should (eq (elixir-test-face-at 32) 'elixir-ignored-var-face)) + (should (eq (elixir-test-face-at 38) 'elixir-ignored-var-face)) + (should (eq (elixir-test-face-at 40) 'elixir-ignored-var-face)) + (should (eq (elixir-test-face-at 46) 'font-lock-constant-face)) + (should (eq (elixir-test-face-at 46) 'font-lock-constant-face)) + (should (eq (elixir-test-face-at 52) 'font-lock-constant-face)) + (should (eq (elixir-test-face-at 53) 'font-lock-constant-face)) + (should (eq (elixir-test-face-at 55) 'font-lock-constant-face)))) + (provide 'elixir-mode-font-test) ;;; elixir-mode-font-test.el ends here