aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md1
-rw-r--r--ftdetect/vala.vim1
-rw-r--r--lua/nvim-treesitter/parsers.lua9
-rw-r--r--queries/vala/highlights.scm387
4 files changed, 398 insertions, 0 deletions
diff --git a/README.md b/README.md
index 260bbb1ea..fb91e555f 100644
--- a/README.md
+++ b/README.md
@@ -249,6 +249,7 @@ We are looking for maintainers to add more parsers and to write query files for
- [x] [typescript](https://github.com/tree-sitter/tree-sitter-typescript) (maintained by @steelsojka)
- [x] [verilog](https://github.com/tree-sitter/tree-sitter-verilog) (experimental, maintained by @zegervdv)
- [x] [vim](https://github.com/vigoux/tree-sitter-viml) (maintained by @vigoux)
+- [x] [vala](https://github.com/matbme/tree-sitter-vala) (maintained by @matbme)
- [x] [vue](https://github.com/ikatyang/tree-sitter-vue) (maintained by @WhyNotHugo)
- [x] [yaml](https://github.com/ikatyang/tree-sitter-yaml) (maintained by @stsewd)
- [x] [yang](https://github.com/Hubro/tree-sitter-yang) (maintained by @Hubro)
diff --git a/ftdetect/vala.vim b/ftdetect/vala.vim
new file mode 100644
index 000000000..c3a28e048
--- /dev/null
+++ b/ftdetect/vala.vim
@@ -0,0 +1 @@
+au BufRead,BufNewFile *.vala set filetype=vala
diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua
index a2d030c27..e5c36ad08 100644
--- a/lua/nvim-treesitter/parsers.lua
+++ b/lua/nvim-treesitter/parsers.lua
@@ -912,6 +912,15 @@ list.norg = {
maintainers = { "@JoeyGrajciar", "@vhyrro", "@mrossinek" },
}
+list.vala = {
+ install_info = {
+ url = "https://github.com/matbme/tree-sitter-vala",
+ branch = "main",
+ files = { "src/parser.c" },
+ },
+ maintainers = { "@matbme" },
+}
+
local M = {
list = list,
}
diff --git a/queries/vala/highlights.scm b/queries/vala/highlights.scm
new file mode 100644
index 000000000..36c059566
--- /dev/null
+++ b/queries/vala/highlights.scm
@@ -0,0 +1,387 @@
+; Pointers
+
+(address_of_identifier
+ "&" @symbol
+ (_)*
+)
+
+(pointer_type
+ (_)*
+ "*" @symbol
+)
+
+(indirection_identifier
+ "*" @symbol
+ (_)*
+)
+
+"delete" @keyword
+
+; Misc
+
+(number) @number
+
+[
+ "{"
+ "}"
+ "("
+ ")"
+] @punctuation.bracket
+
+[
+";"
+"."
+","
+"->"
+] @punctuation.delimiter
+
+; Keywords
+
+"return" @keyword.return
+"yield" @keyword.return
+"break" @keyword.return
+
+; Booleans
+
+(true) @boolean
+(false) @boolean
+
+; Operators
+
+(binary_expression
+ (_)
+ [
+ "*"
+ "/"
+ "+"
+ "-"
+ "%"
+ "<"
+ "<="
+ ">"
+ ">="
+ "=="
+ "!="
+ "+="
+ "-="
+ "*="
+ "/="
+ "%="
+ "&&"
+ "||"
+ "&"
+ "|"
+ "^"
+ "~"
+ "|="
+ "&="
+ "^="
+ "??"
+ ] @operator
+ (_)
+)
+
+(unary_expression
+ (_)?
+ [
+ "-"
+ "!"
+ "--"
+ "++"
+ ] @operator
+ (_)?
+)
+
+(null) @keyword
+
+; Methods
+
+(function_definition
+ (modifier)* @keyword
+ type: (_) @type
+ name: [
+ (identifier) @method
+ (camel_cased_identifier) @type
+ (generic_identifier (_) @type)
+ (namespaced_identifier
+ left: (_)
+ right: (_) @method .
+ )
+ ]
+)
+
+(function_call
+ identifier: [
+ (identifier) @method
+ (camel_cased_identifier) @type
+ (generic_identifier (_) @type)
+ (namespaced_identifier
+ left: (_)
+ right: (_) @method .
+ )
+ ]
+ (parameter_list)
+)
+
+; Modifiers
+
+(modifier) @keyword
+"var" @keyword
+
+; Types
+
+(primitive_type) @type
+
+(nullable_type
+ (_) @type
+ "?" @symbol
+)
+
+"typeof" @keyword
+
+"is" @keyword
+
+(is_type_expression
+ (_)
+ "is" @keyword
+ (_) @type
+)
+
+; Comments
+
+(comment) @comment
+
+; Namespace
+
+(namespace
+ "namespace" @include
+ (camel_cased_identifier) @namespace
+)
+
+"global" @namespace
+
+"using" @include
+
+; declaration
+(declaration
+ (_)*
+ [
+ (camel_cased_identifier) @type
+ (_)
+ ]
+ (_)*
+)
+
+; Classes
+
+(class_declaration
+ (modifier) @keyword
+ "class" @keyword
+ [
+ (camel_cased_identifier) @type
+ (generic_identifier (_) @type )
+ ]
+)
+
+(class_constructor_definition
+ (modifier)* @keyword
+ [
+ (identifier)
+ (namespaced_identifier)
+ (camel_cased_identifier)
+ ] @constructor
+ (_)*
+)
+
+(class_destructor
+ "~" @symbol
+ (_) @constructor
+ (_)*
+)
+
+; Interfaces
+
+(interface_declaration
+ (modifier) @keyword
+ "interface" @keyword
+ [
+ (camel_cased_identifier) @type
+ (generic_identifier (_) @type )
+ ]
+)
+
+; Class properties
+
+(property_parameter) @keyword
+(this) @keyword
+
+; Strings and escape sequences
+
+(string_literal) @string
+(escape_sequence) @string.escape
+
+(string_template
+ "@" @symbol
+) @string
+
+(string_template_variable) @variable
+
+(string_template_expression) @variable
+
+; Assignment and declaration
+
+(new_instance
+ [
+ (
+ "new" @keyword
+ (_)*
+ )
+ (
+ (_)*
+ ".new" @keyword
+ )
+ ]
+)
+
+; Parameters
+
+(instanciation_parameter
+ (modifier) @keyword
+)
+
+; GObject construct
+
+"construct" @constructor
+
+; Conditionals
+
+[
+"if"
+"else"
+"switch"
+"case"
+"default"
+] @conditional
+
+; Try statement
+
+(try_statement
+ "try" @keyword
+ (block)
+ "catch" @keyword
+ exception: (parameter_list (declaration_parameter
+ (_) @exception
+ (_) @variable
+ ))
+ (block)
+)
+
+; Enum
+
+"enum" @keyword
+(enum_declaration
+ (camel_cased_identifier) @type
+ (_)*
+)
+
+; Loop
+
+[
+"for"
+"foreach"
+"in"
+"while"
+"do"
+] @repeat
+
+(foreach_statement
+ (_)*
+ loop_item: (identifier) @variable
+ (_)*
+)
+
+; Generics
+
+(generic_identifier
+ (camel_cased_identifier) @type
+)
+
+; Closure
+
+(closure
+ "("
+ (identifier)* @variable
+ ")"
+ (_)*
+)
+
+; Casting
+
+(static_cast
+ (_) @type
+)
+
+(dynamic_cast
+ (_)
+ "as" @keyword
+ (_) @type
+)
+
+; Throw error
+
+"throws" @keyword
+"throw" @exception
+
+; Ownership
+
+(ownership_transfer
+ "owned" @keyword
+ (_)
+)
+
+; Regex
+
+(regex_literal) @string.regex
+
+; Contract programming
+
+"requires" @keyword
+"ensures" @keyword
+
+; Code attribute
+
+(code_attribute
+ "[" @attribute
+ name: (camel_cased_identifier) @attribute
+ (
+ "(" @attribute
+ (_)+
+ ")" @attribute
+ )?
+ "]" @attribute
+)
+
+; Constant
+(uppercased_identifier) @constant
+
+; Other
+
+(namespaced_identifier
+ left: [
+ (camel_cased_identifier) @namespace
+ (identifier) @variable
+ ]
+ (
+ "."
+ right: [
+ (identifier) @parameter
+ (camel_cased_identifier) @type
+ (uppercased_identifier) @constant
+ ]
+ )+
+)
+
+; Variable
+
+(identifier) @variable
+(camel_cased_identifier) @variable