feat: add parsers and queries for apex, sosl, soql (#5396)

This commit is contained in:
Xi Xiao 2023-09-17 20:00:21 +03:00 committed by GitHub
parent dac6efbaff
commit 280cf6fddd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 534 additions and 0 deletions

View file

@ -5,6 +5,9 @@
"agda": {
"revision": "80ea622cf952a0059e168e5c92a798b2f1925652"
},
"apex": {
"revision": "e63bcdcc26ae808b3fe79dfb8fa61bebdb95bda4"
},
"arduino": {
"revision": "db929fc6822b9b9e1211678d508f187894ce0345"
},
@ -524,6 +527,12 @@
"solidity": {
"revision": "168020304759ad5d8b4a88a541a699134e3730c5"
},
"soql": {
"revision": "e63bcdcc26ae808b3fe79dfb8fa61bebdb95bda4"
},
"sosl": {
"revision": "e63bcdcc26ae808b3fe79dfb8fa61bebdb95bda4"
},
"sparql": {
"revision": "05f949d3c1c15e3261473a244d3ce87777374dec"
},

View file

@ -91,6 +91,15 @@ list.agda = {
maintainers = { "@Decodetalkers" },
}
list.apex = {
install_info = {
url = "https://github.com/aheber/tree-sitter-sfapex",
files = { "src/parser.c" },
location = "apex",
},
maintainers = { "@aheber" },
}
list.arduino = {
install_info = {
url = "https://github.com/ObserverOfTime/tree-sitter-arduino",
@ -1545,6 +1554,24 @@ list.solidity = {
maintainers = { "@amaanq" },
}
list.soql = {
install_info = {
url = "https://github.com/aheber/tree-sitter-sfapex",
files = { "src/parser.c" },
location = "soql",
},
maintainers = { "@aheber" },
}
list.sosl = {
install_info = {
url = "https://github.com/aheber/tree-sitter-sfapex",
files = { "src/parser.c" },
location = "sosl",
},
maintainers = { "@aheber" },
}
list.sparql = {
install_info = {
url = "https://github.com/BonaBeavis/tree-sitter-sparql",

6
queries/apex/folds.scm Normal file
View file

@ -0,0 +1,6 @@
[
(class_body)
(constructor_declaration)
(argument_list)
(annotation_argument_list)
] @fold

248
queries/apex/highlights.scm Normal file
View file

@ -0,0 +1,248 @@
; inherits: soql
;;; Apex + SOQL
[
"["
"]"
"{"
"}"
"("
")"
] @punctuation.bracket
[
","
"."
":"
"?"
";"
] @punctuation.delimiter
;; Default general color defination
(identifier) @variable
(type_identifier) @type
;; Methods
(method_declaration
name: (identifier) @method)
(method_invocation
name: (identifier) @method.call)
(super) @function.builtin
;; Annotations
(annotation
name: (identifier) @attribute)
;; Types
(interface_declaration
name: (identifier) @type)
(class_declaration
name: (identifier) @type)
(class_declaration
(superclass) @type)
(enum_declaration
name: (identifier) @type)
(enum_constant
name: (identifier) @constant)
(type_arguments "<" @punctuation.delimiter)
(type_arguments ">" @punctuation.delimiter)
((field_access
object: (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]"))
(method_declaration
(formal_parameters
(formal_parameter
name: (identifier) @parameter)))
(constructor_declaration
name: (identifier) @constructor)
(dml_type) @function.builtin
(assignment_operator) @operator
(update_expression ["++" "--"] @operator)
(trigger_declaration
name: (identifier) @type
object: (identifier) @type
(trigger_event) @keyword
("," (trigger_event) @keyword)*)
[
"@"
"="
"!="
"<="
">="
] @operator
(binary_expression
operator: [
">"
"<"
"=="
"==="
"!=="
"&&"
"||"
"+"
"-"
"*"
"/"
"&"
"|"
"^"
"%"
"<<"
">>"
">>>"] @operator)
(unary_expression
operator: [
"+"
"-"
"!"
"~"
]) @operator
(map_initializer "=>" @operator)
[
(boolean_type)
(void_type)
] @type.builtin;;
; Fields
(field_declaration
declarator: (variable_declarator
name: (identifier) @field))
(field_access
field: (identifier) @field)
; Variables
(field_declaration
(modifiers (modifier ["final" "static"])(modifier ["final" "static"]))
(variable_declarator
name: (identifier) @constant))
(variable_declarator
(identifier) @property)
((identifier) @constant
(#lua-match? @constant "^[A-Z][A-Z0-9_]+$")) ; SCREAM SNAKE CASE
(this) @variable.builtin
; Literals
[
(int)
(decimal)
(currency_literal)
] @number
(string_literal) @string
[
(line_comment)
(block_comment)
] @comment
(null_literal) @constant.builtin
;; ;; Keywords
[
"abstract"
"final"
"private"
"protected"
"public"
"static"
] @type.qualifier
[
"if"
"else"
"switch"
] @conditional
[
"for"
"while"
"do"
"break"
] @repeat
[
"return"
] @keyword.return
[
"throw"
"finally"
"try"
"catch"
] @exception
"new" @keyword.operator
[
"abstract"
"class"
"continue"
"default"
"enum"
"extends"
"final"
"get"
"global"
"implements"
"instanceof"
"interface"
"on"
"private"
"protected"
"public"
"set"
"static"
"testMethod"
"transient"
"trigger"
"virtual"
"when"
"with_sharing"
"without_sharing"
"inherited_sharing"
] @keyword
"System.runAs" @type.builtin

66
queries/apex/locals.scm Normal file
View file

@ -0,0 +1,66 @@
; declarations
(class_declaration) @scope
(method_declaration) @scope
(constructor_declaration) @scope
(enum_declaration) @scope
(enhanced_for_statement) @scope
; if/else
(if_statement) @scope
(if_statement
consequence: (_) @scope) ; if body in case there are no braces
(if_statement
alternative: (_) @scope) ; else body in case there are no braces
; try/catch
(try_statement) @scope ; covers try+catch, individual try and catch are covered by (block)
(catch_clause) @scope ; needed because `Exception` variable
; loops
(for_statement) @scope
(for_statement ; "for" body in case there are no braces
body: (_) @scope)
(do_statement
body: (_) @scope)
(while_statement
body: (_) @scope)
; Functions
(constructor_declaration) @scope
(method_declaration) @scope
;; definitions
(enum_declaration
name: (identifier) @definition.enum)
(method_declaration
name: (identifier) @definition.method)
(local_variable_declaration
declarator: (variable_declarator
name: (identifier) @definition.var))
(enhanced_for_statement
name: (identifier) @definition.var)
(formal_parameter
name: (identifier) @definition.parameter)
(catch_formal_parameter
name: (identifier) @definition.parameter)
(field_declaration
declarator: (variable_declarator
name: (identifier) @definition.field))
;; REFERENCES
(identifier) @reference
(type_identifier) @reference

150
queries/soql/highlights.scm Normal file
View file

@ -0,0 +1,150 @@
(field_identifier
(identifier) @property)
(field_identifier
(dotted_identifier
(identifier) @property))
(type_of_clause
(identifier) @property)
(when_expression
(identifier) @type)
(when_expression
(field_list
(identifier) @property))
(when_expression
(field_list
(dotted_identifier
(identifier) @property )))
(else_expression
(field_list
(identifier) @property ))
(else_expression
(field_list
(dotted_identifier
(identifier) @property )))
(alias_expression
(identifier) @label)
(storage_identifier) @storageclass
(function_name) @function
(date_literal) @string.special
[
","
"."
":"
"?"
"("
")"
] @punctuation.delimiter
[
"AND"
"OR"
"NOT"
"LIKE"
"NOT_IN"
"INCLUDES"
"EXCLUDES"
] @keyword.operator
[
"="
"!="
"<="
">="
] @operator
(value_comparison_operator [ "<" ">" ] @operator)
(set_comparison_operator "IN" @keyword.operator)
[
(int)
(decimal)
(currency_literal)
] @number
(string_literal) @string
(date) @variable.readonly
(date_time) @variable.readonly
[
"TRUE"
"FALSE"
] @boolean
(null_literal) @constant.builtin
[
"ABOVE"
"ABOVE_OR_BELOW"
"ALL_ROWS"
"ALL"
"AS"
"ASC"
"AT"
"BELOW"
"CUSTOM"
"DATA_CATEGORY"
"DESC"
"END"
"FIELDS"
"FOR"
"FROM"
"GROUP_BY"
"HAVING"
"LIMIT"
"NULLS_FIRST"
"NULLS_LAST"
"OFFSET"
"ORDER_BY"
"REFERENCE"
"SELECT"
"STANDARD"
"TRACKING"
"TYPEOF"
"UPDATE"
"USING_SCOPE"
"VIEW"
"VIEWSTAT"
"WITH"
] @keyword
[
"WHERE"
"WHEN"
"ELSE"
"THEN"
] @conditional
; Using Scope
[
"delegated"
"everything"
"mine"
"mine_and_my_groups"
"my_territory"
"my_team_territory"
"team"
] @keyword
; With
[
"maxDescriptorPerRecord"
"RecordVisibilityContext"
"Security_Enforced"
"supportsDomains"
"supportsDelegates"
"System_Mode"
"User_Mode"
"UserId"
] @keyword

View file

@ -0,0 +1,28 @@
(find_clause
(term) @string )
(sobject_return
(identifier) @type )
(with_type (_ "=" @operator))
[
"ALL"
"DIVISION"
"EMAIL"
"FIND"
"ListView"
"HIGHLIGHT"
"IN"
"METADATA"
"NAME"
"NETWORK"
"PHONE"
"PricebookId"
"RETURNING"
"SIDEBAR"
"SNIPPET"
"SPELL_CORRECTION"
"target_length"
"USING"
] @keyword