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 \"=\".")
|
||||
|
||||
(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)
|
||||
(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.
|
||||
(,(concat
|
||||
ruby-font-lock-keyword-beg-re
|
||||
(regexp-opt
|
||||
'( ;; 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))
|
||||
(regexp-opt ruby-builtin-methods-with-reqs 'symbols))
|
||||
(1 (unless (looking-at " *\\(?:[]|,.)}=]\\|$\\)")
|
||||
font-lock-builtin-face)))
|
||||
;; Kernel methods that have no required arguments.
|
||||
(,(concat
|
||||
ruby-font-lock-keyword-beg-re
|
||||
(regexp-opt
|
||||
'("__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))
|
||||
(regexp-opt ruby-builtin-methods-no-reqs 'symbols))
|
||||
(1 font-lock-builtin-face))
|
||||
;; Here-doc beginnings.
|
||||
(,ruby-here-doc-beg-re
|
||||
|
|
|
@ -116,21 +116,30 @@
|
|||
"Ruby's punctuation characters.")
|
||||
|
||||
(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_PATCHLEVEL" "RUBY_PLATFORM" "RUBY_RELEASE_DATE"
|
||||
"RUBY_REVISION" "RUBY_VERSION" "STDERR" "STDIN" "STDOUT"
|
||||
"TOPLEVEL_BINDING"))
|
||||
"TOPLEVEL_BINDING")
|
||||
string-end)
|
||||
"Ruby predefined global constants.")
|
||||
|
||||
(defvar ruby-ts--predefined-variables
|
||||
(rx (or "$!" "$@" "$~" "$&" "$‘" "$‘" "$+" "$=" "$/" "$\\" "$," "$;"
|
||||
(rx string-start
|
||||
(or "$!" "$@" "$~" "$&" "$‘" "$‘" "$+" "$=" "$/" "$\\" "$," "$;"
|
||||
"$." "$<" "$>" "$_" "$*" "$$" "$?" "$:" "$LOAD_PATH"
|
||||
"$LOADED_FEATURES" "$DEBUG" "$FILENAME" "$stderr" "$stdin"
|
||||
"$stdout" "$VERBOSE" "$-a" "$-i" "$-l" "$-p"
|
||||
(seq "$" (+ digit))))
|
||||
(seq "$" (+ digit)))
|
||||
string-end)
|
||||
"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
|
||||
(rx string-start
|
||||
(or "class" "module" "singleton_class")
|
||||
|
@ -324,6 +333,12 @@ values of OVERRIDE"
|
|||
(in_clause
|
||||
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
|
||||
;; 'function' category (thus keeping it in both). I've opted to
|
||||
;; just use separate categories for them -- dgutov.
|
||||
|
@ -1022,9 +1037,9 @@ leading double colon is not added."
|
|||
(setq-local treesit-font-lock-feature-list
|
||||
'(( comment method-definition parameter-definition)
|
||||
( keyword regexp string type)
|
||||
( builtin-variable builtin-constant constant
|
||||
( builtin-variable builtin-constant builtin-functions
|
||||
delimiter escape-sequence
|
||||
global instance
|
||||
constant global instance
|
||||
interpolation literal symbol assignment)
|
||||
( bracket error function operator punctuation)))
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue