ruby-ts-mode: Highlight builtin methods
* lisp/progmodes/ruby-mode.el (ruby-builtin-methods-with-reqs) (ruby-builtin-methods-no-reqs): New constants, extracted. (ruby-font-lock-keywords): Replace values with references. * lisp/progmodes/ruby-ts-mode.el (ruby-ts--builtin-methods): New variable. Construct regexp from aforementioned constants' values. * lisp/progmodes/ruby-ts-mode.el (ruby-ts--font-lock-settings): Use it. * lisp/progmodes/ruby-ts-mode.el (ruby-ts-mode): Add new font-lock feature: builtin-functions. * lisp/progmodes/ruby-ts-mode.el (ruby-ts--predefined-constants) (ruby-ts--predefined-variables): Unrelated to the rest of the patch, add string-start and string-end anchors.
This commit is contained in:
parent
370b1ac99e
commit
d66ac5285f
2 changed files with 98 additions and 79 deletions
|
@ -141,6 +141,81 @@ This should only be called after matching against `ruby-here-doc-beg-re'."
|
||||||
|
|
||||||
It should match the part after \"def\" and until \"=\".")
|
It should match the part after \"def\" and until \"=\".")
|
||||||
|
|
||||||
|
(defconst ruby-builtin-methods-with-reqs
|
||||||
|
'( ;; built-in methods on Kernel
|
||||||
|
"at_exit"
|
||||||
|
"autoload"
|
||||||
|
"autoload?"
|
||||||
|
"callcc"
|
||||||
|
"catch"
|
||||||
|
"eval"
|
||||||
|
"exec"
|
||||||
|
"format"
|
||||||
|
"lambda"
|
||||||
|
"load"
|
||||||
|
"loop"
|
||||||
|
"open"
|
||||||
|
"p"
|
||||||
|
"printf"
|
||||||
|
"proc"
|
||||||
|
"putc"
|
||||||
|
"require"
|
||||||
|
"require_relative"
|
||||||
|
"spawn"
|
||||||
|
"sprintf"
|
||||||
|
"syscall"
|
||||||
|
"system"
|
||||||
|
"throw"
|
||||||
|
"trace_var"
|
||||||
|
"trap"
|
||||||
|
"untrace_var"
|
||||||
|
"warn"
|
||||||
|
;; keyword-like private methods on Module
|
||||||
|
"alias_method"
|
||||||
|
"attr"
|
||||||
|
"attr_accessor"
|
||||||
|
"attr_reader"
|
||||||
|
"attr_writer"
|
||||||
|
"define_method"
|
||||||
|
"extend"
|
||||||
|
"include"
|
||||||
|
"module_function"
|
||||||
|
"prepend"
|
||||||
|
"private_class_method"
|
||||||
|
"private_constant"
|
||||||
|
"public_class_method"
|
||||||
|
"public_constant"
|
||||||
|
"refine"
|
||||||
|
"using")
|
||||||
|
"List of built-in methods that require at least one argument.")
|
||||||
|
|
||||||
|
(defconst ruby-builtin-methods-no-reqs
|
||||||
|
'("__callee__"
|
||||||
|
"__dir__"
|
||||||
|
"__method__"
|
||||||
|
"abort"
|
||||||
|
"binding"
|
||||||
|
"block_given?"
|
||||||
|
"caller"
|
||||||
|
"exit"
|
||||||
|
"exit!"
|
||||||
|
"fail"
|
||||||
|
"fork"
|
||||||
|
"global_variables"
|
||||||
|
"local_variables"
|
||||||
|
"print"
|
||||||
|
"private"
|
||||||
|
"protected"
|
||||||
|
"public"
|
||||||
|
"puts"
|
||||||
|
"raise"
|
||||||
|
"rand"
|
||||||
|
"readline"
|
||||||
|
"readlines"
|
||||||
|
"sleep"
|
||||||
|
"srand")
|
||||||
|
"List of built-in methods that only have optional arguments.")
|
||||||
|
|
||||||
(defvar ruby-use-smie t)
|
(defvar ruby-use-smie t)
|
||||||
(make-obsolete-variable 'ruby-use-smie nil "28.1")
|
(make-obsolete-variable 'ruby-use-smie nil "28.1")
|
||||||
|
|
||||||
|
@ -2292,84 +2367,13 @@ It will be properly highlighted even when the call omits parens.")
|
||||||
;; Core methods that have required arguments.
|
;; Core methods that have required arguments.
|
||||||
(,(concat
|
(,(concat
|
||||||
ruby-font-lock-keyword-beg-re
|
ruby-font-lock-keyword-beg-re
|
||||||
(regexp-opt
|
(regexp-opt ruby-builtin-methods-with-reqs 'symbols))
|
||||||
'( ;; built-in methods on Kernel
|
|
||||||
"at_exit"
|
|
||||||
"autoload"
|
|
||||||
"autoload?"
|
|
||||||
"callcc"
|
|
||||||
"catch"
|
|
||||||
"eval"
|
|
||||||
"exec"
|
|
||||||
"format"
|
|
||||||
"lambda"
|
|
||||||
"load"
|
|
||||||
"loop"
|
|
||||||
"open"
|
|
||||||
"p"
|
|
||||||
"printf"
|
|
||||||
"proc"
|
|
||||||
"putc"
|
|
||||||
"require"
|
|
||||||
"require_relative"
|
|
||||||
"spawn"
|
|
||||||
"sprintf"
|
|
||||||
"syscall"
|
|
||||||
"system"
|
|
||||||
"throw"
|
|
||||||
"trace_var"
|
|
||||||
"trap"
|
|
||||||
"untrace_var"
|
|
||||||
"warn"
|
|
||||||
;; keyword-like private methods on Module
|
|
||||||
"alias_method"
|
|
||||||
"attr"
|
|
||||||
"attr_accessor"
|
|
||||||
"attr_reader"
|
|
||||||
"attr_writer"
|
|
||||||
"define_method"
|
|
||||||
"extend"
|
|
||||||
"include"
|
|
||||||
"module_function"
|
|
||||||
"prepend"
|
|
||||||
"private_class_method"
|
|
||||||
"private_constant"
|
|
||||||
"public_class_method"
|
|
||||||
"public_constant"
|
|
||||||
"refine"
|
|
||||||
"using")
|
|
||||||
'symbols))
|
|
||||||
(1 (unless (looking-at " *\\(?:[]|,.)}=]\\|$\\)")
|
(1 (unless (looking-at " *\\(?:[]|,.)}=]\\|$\\)")
|
||||||
font-lock-builtin-face)))
|
font-lock-builtin-face)))
|
||||||
;; Kernel methods that have no required arguments.
|
;; Kernel methods that have no required arguments.
|
||||||
(,(concat
|
(,(concat
|
||||||
ruby-font-lock-keyword-beg-re
|
ruby-font-lock-keyword-beg-re
|
||||||
(regexp-opt
|
(regexp-opt ruby-builtin-methods-no-reqs 'symbols))
|
||||||
'("__callee__"
|
|
||||||
"__dir__"
|
|
||||||
"__method__"
|
|
||||||
"abort"
|
|
||||||
"binding"
|
|
||||||
"block_given?"
|
|
||||||
"caller"
|
|
||||||
"exit"
|
|
||||||
"exit!"
|
|
||||||
"fail"
|
|
||||||
"fork"
|
|
||||||
"global_variables"
|
|
||||||
"local_variables"
|
|
||||||
"print"
|
|
||||||
"private"
|
|
||||||
"protected"
|
|
||||||
"public"
|
|
||||||
"puts"
|
|
||||||
"raise"
|
|
||||||
"rand"
|
|
||||||
"readline"
|
|
||||||
"readlines"
|
|
||||||
"sleep"
|
|
||||||
"srand")
|
|
||||||
'symbols))
|
|
||||||
(1 font-lock-builtin-face))
|
(1 font-lock-builtin-face))
|
||||||
;; Here-doc beginnings.
|
;; Here-doc beginnings.
|
||||||
(,ruby-here-doc-beg-re
|
(,ruby-here-doc-beg-re
|
||||||
|
|
|
@ -116,21 +116,30 @@
|
||||||
"Ruby's punctuation characters.")
|
"Ruby's punctuation characters.")
|
||||||
|
|
||||||
(defvar ruby-ts--predefined-constants
|
(defvar ruby-ts--predefined-constants
|
||||||
(rx (or "ARGF" "ARGV" "DATA" "ENV" "RUBY_COPYRIGHT"
|
(rx string-start
|
||||||
|
(or "ARGF" "ARGV" "DATA" "ENV" "RUBY_COPYRIGHT"
|
||||||
"RUBY_DESCRIPTION" "RUBY_ENGINE" "RUBY_ENGINE_VERSION"
|
"RUBY_DESCRIPTION" "RUBY_ENGINE" "RUBY_ENGINE_VERSION"
|
||||||
"RUBY_PATCHLEVEL" "RUBY_PLATFORM" "RUBY_RELEASE_DATE"
|
"RUBY_PATCHLEVEL" "RUBY_PLATFORM" "RUBY_RELEASE_DATE"
|
||||||
"RUBY_REVISION" "RUBY_VERSION" "STDERR" "STDIN" "STDOUT"
|
"RUBY_REVISION" "RUBY_VERSION" "STDERR" "STDIN" "STDOUT"
|
||||||
"TOPLEVEL_BINDING"))
|
"TOPLEVEL_BINDING")
|
||||||
|
string-end)
|
||||||
"Ruby predefined global constants.")
|
"Ruby predefined global constants.")
|
||||||
|
|
||||||
(defvar ruby-ts--predefined-variables
|
(defvar ruby-ts--predefined-variables
|
||||||
(rx (or "$!" "$@" "$~" "$&" "$‘" "$‘" "$+" "$=" "$/" "$\\" "$," "$;"
|
(rx string-start
|
||||||
|
(or "$!" "$@" "$~" "$&" "$‘" "$‘" "$+" "$=" "$/" "$\\" "$," "$;"
|
||||||
"$." "$<" "$>" "$_" "$*" "$$" "$?" "$:" "$LOAD_PATH"
|
"$." "$<" "$>" "$_" "$*" "$$" "$?" "$:" "$LOAD_PATH"
|
||||||
"$LOADED_FEATURES" "$DEBUG" "$FILENAME" "$stderr" "$stdin"
|
"$LOADED_FEATURES" "$DEBUG" "$FILENAME" "$stderr" "$stdin"
|
||||||
"$stdout" "$VERBOSE" "$-a" "$-i" "$-l" "$-p"
|
"$stdout" "$VERBOSE" "$-a" "$-i" "$-l" "$-p"
|
||||||
(seq "$" (+ digit))))
|
(seq "$" (+ digit)))
|
||||||
|
string-end)
|
||||||
"Ruby predefined global variables.")
|
"Ruby predefined global variables.")
|
||||||
|
|
||||||
|
(defvar ruby-ts--builtin-methods
|
||||||
|
(format "\\`%s\\'" (regexp-opt (append ruby-builtin-methods-no-reqs
|
||||||
|
ruby-builtin-methods-with-reqs)))
|
||||||
|
"Ruby built-in methods.")
|
||||||
|
|
||||||
(defconst ruby-ts--class-or-module-regex
|
(defconst ruby-ts--class-or-module-regex
|
||||||
(rx string-start
|
(rx string-start
|
||||||
(or "class" "module" "singleton_class")
|
(or "class" "module" "singleton_class")
|
||||||
|
@ -324,6 +333,12 @@ values of OVERRIDE"
|
||||||
(in_clause
|
(in_clause
|
||||||
pattern: (identifier) @font-lock-variable-name-face))
|
pattern: (identifier) @font-lock-variable-name-face))
|
||||||
|
|
||||||
|
:language language
|
||||||
|
:feature 'builtin-functions
|
||||||
|
`((((identifier) @font-lock-builtin-face)
|
||||||
|
(:match ,ruby-ts--builtin-methods
|
||||||
|
@font-lock-builtin-face)))
|
||||||
|
|
||||||
;; Yuan recommends also putting method definitions into the
|
;; Yuan recommends also putting method definitions into the
|
||||||
;; 'function' category (thus keeping it in both). I've opted to
|
;; 'function' category (thus keeping it in both). I've opted to
|
||||||
;; just use separate categories for them -- dgutov.
|
;; just use separate categories for them -- dgutov.
|
||||||
|
@ -1022,9 +1037,9 @@ leading double colon is not added."
|
||||||
(setq-local treesit-font-lock-feature-list
|
(setq-local treesit-font-lock-feature-list
|
||||||
'(( comment method-definition parameter-definition)
|
'(( comment method-definition parameter-definition)
|
||||||
( keyword regexp string type)
|
( keyword regexp string type)
|
||||||
( builtin-variable builtin-constant constant
|
( builtin-variable builtin-constant builtin-functions
|
||||||
delimiter escape-sequence
|
delimiter escape-sequence
|
||||||
global instance
|
constant global instance
|
||||||
interpolation literal symbol assignment)
|
interpolation literal symbol assignment)
|
||||||
( bracket error function operator punctuation)))
|
( bracket error function operator punctuation)))
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue