Function: ruby-ts--font-lock-settings
ruby-ts--font-lock-settings is a byte-compiled function defined in
ruby-ts-mode.el.gz.
Signature
(ruby-ts--font-lock-settings LANGUAGE)
Documentation
Tree-sitter font-lock settings for Ruby.
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/ruby-ts-mode.el.gz
(defun ruby-ts--font-lock-settings (language)
"Tree-sitter font-lock settings for Ruby."
(treesit-font-lock-rules
:language language
:feature 'comment
'((comment) @ruby-ts--comment-font-lock)
:language language
:feature 'builtin-variable
`(((global_variable) @var (:match ,ruby-ts--predefined-variables @var)) @font-lock-builtin-face)
:language language
:feature 'builtin-constant
`(((constant) @var (:match ,ruby-ts--predefined-constants @var)) @font-lock-builtin-face)
:language language
:feature 'keyword
`([,@ruby-ts--keywords] @font-lock-keyword-face
(self) @font-lock-keyword-face
(super) @font-lock-keyword-face)
:language language
:feature 'constant
'((true) @font-lock-constant-face
(false) @font-lock-constant-face
(nil) @font-lock-constant-face)
;; Before 'operator so (unary) works.
:language language
:feature 'literal
'((unary ["+" "-"] [(integer) (rational) (float) (complex)]) @font-lock-number-face
(integer) @font-lock-number-face
(float) @font-lock-number-face
(complex) @font-lock-number-face
(rational) @font-lock-number-face)
;; Also before 'operator because % and / are operators
:language language
:feature 'regexp
'((regex "/" @font-lock-regexp-face)
(regex _ (string_content) @font-lock-regexp-face))
:language language
:feature 'operator
`("!" @font-lock-negation-char-face
[,@ruby-ts--operators] @font-lock-operator-face)
;; TODO: Consider using a different face for string delimiters.
;; font-lock-delimiter-face is not a good choice, though, because it
;; looks like 'default' in the default theme, and its documented purpose
;; is characters like commas, semicolons, etc.
:language language
:feature 'string
'((delimited_symbol [ ":\"" "\"" ] @font-lock-string-face)
(string "\"" @font-lock-string-face)
(string_array ["%w(" ")"] @font-lock-string-face)
(subshell "`" @font-lock-string-face)
(symbol_array ["%i(" ")"] @font-lock-constant-face))
:language language
:feature 'string
'([(string_content)
(heredoc_beginning)
(heredoc_content)
(heredoc_end)]
@font-lock-string-face)
:language language
:feature 'interpolation
'((interpolation "#{" @font-lock-misc-punctuation-face)
(interpolation "}" @font-lock-misc-punctuation-face))
:language language
:feature 'type
'((constant) @font-lock-type-face)
:language language
:feature 'global
'((global_variable) @font-lock-variable-use-face)
:language language
:feature 'instance
'((instance_variable) @font-lock-variable-use-face)
:language language
:feature 'method-definition
'((method
name: (identifier) @font-lock-function-name-face)
(singleton_method
name: (identifier) @font-lock-function-name-face)
(method
name: (setter) @font-lock-function-name-face))
:language language
:feature 'parameter-definition
'((method_parameters
(identifier) @font-lock-variable-name-face)
(block_parameters
(identifier) @font-lock-variable-name-face)
(optional_parameter
name: (identifier) @font-lock-variable-name-face)
(splat_parameter
name: (identifier) @font-lock-variable-name-face)
(hash_splat_parameter
name: (identifier) @font-lock-variable-name-face)
(block_parameter
name: (identifier) @font-lock-variable-name-face)
(destructured_parameter
(identifier) @font-lock-variable-name-face)
(lambda_parameters
(identifier) @font-lock-variable-name-face)
(exception_variable
(identifier) @font-lock-variable-name-face)
(array_pattern
(identifier) @font-lock-variable-name-face)
(keyword_pattern
value: (identifier) @font-lock-variable-name-face)
(keyword_pattern
key: (hash_key_symbol) @font-lock-variable-name-face
!value)
(as_pattern
name: (identifier) @font-lock-variable-name-face)
(in_clause
pattern: (identifier) @font-lock-variable-name-face))
:language language
:feature 'builtin-function
`((((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.
:language language
:feature 'function
'((call
method: (identifier) @font-lock-function-call-face))
:language language
:feature 'assignment
'((assignment
left: (identifier) @font-lock-variable-name-face)
(assignment
left: (left_assignment_list (identifier) @font-lock-variable-name-face))
(operator_assignment
left: (identifier) @font-lock-variable-name-face))
:language language
:feature 'symbol
'((bare_symbol) @font-lock-constant-face
(delimited_symbol (string_content) @font-lock-constant-face)
(hash_key_symbol) @font-lock-constant-face
(simple_symbol) @font-lock-constant-face)
:language language
:feature 'error
'((ERROR) @font-lock-warning-face)
:feature 'escape-sequence
:language language
:override t
'((escape_sequence) @font-lock-escape-face)
:language language
:feature 'bracket
'((["(" ")" "[" "]" "{" "}"]) @font-lock-bracket-face)
:language language
:feature 'punctuation
`(([,@ruby-ts--delimiters] @font-lock-delimiter-face))))