difftastic/vendored_parsers/tree-sitter-sfapex/apex/queries/highlights.scm

302 lines
5.0 KiB
Scheme

;; attempting to match concepts represented here:
;; https://code.visualstudio.com/api/language-extensions/semantic-highlight-guide
[
"["
"]"
"{"
"}"
"?"
";"
] @punctuation
;; Methods
(method_declaration
name: (identifier) @method)
(method_declaration
type: (type_identifier) @type)
(method_invocation
name: (identifier) @method)
(argument_list
(identifier) @variable)
(super) @function.defaultLibrary
(explicit_constructor_invocation
arguments: (argument_list
(identifier) @variable ))
;; Annotations
(annotation
name: (identifier) @decorator)
"@" @operator
(annotation_key_value
(identifier) @variable)
;; Types
(interface_declaration
name: (identifier) @interface)
(class_declaration
name: (identifier) @class)
(class_declaration
(superclass) @class)
(enum_declaration
name: (identifier) @enum)
(enum_constant
name: (identifier) @enumMember)
(interfaces
(type_list
(type_identifier) @interface ))
(local_variable_declaration
(type_identifier) @type )
( expression_statement (_ (identifier)) @variable)
(type_arguments "<" @punctuation)
(type_arguments ">" @punctuation)
; (identifier) @variable
((field_access
object: (identifier) @type)) ;; don't know what type of thing it is
(generic_type
(type_identifier) @type)
(type_arguments (type_identifier) @type)
(field_access
field: (identifier) @property)
((scoped_identifier
scope: (identifier) @type)
(#match? @type "^[A-Z]"))
((method_invocation
object: (identifier) @type)
(#match? @type "^[A-Z]"))
(field_declaration
type: (type_identifier) @type)
(method_declaration
(formal_parameters
(formal_parameter
name: (identifier) @parameter)))
(formal_parameter
type: (type_identifier) @type
(identifier) @variable)
(enhanced_for_statement
type: (type_identifier) @type
name: (identifier) @variable )
(enhanced_for_statement
value: (identifier) @variable)
(enhanced_for_statement
name: (identifier) @variable)
(object_creation_expression
type: (type_identifier) @type)
(array_creation_expression
type: (type_identifier) @type)
(array_type
element: (type_identifier) @type)
(catch_formal_parameter
(type_identifier) @type
name: (identifier) @variable)
(return_statement
(identifier) @variable)
(local_variable_declaration
(variable_declarator
name: (identifier) @variable ))
(for_statement
condition: (binary_expression
(identifier) @variable))
(for_statement
update: (update_expression
(identifier) @variable))
(constructor_declaration
name: (identifier) @class)
(dml_type) @function.defaultLibrary
(bound_apex_expression
(identifier) @variable)
(assignment_operator) @operator
(update_expression ["++" "--"] @operator)
(instanceof_expression
left: (identifier) @variable
right: (type_identifier) @type )
(cast_expression
type: (type_identifier) @type
value: (identifier) @variable)
(switch_expression
condition: (identifier) @variable)
(switch_label
(type_identifier) @type
(identifier) @variable )
(switch_rule
(switch_label
(identifier) @enumMember ))
(trigger_declaration
name: (identifier) @type
object: (identifier) @type
(trigger_event) @keyword
("," (trigger_event) @keyword)*)
(binary_expression
operator: [
">"
"<"
">="
"<="
"=="
"==="
"!="
"!=="
"&&"
"||"
"+"
"-"
"*"
"/"
"&"
"|"
"^"
"%"
"<<"
">>"
">>>"] @operator)
(binary_expression
(identifier) @variable)
(unary_expression
operator: [
"+"
"-"
"!"
"~"
]) @operator
(map_initializer "=>" @operator)
[
(boolean_type)
(void_type)
] @type.defaultLibrary
; Variables
(field_declaration
(modifiers (modifier ["final" "static"])(modifier ["final" "static"]))
(variable_declarator
name: (identifier) @variable.readonly))
(variable_declarator
(identifier) @property)
;; because itendifying it when declared doesn't carry to use
;; leans on the convention that "screaming snake case" is a const
((identifier) @variable.readonly
(#match? @variable.readonly "^_*[A-Z][A-Z\\d_]+$"))
(this) @variable.defaultLibrary
; Literals
[
(int)
] @number
[
(string_literal)
] @string
[
(line_comment)
(block_comment)
] @comment
;; ;; Keywords
[
"abstract"
"break"
"catch"
"class"
"continue"
"default"
"do"
"else"
"enum"
"extends"
"final"
"finally"
"for"
"get"
"global"
"if"
"implements"
"instanceof"
"interface"
"new"
"on"
"private"
"protected"
"public"
"return"
"set"
"static"
"switch"
"testMethod"
"throw"
"transient"
"try"
"trigger"
"virtual"
"when"
"while"
"with_sharing"
"without_sharing"
"inherited_sharing"
] @keyword
(assignment_expression
left: (identifier) @variable)
; (type_identifier) @type ;; not respecting precedence...
;; I don't love this but couldn't break them up right now
;; can't figure out how to let that be special without conflicting
;; in the grammar
"System.runAs" @method.defaultLibrary
(scoped_type_identifier
(type_identifier) @type)