aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlib Shpychka <23005347+gshpychka@users.noreply.github.com>2023-06-29 13:34:46 +0300
committerGitHub <noreply@github.com>2023-06-29 10:34:46 +0000
commitf460cc8ee7cb0e7ff1512b238d07029afca3d958 (patch)
treec976326a42e3099ac0e3624c166cc3e845367758
parentUpdate parsers: gitcommit, html, kotlin (diff)
downloadnvim-treesitter-f460cc8ee7cb0e7ff1512b238d07029afca3d958.tar
nvim-treesitter-f460cc8ee7cb0e7ff1512b238d07029afca3d958.tar.gz
nvim-treesitter-f460cc8ee7cb0e7ff1512b238d07029afca3d958.tar.bz2
nvim-treesitter-f460cc8ee7cb0e7ff1512b238d07029afca3d958.tar.lz
nvim-treesitter-f460cc8ee7cb0e7ff1512b238d07029afca3d958.tar.xz
nvim-treesitter-f460cc8ee7cb0e7ff1512b238d07029afca3d958.tar.zst
nvim-treesitter-f460cc8ee7cb0e7ff1512b238d07029afca3d958.zip
feat(wing): add parser (#5021)
Co-authored-by: Christian Clason <c.clason@uni-graz.at> Co-authored-by: ObserverOfTime <chronobserver@disroot.org>
-rw-r--r--lockfile.json3
-rw-r--r--lua/nvim-treesitter/parsers.lua11
-rw-r--r--queries/wing/folds.scm18
-rw-r--r--queries/wing/highlights.scm86
-rw-r--r--queries/wing/locals.scm5
-rw-r--r--scripts/minimal_init.lua1
-rw-r--r--tests/query/highlights/wing/class.w19
-rw-r--r--tests/query/highlights/wing/nested_method.w4
8 files changed, 147 insertions, 0 deletions
diff --git a/lockfile.json b/lockfile.json
index fa2774929..3cc6f3ae1 100644
--- a/lockfile.json
+++ b/lockfile.json
@@ -566,6 +566,9 @@
"wgsl_bevy": {
"revision": "7cd38d6895060b023353e04f7af099ec64add5d1"
},
+ "wing": {
+ "revision": "bb54f98e55db82d67711abadefdbd3b933c9efc3"
+ },
"yaml": {
"revision": "0e36bed171768908f331ff7dff9d956bae016efb"
},
diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua
index ac8695f55..d5144c39c 100644
--- a/lua/nvim-treesitter/parsers.lua
+++ b/lua/nvim-treesitter/parsers.lua
@@ -1668,6 +1668,17 @@ list.wgsl_bevy = {
maintainers = { "@theHamsta" },
}
+list.wing = {
+ install_info = {
+ url = "https://github.com/winglang/wing",
+ files = { "src/parser.c", "src/scanner.c" },
+ location = "libs/tree-sitter-wing",
+ requires_generate_from_grammar = true,
+ },
+ maintainers = { "@gshpychka" },
+ experimental = true,
+}
+
list.yaml = {
install_info = {
url = "https://github.com/ikatyang/tree-sitter-yaml",
diff --git a/queries/wing/folds.scm b/queries/wing/folds.scm
new file mode 100644
index 000000000..17fc7b95f
--- /dev/null
+++ b/queries/wing/folds.scm
@@ -0,0 +1,18 @@
+[
+ (class_definition)
+ (class_implementation)
+ (resource_definition)
+ (resource_implementation)
+ (interface_definition)
+ (interface_implementation)
+ (for_in_loop)
+ (while_statement)
+ (if_statement)
+ (if_let_statement)
+ (elif_block)
+ (struct_definition)
+ (enum_definition)
+ (try_catch_statement)
+ (method_definition)
+ (inflight_method_definition)
+] @fold
diff --git a/queries/wing/highlights.scm b/queries/wing/highlights.scm
new file mode 100644
index 000000000..7fdf3a8f3
--- /dev/null
+++ b/queries/wing/highlights.scm
@@ -0,0 +1,86 @@
+(identifier) @variable
+(reference_identifier) @variable
+(member_identifier) @property
+
+; Classes
+
+(custom_type) @type
+(class_field
+ name: (identifier) @field)
+(class_definition
+ name: (identifier) @type)
+(method_definition
+ name: (identifier) @method)
+(inflight_method_definition
+ name: (identifier) @method)
+
+; Functions
+
+(keyword_argument_key) @parameter
+(call
+ caller: (reference
+ (nested_identifier
+ property: (member_identifier) @method.call)))
+(call
+ caller: (reference
+ (reference_identifier) @method.call))
+
+; Primitives
+
+(number) @number
+(duration) @constant
+(string) @string
+(bool) @boolean
+(builtin_type) @type.builtin
+(json_container_type) @type.builtin
+
+; Special
+
+(comment) @comment
+
+[
+ "("
+ ")"
+ "{"
+ "}"
+] @punctuation.bracket
+
+[
+ "-"
+ "+"
+ "*"
+ "/"
+ "%"
+ "<"
+ "<="
+ "="
+ "=="
+ "!"
+ "!="
+ ">"
+ ">="
+ "&&"
+ "??"
+ "||"
+] @operator
+
+[
+ ";"
+ "."
+ ","
+] @punctuation.delimiter
+
+[
+ "as"
+ "bring"
+ "class"
+ "else"
+ "for"
+ "if"
+ "in"
+ "init"
+ "let"
+ "new"
+ "return"
+ (inflight_specifier)
+] @keyword
diff --git a/queries/wing/locals.scm b/queries/wing/locals.scm
new file mode 100644
index 000000000..a467939bd
--- /dev/null
+++ b/queries/wing/locals.scm
@@ -0,0 +1,5 @@
+(block) @scope
+(variable_definition_statement
+ name: (identifier) @definition)
+
+; TODO: Missing "@local.reference" usage tuned for each relevant identifier location
diff --git a/scripts/minimal_init.lua b/scripts/minimal_init.lua
index f3aeef7b9..e650a0dd8 100644
--- a/scripts/minimal_init.lua
+++ b/scripts/minimal_init.lua
@@ -11,6 +11,7 @@ vim.filetype.add {
usd = "usd",
usda = "usd",
wgsl = "wgsl",
+ w = "wing",
},
}
diff --git a/tests/query/highlights/wing/class.w b/tests/query/highlights/wing/class.w
new file mode 100644
index 000000000..636cbc601
--- /dev/null
+++ b/tests/query/highlights/wing/class.w
@@ -0,0 +1,19 @@
+bring cloud;
+// <- keyword
+
+class Foo {
+// <- keyword
+// ^ variable
+// ^ punctuation.bracket
+ name: str;
+//^ field
+// ^ type.builtin
+// ^ punctuation.delimiter
+ init(name: str) {
+//^ keyword
+// ^ variable
+ this.name = name;
+// ^ punctuation.delimiter
+// ^ operator
+ }
+}
diff --git a/tests/query/highlights/wing/nested_method.w b/tests/query/highlights/wing/nested_method.w
new file mode 100644
index 000000000..04fd1a37d
--- /dev/null
+++ b/tests/query/highlights/wing/nested_method.w
@@ -0,0 +1,4 @@
+test1.test2.test3();
+// <- variable
+// ^ property
+// ^ method.call