aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lockfile.json6
-rw-r--r--lua/nvim-treesitter/parsers.lua22
-rw-r--r--queries/ecma/highlights.scm4
-rw-r--r--queries/ecma/injections.scm3
-rw-r--r--queries/glimmer/injections.scm19
-rw-r--r--queries/glimmer_javascript/highlights.scm61
-rw-r--r--queries/glimmer_javascript/indents.scm5
-rw-r--r--queries/glimmer_javascript/injections.scm15
-rw-r--r--queries/glimmer_javascript/locals.scm1
-rw-r--r--queries/glimmer_typescript/highlights.scm6
-rw-r--r--queries/glimmer_typescript/indents.scm3
-rw-r--r--queries/glimmer_typescript/injections.scm15
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))