diff --git a/README.md b/README.md index 9447e0f65..2cb5f033b 100644 --- a/README.md +++ b/README.md @@ -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) diff --git a/lockfile.json b/lockfile.json index 17d4a9628..cd716c723 100644 --- a/lockfile.json +++ b/lockfile.json @@ -53,6 +53,9 @@ "bp": { "revision": "16c43068ec30828c5aed11e87262c56f36782595" }, + "brightscript": { + "revision": "a5a68f3e4215c866659df7939fc4a6617d04341b" + }, "c": { "revision": "2a265d69a4caf57108a73ad2ed1e6922dd2f998c" }, diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua index edbc003d5..31b691209 100644 --- a/lua/nvim-treesitter/parsers.lua +++ b/lua/nvim-treesitter/parsers.lua @@ -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", diff --git a/queries/brightscript/folds.scm b/queries/brightscript/folds.scm new file mode 100644 index 000000000..09c655dfb --- /dev/null +++ b/queries/brightscript/folds.scm @@ -0,0 +1,9 @@ +[ + (function_statement) + (sub_statement) + (while_statement) + (for_statement) + (if_statement) + (try_statement) +] @fold + diff --git a/queries/brightscript/highlights.scm b/queries/brightscript/highlights.scm new file mode 100644 index 000000000..d9595af5f --- /dev/null +++ b/queries/brightscript/highlights.scm @@ -0,0 +1,144 @@ +; Identifiers +(identifier) @variable + +; Function and sub declarations +(function_statement + name: (identifier) @function) +(sub_statement + name: (identifier) @function) + +; Function calls +(function_call + function: (prefix_exp + (identifier) @function.call)) + +; Parameters +(parameter + name: (identifier) @variable.parameter) + +; Types +(type_specifier) @type + +; Variables +(variable_declarator) @variable + +(multiplicative_expression + operator: (_) @keyword.operator) + +(logical_not_expression + operator: (_) @keyword.operator) + +(logical_expression + operator: (_) @keyword.operator) + +; Property access +(prefix_exp + (prefix_exp + (identifier) @variable) + (identifier) @property) + +; Statements +(if_statement) @conditional +(conditional_compl) @conditional +(for_statement) @repeat +(while_statement) @repeat +(try_statement) @exception +(return_statement) @keyword.return +(throw_statement) @keyword.throw +(assignment_statement) @operator +(print_statement) @function.builtin +(constant) @constant + +; Keywords +[ + (function_start) + (sub_start) + (if_start) + (if_then) + (if_else) + (for_start) + (for_to) + (for_step) + (for_each) + (for_in) + (while_start) + (try_start) + (try_catch) + (as) +] @keyword + +; Operators +[ + "=" + "<>" + "<" + "<=" + ">" + ">=" + "+" + "-" + "*" + "/" +] @operator + +; Literals +(boolean) @boolean +(number) @number +(string) @string +(invalid) @constant.builtin + +; Comments +(comment) @comment + +; Punctuation +["(" ")" "[" "]" "{" "}" "." "," "?." "?["] @punctuation.delimiter + +; Special highlights for library statements +(library_statement) @include +(library_statement + path: (string) @string.special) + +; 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) + +; End statements +[ + (end_sub) + (end_function) + (end_if) + (end_for) + (end_while) + (end_try) + (conditional_compl_end_if) +] @keyword + +; Special keywords (these might still need to be strings if not defined as separate nodes) +["then" "else" "else if" "#else" "#else if"] @keyword + +; Exit statements +[ + (exit_while_statement) + (exit_for_statement) +] @keyword diff --git a/queries/brightscript/indents.scm b/queries/brightscript/indents.scm new file mode 100644 index 000000000..e54bf52c1 --- /dev/null +++ b/queries/brightscript/indents.scm @@ -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 diff --git a/queries/brightscript/injections.scm b/queries/brightscript/injections.scm new file mode 100644 index 000000000..050826330 --- /dev/null +++ b/queries/brightscript/injections.scm @@ -0,0 +1,4 @@ +([ + (comment) +] @injection.content + (#set! injection.language "comment"))