diff options
| author | Pham Huy Hoang <hoangtun0810@gmail.com> | 2023-03-03 09:09:52 +0700 |
|---|---|---|
| committer | ObserverOfTime <chronobserver@disroot.org> | 2023-03-05 22:34:41 +0200 |
| commit | d11dd552dbde181cd49652188521f4b5f6cad2f8 (patch) | |
| tree | e523d048cbf9bfa2a614e318ac0183f4830f04b4 | |
| parent | Update parsers: zig (diff) | |
| download | nvim-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.scm | 34 | ||||
| -rw-r--r-- | tests/query/injections/html/test-html-injections.html | 4 | ||||
| -rw-r--r-- | tests/query/injections/vue/test-vue-injections.vue | 6 |
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 --> |
