]> git.eshelyaron.com Git - emacs.git/commitdiff
Make $, : and @ "prefix characters" in ruby-mode
authorDmitry Gutov <dgutov@yandex.ru>
Tue, 23 Feb 2016 00:27:49 +0000 (02:27 +0200)
committerDmitry Gutov <dgutov@yandex.ru>
Tue, 23 Feb 2016 00:28:40 +0000 (02:28 +0200)
* lisp/progmodes/ruby-mode.el (ruby-mode-syntax-table): Change the
syntax classes of $, : and @ to "prefix character"
(http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00272.html).
(ruby-syntax-propertize): Undo that specifically for colons
followed by an opening paren or bracket.
(ruby-font-lock-keyword-beg-re): Include colon character.
(ruby-font-lock-keywords): Adjust the constants matcher for `:'
not being a symbol constituent anymore.

lisp/progmodes/ruby-mode.el

index 9fbebebe594d13469b568c1ad3b8365b44849da6..cebc1dc98230818d7cf692e1b570b9d125a0ac91 100644 (file)
@@ -32,7 +32,7 @@
 ;; file after putting it on your load path:
 ;;
 ;;    (autoload 'ruby-mode "ruby-mode" "Major mode for ruby files" t)
-;;    (add-to-list 'auto-mode-alist '("\\.rb$" . ruby-mode))
+;;    (add-to-list 'auto-mode-alist '("\\.rb\\'" . ruby-mode))
 ;;    (add-to-list 'interpreter-mode-alist '("ruby" . ruby-mode))
 ;;
 ;; Still needs more docstrings; search below for TODO.
@@ -188,9 +188,10 @@ This should only be called after matching against `ruby-here-doc-beg-re'."
     (modify-syntax-entry ?# "<" table)
     (modify-syntax-entry ?\n ">" table)
     (modify-syntax-entry ?\\ "\\" table)
-    (modify-syntax-entry ?$ "." table)
+    (modify-syntax-entry ?$ "'" table)
     (modify-syntax-entry ?_ "_" table)
-    (modify-syntax-entry ?: "_" table)
+    (modify-syntax-entry ?: "'" table)
+    (modify-syntax-entry ?@ "'" table)
     (modify-syntax-entry ?< "." table)
     (modify-syntax-entry ?> "." table)
     (modify-syntax-entry ?& "." table)
@@ -1859,6 +1860,10 @@ It will be properly highlighted even when the call omits parens.")
             (string-to-syntax "_"))))
       ;; Backtick method redefinition.
       ("^[ \t]*def +\\(`\\)" (1 "_"))
+      ;; Ternary operator colon followed by opening paren or bracket
+      ;; (semi-important for indentation).
+      ("\\(:\\)\\(?:[\({]\\|\\[[^]]\\)"
+       (1 (string-to-syntax ".")))
       ;; Regular expressions.  Start with matching unescaped slash.
       ("\\(?:\\=\\|[^\\]\\)\\(?:\\\\\\\\\\)*\\(/\\)"
        (1 (let ((state (save-excursion (syntax-ppss (match-beginning 1)))))
@@ -2024,7 +2029,7 @@ It will be properly highlighted even when the call omits parens.")
   "The syntax table to use for fontifying Ruby mode buffers.
 See `font-lock-syntax-table'.")
 
-(defconst ruby-font-lock-keyword-beg-re "\\(?:^\\|[^.@$]\\|\\.\\.\\)")
+(defconst ruby-font-lock-keyword-beg-re "\\(?:^\\|[^.@$:]\\|\\.\\.\\)")
 
 (defconst ruby-font-lock-keywords
   `(;; Functions.
@@ -2197,7 +2202,7 @@ See `font-lock-syntax-table'.")
     ("\\(\\$\\|@\\|@@\\)\\(\\w\\|_\\)+"
      0 font-lock-variable-name-face)
     ;; Constants.
-    ("\\(?:\\_<\\|::\\)\\([A-Z]+\\(\\w\\|_\\)*\\)"
+    ("\\_<\\([A-Z]+\\(\\w\\|_\\)*\\)"
      1 (unless (eq ?\( (char-after)) font-lock-type-face))
     ;; Ruby 1.9-style symbol hash keys.
     ("\\(?:^\\s *\\|[[{(,]\\s *\\|\\sw\\s +\\)\\(\\(\\sw\\|_\\)+:\\)[^:]"