diff options
| author | Glib Shpychka <23005347+gshpychka@users.noreply.github.com> | 2023-06-29 13:34:46 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-06-29 10:34:46 +0000 |
| commit | f460cc8ee7cb0e7ff1512b238d07029afca3d958 (patch) | |
| tree | c976326a42e3099ac0e3624c166cc3e845367758 | |
| parent | Update parsers: gitcommit, html, kotlin (diff) | |
| download | nvim-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.json | 3 | ||||
| -rw-r--r-- | lua/nvim-treesitter/parsers.lua | 11 | ||||
| -rw-r--r-- | queries/wing/folds.scm | 18 | ||||
| -rw-r--r-- | queries/wing/highlights.scm | 86 | ||||
| -rw-r--r-- | queries/wing/locals.scm | 5 | ||||
| -rw-r--r-- | scripts/minimal_init.lua | 1 | ||||
| -rw-r--r-- | tests/query/highlights/wing/class.w | 19 | ||||
| -rw-r--r-- | tests/query/highlights/wing/nested_method.w | 4 |
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 |
