aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPham Huy Hoang <hoangtun0810@gmail.com>2023-03-03 09:09:52 +0700
committerObserverOfTime <chronobserver@disroot.org>2023-03-05 22:34:41 +0200
commitd11dd552dbde181cd49652188521f4b5f6cad2f8 (patch)
treee523d048cbf9bfa2a614e318ac0183f4830f04b4
parentUpdate parsers: zig (diff)
downloadnvim-treesitter-d11dd552dbde181cd49652188521f4b5f6cad2f8.tar
nvim-treesitter-d11dd552dbde181cd49652188521f4b5f6cad2f8.tar.gz
nvim-treesitter-d11dd552dbde181cd49652188521f4b5f6cad2f8.tar.bz2
nvim-treesitter-d11dd552dbde181cd49652188521f4b5f6cad2f8.tar.lz
nvim-treesitter-d11dd552dbde181cd49652188521f4b5f6cad2f8.tar.xz
nvim-treesitter-d11dd552dbde181cd49652188521f4b5f6cad2f8.tar.zst
nvim-treesitter-d11dd552dbde181cd49652188521f4b5f6cad2f8.zip
injections(html): fix faulty css/js injections
Group queries to reduce duplicate injection tree use only regex
-rw-r--r--queries/html_tags/injections.scm34
-rw-r--r--tests/query/injections/html/test-html-injections.html4
-rw-r--r--tests/query/injections/vue/test-vue-injections.vue6
3 files changed, 17 insertions, 27 deletions
diff --git a/queries/html_tags/injections.scm b/queries/html_tags/injections.scm
index c29619281..5f0719c64 100644
--- a/queries/html_tags/injections.scm
+++ b/queries/html_tags/injections.scm
@@ -1,22 +1,12 @@
; <style>...</style>
-(
- (style_element
- (start_tag
- (tag_name) .)
- (raw_text) @css)
-)
-
; <style blocking> ...</style>
; Add "lang" to predicate check so that vue/svelte can inherit this
; without having this element being captured twice
(
(style_element
- (start_tag
- (attribute
- (attribute_name) @_no_set_type))
- (raw_text) @css)
- (#not-any-of? @_no_set_type "type" "lang")
-)
+ (start_tag) @_no_type_lang
+ (#not-match? @_no_type_lang "\\s(lang|type)\\s*\\=")
+ (raw_text) @css))
(
(style_element
@@ -30,22 +20,12 @@
)
; <script>...</script>
-(
- (script_element
- (start_tag
- (tag_name) .)
- (raw_text) @javascript)
-)
-
; <script defer>...</script>
(
(script_element
- (start_tag
- (attribute
- (attribute_name) @_no_set_type))
- (raw_text) @javascript)
- (#not-any-of? @_no_set_type "type" "lang")
-)
+ (start_tag) @_no_type_lang
+ (#not-match? @_no_type_lang "\\s(lang|type)\\s*\\=")
+ (raw_text) @javascript))
(
(script_element
@@ -55,7 +35,7 @@
(quoted_attribute_value (attribute_value) @_javascript)))
(raw_text) @javascript)
(#eq? @_type "type")
- (#eq? @_javascript "text/javascript")
+ (#any-of? @_javascript "text/javascript" "module")
)
((attribute
diff --git a/tests/query/injections/html/test-html-injections.html b/tests/query/injections/html/test-html-injections.html
index 4449923c6..348d901ca 100644
--- a/tests/query/injections/html/test-html-injections.html
+++ b/tests/query/injections/html/test-html-injections.html
@@ -19,6 +19,10 @@
<!-- ^ javascript -->
<script type="text/javascript"> const x = 1 </script>
<!-- ^ javascript -->
+ <script type="module"> import { foo } from "bar" </script>
+ <!-- ^ javascript -->
+ <script defer type="text/javascript"> const x = 1 </script>
+ <!-- ^ javascript -->
<div style="height: 100%">
<!-- ^ css -->
Test div to test css injections for style attributes
diff --git a/tests/query/injections/vue/test-vue-injections.vue b/tests/query/injections/vue/test-vue-injections.vue
index 4cb4ae215..b0df16071 100644
--- a/tests/query/injections/vue/test-vue-injections.vue
+++ b/tests/query/injections/vue/test-vue-injections.vue
@@ -17,6 +17,9 @@
<script lang="ts"> const foo: number = "1" </script>
<!-- ^ typescript -->
<!-- ^ !javascript -->
+<script lang="ts" defer>const foo: number = 1 </script>
+<!-- ^ typescript -->
+<!-- ^ !javascript -->
<style> .bar { .foo{ } } </style>
<!-- ^ css -->
<style scoped> .page.page--news { background: rebeccapurple; } </style>
@@ -26,3 +29,6 @@
<style lang="scss"> .bar { &-baz { } } </style>
<!-- ^ scss -->
<!-- ^ !css -->
+<style scoped lang="scss">body{} </style>
+<!-- ^ scss -->
+<!-- ^ !css -->