]> git.eshelyaron.com Git - emacs.git/commitdiff
Propertize character literals and special global variables differently
authorDmitry Gutov <dgutov@yandex.ru>
Thu, 10 Mar 2016 02:13:25 +0000 (04:13 +0200)
committerDmitry Gutov <dgutov@yandex.ru>
Thu, 10 Mar 2016 12:36:08 +0000 (14:36 +0200)
* 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.

lisp/progmodes/ruby-mode.el
test/indent/ruby.rb

index 0c5e8fe80543675f17b4ae37a7020237fb49c50f..94fd2771ab708367721eb0a2992659203ea6e4ae 100644 (file)
@@ -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
index 3fdb68064be98330ca18d8e35499640b3d9dd8db..522c3bd5465c81ae9463a9dea6d84f8ded9e8041 100644 (file)
@@ -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