diff options
| author | Benny Powers <web@bennypowers.com> | 2023-03-17 11:31:11 +0200 |
|---|---|---|
| committer | Amaan Qureshi <amaanq12@gmail.com> | 2023-03-22 02:28:21 -0400 |
| commit | 19d9af8fb0e8465a93d63c6aee23371dad9ce399 (patch) | |
| tree | d5b7e1b7bf313d6177fb5efbf723d5ddbe88e2a0 | |
| parent | test: ecma injections (diff) | |
| download | nvim-treesitter-19d9af8fb0e8465a93d63c6aee23371dad9ce399.tar nvim-treesitter-19d9af8fb0e8465a93d63c6aee23371dad9ce399.tar.gz nvim-treesitter-19d9af8fb0e8465a93d63c6aee23371dad9ce399.tar.bz2 nvim-treesitter-19d9af8fb0e8465a93d63c6aee23371dad9ce399.tar.lz nvim-treesitter-19d9af8fb0e8465a93d63c6aee23371dad9ce399.tar.xz nvim-treesitter-19d9af8fb0e8465a93d63c6aee23371dad9ce399.tar.zst nvim-treesitter-19d9af8fb0e8465a93d63c6aee23371dad9ce399.zip | |
feat(html): injections in <script type>
refactor(html): remove superfluous injection query
fix(html): associate "module" type with "javascript"
| -rw-r--r-- | lua/nvim-treesitter/query_predicates.lua | 23 | ||||
| -rw-r--r-- | queries/html_tags/injections.scm | 20 |
2 files changed, 33 insertions, 10 deletions
diff --git a/lua/nvim-treesitter/query_predicates.lua b/lua/nvim-treesitter/query_predicates.lua index 2509a677c..8c0a4c947 100644 --- a/lua/nvim-treesitter/query_predicates.lua +++ b/lua/nvim-treesitter/query_predicates.lua @@ -119,6 +119,29 @@ query.add_predicate("has-type?", function(match, _pattern, _bufnr, pred) return vim.tbl_contains(types, node:type()) end) +local html_script_type_languages = { + ["importmap"] = "json", + ["module"] = "javascript", + ["application/ecmascript"] = "javascript", + ["text/ecmascript"] = "javascript", +} + +---@param match string +---@param metadata table +---@return boolean|nil +query.add_directive("set-lang-from-mimetype!", function(match, pattern, bufnr, predicate, metadata) + local capture_id = predicate[2] + local node = match[capture_id] + local type_attr_value = vim.treesitter.get_node_text(node, bufnr) + local configured = html_script_type_languages[type_attr_value] + if configured then + metadata.language = configured + else + local parts = vim.split(type_attr_value, "/", {}) + metadata.language = parts[#parts] + end +end) + -- Just avoid some annoying warnings for this directive query.add_directive("make-range!", function() end) diff --git a/queries/html_tags/injections.scm b/queries/html_tags/injections.scm index 23b500590..dd971b7d9 100644 --- a/queries/html_tags/injections.scm +++ b/queries/html_tags/injections.scm @@ -27,23 +27,23 @@ (#not-match? @_no_type_lang "\\s(lang|type)\\s*\\=") (raw_text) @javascript)) -( - (script_element - (start_tag - (attribute - (attribute_name) @_type - (quoted_attribute_value (attribute_value) @_javascript))) - (raw_text) @javascript) - (#eq? @_type "type") - (#any-of? @_javascript "text/javascript" "module") -) +; <script type="mimetype-or-well-known-script-type"> +(script_element + (start_tag + ((attribute + (attribute_name) @_attr (#eq? @_attr "type") + (quoted_attribute_value (attribute_value) @_type)))) + (raw_text) @content (#set-lang-from-mimetype! @_type)) +; <a style="/* css */"> ((attribute (attribute_name) @_attr (quoted_attribute_value (attribute_value) @css)) (#eq? @_attr "style")) ; lit-html style template interpolation +; <a @click=${e => console.log(e)}> +; <a @click="${e => console.log(e)}"> ((attribute (quoted_attribute_value (attribute_value) @javascript)) (#match? @javascript "\\$\\{") |
