feat(brightscript): brightscript parser and queries (#7780)

This commit is contained in:
AJ Delcimmuto
2025-04-13 15:20:09 -05:00
committed by GitHub
parent 0e21ee8df6
commit 7bbed4b548
7 changed files with 238 additions and 0 deletions

View File

@@ -191,6 +191,7 @@ We are looking for maintainers to add more parsers and to write query files for
- [x] [blade](https://github.com/EmranMR/tree-sitter-blade) (maintained by @calebdw)
- [x] [blueprint](https://gitlab.com/gabmus/tree-sitter-blueprint.git) (experimental, maintained by @gabmus)
- [x] [bp](https://github.com/ambroisie/tree-sitter-bp) (maintained by @ambroisie)
- [x] [brightscript](https://github.com/ajdelcimmuto/tree-sitter-brightscript) (maintained by @ajdelcimmuto)
- [x] [c](https://github.com/tree-sitter/tree-sitter-c) (maintained by @amaanq)
- [x] [c_sharp](https://github.com/tree-sitter/tree-sitter-c-sharp) (maintained by @amaanq)
- [x] [caddy](https://github.com/opa-oz/tree-sitter-caddy) (maintained by @opa-oz)

View File

@@ -53,6 +53,9 @@
"bp": {
"revision": "16c43068ec30828c5aed11e87262c56f36782595"
},
"brightscript": {
"revision": "48ce1687125c6dfefcc7a1bef19fa0f0f00426cc"
},
"c": {
"revision": "2a265d69a4caf57108a73ad2ed1e6922dd2f998c"
},

View File

@@ -216,6 +216,14 @@ list.bp = {
maintainers = { "@ambroisie" },
}
list.brightscript = {
install_info = {
url = "https://github.com/ajdelcimmuto/tree-sitter-brightscript",
files = { "src/parser.c" },
},
maintainers = { "@ajdelcimmuto" },
}
list.c = {
install_info = {
url = "https://github.com/tree-sitter/tree-sitter-c",

View File

@@ -0,0 +1,8 @@
[
(function_statement)
(sub_statement)
(while_statement)
(for_statement)
(if_statement)
(try_statement)
] @fold

View File

@@ -0,0 +1,177 @@
; Identifiers
(identifier) @variable
; Function declaration
(function_statement
name: (identifier) @function)
; Sub declaration
(sub_statement
name: (identifier) @function)
[
(sub_start)
(function_start)
(end_sub)
(end_function)
] @keyword.function
; Parameters
(parameter
name: (identifier) @variable.parameter)
; Types
(type_specifier) @type
; Variables
; Base variable in variable declarator (immediate child of prefix_exp)
(variable_declarator
(prefix_exp
(identifier) @variable
(#not-has-ancestor? @variable prefix_exp)))
; Properties in variable declarator
(variable_declarator
(prefix_exp)
(identifier) @property)
(multiplicative_expression
operator: (_) @keyword.operator)
(logical_not_expression
operator: (_) @keyword.operator)
(logical_expression
operator: (_) @keyword.operator)
; Property access
; First identifier in a chain (base variable)
(prefix_exp
.
(identifier) @variable
(#not-has-ancestor? @variable prefix_exp))
; All other identifiers in a chain (properties)
(prefix_exp
(prefix_exp)
(identifier) @property)
; Function calls
(function_call
function: (prefix_exp
(identifier) @function.call))
; Statements
[
(if_start)
(else)
(else_if)
(end_if)
(then)
(conditional_compl_end_if)
] @keyword.conditional
[
(for_start)
(while_start)
(for_each)
(for_in)
(for_to)
(for_step)
(end_for)
(end_while)
(exit_while_statement)
(exit_for_statement)
] @keyword.repeat
; Statements
[
(try_start)
(try_catch)
(throw)
(end_try)
] @keyword.exception
(return) @keyword.return
(print) @function.builtin
(constant) @constant
; Operators
[
"="
"<>"
"<"
"<="
">"
">="
"+"
"-"
"*"
"/"
] @operator
; Literals
(boolean) @boolean
(number) @number
(string) @string
(invalid) @constant.builtin
; Comments
(comment) @comment @spell
; Punctuation
[
"("
")"
"["
"]"
"{"
"}"
"?["
] @punctuation.bracket
[
"."
","
"?."
] @punctuation.delimiter
; Special highlights for library statements
(library_statement) @keyword.import
(library_statement
path: (string) @module)
; Array and associative array literals
(array) @constructor
(assoc_array) @constructor
(assoc_array_element
key: (identifier) @property)
; Increment/decrement operators
[
(prefix_increment_expression)
(prefix_decrement_expression)
(postfix_increment_expression)
(postfix_decrement_expression)
] @operator
; Comparison operators
(comparison_expression
[
"="
"<>"
"<"
"<="
">"
">="
] @operator)
(as) @keyword.operator

View File

@@ -0,0 +1,39 @@
; Start indentation for block-level constructs
[
(sub_statement)
(function_statement)
(annonymous_sub)
(annonymous_function)
(conditional_compl)
(multi_line_if)
(for_statement)
(while_statement)
(try_statement)
(array)
(assoc_array)
] @indent.begin
; End indentation for all end statements
[
(end_sub)
(end_function)
(end_if)
(end_for)
(end_while)
(end_try)
(conditional_compl_end_if)
"]"
"}"
] @indent.branch @indent.end
; Handle branching constructs
[
(else_if_clause)
(else_clause)
(conditional_compl_else_if_clause)
(conditional_compl_else_clause)
(catch_clause)
] @indent.branch
; Ignore comments for indentation
(comment) @indent.ignore

View File

@@ -0,0 +1,2 @@
((comment) @injection.content
(#set! injection.language "comment"))