From: Dmitry Gutov Date: Thu, 10 Mar 2016 02:13:25 +0000 (+0200) Subject: Propertize character literals and special global variables differently X-Git-Tag: emacs-25.0.93~109 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=28532a91a96f30ab468d06b410bd199fb08dd5e9;p=emacs.git Propertize character literals and special global variables differently * lisp/progmodes/ruby-mode.el (ruby-syntax-propertize): Propertize character literals and global variables with special names with prefix and symbol syntax classes, for SMIE to tokenize them together automatically. (ruby-font-lock-keywords): Fix an old regression in highlighting character literals. --- diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index 0c5e8fe8054..94fd2771ab7 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -1844,13 +1844,15 @@ It will be properly highlighted even when the call omits parens.") (syntax-propertize-rules ;; $' $" $` .... are variables. ;; ?' ?" ?` are character literals (one-char strings in 1.9+). - ("\\([?$]\\)[#\"'`]" + ("\\([?$]\\)[#\"'`:?]" (1 (if (save-excursion (nth 3 (syntax-ppss (match-beginning 0)))) ;; Within a string, skip. (ignore (goto-char (match-end 1))) - (string-to-syntax "\\")))) + (put-text-property (match-end 1) (match-end 0) + 'syntax-table (string-to-syntax "_")) + (string-to-syntax "'")))) ;; Symbols with special characters. ("\\(^\\|[^:]\\)\\(:\\([-+~]@?\\|[/%&|^`]\\|\\*\\*?\\|<\\(<\\|=>?\\)?\\|>[>=]?\\|===?\\|=~\\|![~=]?\\|\\[\\]=?\\)\\)" (3 (string-to-syntax "_"))) @@ -2222,7 +2224,7 @@ See `font-lock-syntax-table'.") 1 font-lock-negation-char-face) ;; Character literals. ;; FIXME: Support longer escape sequences. - ("\\_<\\?\\\\?\\S " 0 font-lock-string-face) + ("\\?\\\\?\\_<.\\_>" 0 font-lock-string-face) ;; Regexp options. ("\\(?:\\s|\\|/\\)\\([imxo]+\\)" 1 (when (save-excursion diff --git a/test/indent/ruby.rb b/test/indent/ruby.rb index 3fdb68064be..522c3bd5465 100644 --- a/test/indent/ruby.rb +++ b/test/indent/ruby.rb @@ -174,6 +174,9 @@ qux :+, bar, :a +b = $: +c = ?? + # Example from http://www.ruby-doc.org/docs/ProgrammingRuby/html/language.html d = 4 + 5 + # no '\' needed 6 + 7