diff options
| author | NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> | 2024-08-31 13:15:40 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-31 19:15:40 +0200 |
| commit | 628f53e4cb61aec510a1458848771cab6152c12b (patch) | |
| tree | c55dc2ecd54c32ae1f0fab3198d5db62127e0f5d | |
| parent | fix(ini): highlight setting value as `@string` (#7104) (diff) | |
| download | nvim-treesitter-628f53e4cb61aec510a1458848771cab6152c12b.tar nvim-treesitter-628f53e4cb61aec510a1458848771cab6152c12b.tar.gz nvim-treesitter-628f53e4cb61aec510a1458848771cab6152c12b.tar.bz2 nvim-treesitter-628f53e4cb61aec510a1458848771cab6152c12b.tar.lz nvim-treesitter-628f53e4cb61aec510a1458848771cab6152c12b.tar.xz nvim-treesitter-628f53e4cb61aec510a1458848771cab6152c12b.tar.zst nvim-treesitter-628f53e4cb61aec510a1458848771cab6152c12b.zip | |
feat(glimmer): add glimmer-javascript and glimmer-typescript (#7064)
| -rw-r--r-- | lockfile.json | 6 | ||||
| -rw-r--r-- | lua/nvim-treesitter/parsers.lua | 22 | ||||
| -rw-r--r-- | queries/ecma/highlights.scm | 4 | ||||
| -rw-r--r-- | queries/ecma/injections.scm | 3 | ||||
| -rw-r--r-- | queries/glimmer/injections.scm | 19 | ||||
| -rw-r--r-- | queries/glimmer_javascript/highlights.scm | 61 | ||||
| -rw-r--r-- | queries/glimmer_javascript/indents.scm | 5 | ||||
| -rw-r--r-- | queries/glimmer_javascript/injections.scm | 15 | ||||
| -rw-r--r-- | queries/glimmer_javascript/locals.scm | 1 | ||||
| -rw-r--r-- | queries/glimmer_typescript/highlights.scm | 6 | ||||
| -rw-r--r-- | queries/glimmer_typescript/indents.scm | 3 | ||||
| -rw-r--r-- | queries/glimmer_typescript/injections.scm | 15 |
12 files changed, 152 insertions, 8 deletions
diff --git a/lockfile.json b/lockfile.json index 4426a4878..e70a1302b 100644 --- a/lockfile.json +++ b/lockfile.json @@ -230,6 +230,12 @@ "glimmer": { "revision": "da605af8c5999b43e6839b575eae5e6cafabb06f" }, + "glimmer_javascript": { + "revision": "a260911201684f80cf815418b3771e6c39309f81" + }, + "glimmer_typescript": { + "revision": "9d018a0f93417e6951264a26093b89ee63df7315" + }, "glsl": { "revision": "ddc3137a2d775aca93084ff997fa13cc1691058a" }, diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua index 419f34db0..b450bd52e 100644 --- a/lua/nvim-treesitter/parsers.lua +++ b/lua/nvim-treesitter/parsers.lua @@ -704,7 +704,7 @@ list.gleam = { list.glimmer = { install_info = { - url = "https://github.com/alexlafroscia/tree-sitter-glimmer", + url = "https://github.com/ember-tooling/tree-sitter-glimmer", files = { "src/parser.c", "src/scanner.c" }, }, filetype = "handlebars", @@ -712,6 +712,26 @@ list.glimmer = { readme_name = "Glimmer and Ember", } +list.glimmer_javascript = { + install_info = { + url = "https://github.com/NullVoxPopuli/tree-sitter-glimmer-javascript", + files = { "src/parser.c", "src/scanner.c" }, + generate_requires_npm = true, + }, + filetype = "javascript.glimmer", + maintainers = { "@NullVoxPopuli" }, +} + +list.glimmer_typescript = { + install_info = { + url = "https://github.com/NullVoxPopuli/tree-sitter-glimmer-typescript", + files = { "src/parser.c", "src/scanner.c" }, + generate_requires_npm = true, + }, + filetype = "typescript.glimmer", + maintainers = { "@NullVoxPopuli" }, +} + list.glsl = { install_info = { url = "https://github.com/theHamsta/tree-sitter-glsl", diff --git a/queries/ecma/highlights.scm b/queries/ecma/highlights.scm index 37913f65b..038df5619 100644 --- a/queries/ecma/highlights.scm +++ b/queries/ecma/highlights.scm @@ -43,10 +43,6 @@ (statement_identifier) @label -(glimmer_opening_tag) @tag.builtin - -(glimmer_closing_tag) @tag.builtin - ; Function and method definitions ;-------------------------------- (function_expression diff --git a/queries/ecma/injections.scm b/queries/ecma/injections.scm index 93cf70674..ef5e14297 100644 --- a/queries/ecma/injections.scm +++ b/queries/ecma/injections.scm @@ -88,9 +88,6 @@ (#set! injection.include-children) (#set! injection.language "glimmer"))) -((glimmer_template) @injection.content - (#set! injection.language "glimmer")) - ; css`<css>`, keyframes`<css>` (call_expression function: [ diff --git a/queries/glimmer/injections.scm b/queries/glimmer/injections.scm index d0400c30e..30b438682 100644 --- a/queries/glimmer/injections.scm +++ b/queries/glimmer/injections.scm @@ -1,2 +1,21 @@ +; comments ((comment_statement) @injection.content (#set! injection.language "comment")) + +; <style> tags +((element_node + (element_node_start + (tag_name) @_tag_name + (#eq? @_tag_name "style"))) @injection.content + (#offset! @injection.content 0 7 0 -8) + (#set! injection.language "css") + (#set! injection.include-children)) + +; <script> tags +((element_node + (element_node_start + (tag_name) @_tag_name + (#eq? @_tag_name "script"))) @injection.content + (#offset! @injection.content 0 8 0 -9) + (#set! injection.language "glimmer_javascript") + (#set! injection.include-children)) diff --git a/queries/glimmer_javascript/highlights.scm b/queries/glimmer_javascript/highlights.scm new file mode 100644 index 000000000..5bec5b149 --- /dev/null +++ b/queries/glimmer_javascript/highlights.scm @@ -0,0 +1,61 @@ +; inherits: ecma + +(glimmer_opening_tag) @tag.builtin + +(glimmer_closing_tag) @tag.builtin + +; Copied from javascript +; Parameters +(formal_parameters + (identifier) @variable.parameter) + +(formal_parameters + (rest_pattern + (identifier) @variable.parameter)) + +; ({ a }) => null +(formal_parameters + (object_pattern + (shorthand_property_identifier_pattern) @variable.parameter)) + +; ({ a = b }) => null +(formal_parameters + (object_pattern + (object_assignment_pattern + (shorthand_property_identifier_pattern) @variable.parameter))) + +; ({ a: b }) => null +(formal_parameters + (object_pattern + (pair_pattern + value: (identifier) @variable.parameter))) + +; ([ a ]) => null +(formal_parameters + (array_pattern + (identifier) @variable.parameter)) + +; ({ a } = { a }) => null +(formal_parameters + (assignment_pattern + (object_pattern + (shorthand_property_identifier_pattern) @variable.parameter))) + +; ({ a = b } = { a }) => null +(formal_parameters + (assignment_pattern + (object_pattern + (object_assignment_pattern + (shorthand_property_identifier_pattern) @variable.parameter)))) + +; a => null +(arrow_function + parameter: (identifier) @variable.parameter) + +; optional parameters +(formal_parameters + (assignment_pattern + left: (identifier) @variable.parameter)) + +; punctuation +(optional_chain) @punctuation.delimiter diff --git a/queries/glimmer_javascript/indents.scm b/queries/glimmer_javascript/indents.scm new file mode 100644 index 000000000..2bf2b7801 --- /dev/null +++ b/queries/glimmer_javascript/indents.scm @@ -0,0 +1,5 @@ +; inherits: ecma + +(glimmer_opening_tag) @indent.begin + +(glimmer_closing_tag) @indent.end diff --git a/queries/glimmer_javascript/injections.scm b/queries/glimmer_javascript/injections.scm new file mode 100644 index 000000000..38cf529b7 --- /dev/null +++ b/queries/glimmer_javascript/injections.scm @@ -0,0 +1,15 @@ +; inherits: ecma + +; Parse Ember/Glimmer/Handlebars/HTMLBars/etc. template literals +; e.g.: await render(hbs`<SomeComponent />`) +(call_expression + function: ((identifier) @_name + (#eq? @_name "hbs")) + arguments: ((template_string) @glimmer + (#offset! @glimmer 0 1 0 -1))) + +; Ember Unified <template> syntax +; e.g.: <template><SomeComponent @arg={{double @value}} /></template> +((glimmer_template) @injection.content + (#set! injection.language "glimmer") + (#set! injection.include-children)) diff --git a/queries/glimmer_javascript/locals.scm b/queries/glimmer_javascript/locals.scm new file mode 100644 index 000000000..04328f099 --- /dev/null +++ b/queries/glimmer_javascript/locals.scm @@ -0,0 +1 @@ +; inherits: ecma diff --git a/queries/glimmer_typescript/highlights.scm b/queries/glimmer_typescript/highlights.scm new file mode 100644 index 000000000..042387b21 --- /dev/null +++ b/queries/glimmer_typescript/highlights.scm @@ -0,0 +1,6 @@ +; inherits: typescript + +; Sub-language delimeters +(glimmer_opening_tag) @tag.builtin + +(glimmer_closing_tag) @tag.builtin diff --git a/queries/glimmer_typescript/indents.scm b/queries/glimmer_typescript/indents.scm new file mode 100644 index 000000000..237254d4c --- /dev/null +++ b/queries/glimmer_typescript/indents.scm @@ -0,0 +1,3 @@ +(glimmer_opening_tag) @indent.begin + +(glimmer_closing_tag) @indent.end diff --git a/queries/glimmer_typescript/injections.scm b/queries/glimmer_typescript/injections.scm new file mode 100644 index 000000000..487d69734 --- /dev/null +++ b/queries/glimmer_typescript/injections.scm @@ -0,0 +1,15 @@ +; inherits: typescript + +; Parse Ember/Glimmer/Handlebars/HTMLBars/etc. template literals +; e.g.: await render(hbs`<SomeComponent />`) +(call_expression + function: ((identifier) @_name + (#eq? @_name "hbs")) + arguments: ((template_string) @glimmer + (#offset! @glimmer 0 1 0 -1))) + +; Ember Unified <template> syntax +; e.g.: <template><SomeComponent @arg={{double @value}} /></template> +((glimmer_template) @injection.content + (#set! injection.language "glimmer") + (#set! injection.include-children)) |
