diff --git a/runtime/queries/ecma/injections.scm b/runtime/queries/ecma/injections.scm index 69afb6d41..d3b3a9340 100644 --- a/runtime/queries/ecma/injections.scm +++ b/runtime/queries/ecma/injections.scm @@ -5,48 +5,78 @@ ((comment) @injection.content (#set! injection.language "comment")) -; html(`...`), html`...`, sql(`...`), etc. +; html(`...`), sql(`...`), etc. (call_expression function: (identifier) @injection.language - arguments: [ - (arguments - (template_string) @injection.content) - (template_string) @injection.content - ] + arguments: (arguments + (template_string + [ + (string_fragment) @injection.content + (template_substitution) + ]+)) (#lua-match? @injection.language "^[a-zA-Z][a-zA-Z0-9]*$") - (#offset! @injection.content 0 1 0 -1) - (#set! injection.include-children) ; Languages excluded from auto-injection due to special rules ; - svg uses the html parser ; - css uses the styled parser (#not-any-of? @injection.language "svg" "css")) -; svg`...` or svg(`...`) +; html`...`, sql`...`, etc. +(call_expression + function: (identifier) @injection.language + arguments: (template_string + [ + (string_fragment) @injection.content + (template_substitution) + ]+) + (#lua-match? @injection.language "^[a-zA-Z][a-zA-Z0-9]*$") + (#not-any-of? @injection.language "svg" "css")) + +; svg(`...`) (call_expression function: (identifier) @_name (#eq? @_name "svg") - arguments: [ - (arguments - (template_string) @injection.content) - (template_string) @injection.content - ] - (#offset! @injection.content 0 1 0 -1) - (#set! injection.include-children) + arguments: (arguments + (template_string + [ + (string_fragment) @injection.content + (template_substitution) + ]+)) + (#set! injection.language "html")) + +; svg`...` +(call_expression + function: (identifier) @_name + (#eq? @_name "svg") + arguments: (template_string + [ + (string_fragment) @injection.content + (template_substitution) + ]+) (#set! injection.language "html")) ; Vercel PostgreSQL -; foo.sql`...` or foo.sql(`...`) +; foo.sql(`...`) (call_expression function: (member_expression property: (property_identifier) @injection.language) - arguments: [ - (arguments - (template_string) @injection.content) - (template_string) @injection.content - ] - (#eq? @injection.language "sql") - (#offset! @injection.content 0 1 0 -1) - (#set! injection.include-children)) + arguments: (arguments + (template_string + [ + (string_fragment) @injection.content + (template_substitution) + ]+)) + (#eq? @injection.language "sql")) + +; foo.sql`...` +(call_expression + function: (member_expression + property: (property_identifier) @injection.language) + arguments: (template_string + [ + (string_fragment) @injection.content + (template_substitution) + ]+) + (#eq? @injection.language "sql")) ; Sanity CMS GROQ query ; defineQuery(`...`) @@ -54,39 +84,55 @@ function: (identifier) @_name (#eq? @_name "defineQuery") arguments: (arguments - (template_string) @injection.content) - (#offset! @injection.content 0 1 0 -1) - (#set! injection.include-children) + (template_string + [ + (string_fragment) @injection.content + (template_substitution) + ]+)) (#set! injection.language "groq")) -; gql`...` or gql(`...`) +; gql(`...`) (call_expression function: (identifier) @_name (#eq? @_name "gql") - arguments: [ - (arguments - (template_string) @injection.content) - (template_string) @injection.content - ] - (#offset! @injection.content 0 1 0 -1) - (#set! injection.include-children) + arguments: (arguments + (template_string + [ + (string_fragment) @injection.content + (template_substitution) + ]+)) + (#set! injection.language "graphql")) + +; gql`...` +(call_expression + function: (identifier) @_name + (#eq? @_name "gql") + arguments: (template_string + [ + (string_fragment) @injection.content + (template_substitution) + ]+) (#set! injection.language "graphql")) (call_expression function: (identifier) @_name (#eq? @_name "hbs") - arguments: (template_string) @injection.content - (#offset! @injection.content 0 1 0 -1) - (#set! injection.include-children) + arguments: (template_string + [ + (string_fragment) @injection.content + (template_substitution) + ]+) (#set! injection.language "glimmer")) ; css``, keyframes`` (call_expression function: (identifier) @_name (#any-of? @_name "css" "keyframes") - arguments: (template_string) @injection.content - (#offset! @injection.content 0 1 0 -1) - (#set! injection.include-children) + arguments: (template_string + [ + (string_fragment) @injection.content + (template_substitution) + ]+) (#set! injection.language "styled")) ; styled.div`` @@ -94,9 +140,11 @@ function: (member_expression object: (identifier) @_name (#eq? @_name "styled")) - arguments: ((template_string) @injection.content - (#offset! @injection.content 0 1 0 -1) - (#set! injection.include-children) + arguments: ((template_string + [ + (string_fragment) @injection.content + (template_substitution) + ]+) (#set! injection.language "styled"))) ; styled(Component)`` @@ -104,9 +152,11 @@ function: (call_expression function: (identifier) @_name (#eq? @_name "styled")) - arguments: ((template_string) @injection.content - (#offset! @injection.content 0 1 0 -1) - (#set! injection.include-children) + arguments: ((template_string + [ + (string_fragment) @injection.content + (template_substitution) + ]+) (#set! injection.language "styled"))) ; styled.div.attrs({ prop: "foo" })`` @@ -116,9 +166,11 @@ object: (member_expression object: (identifier) @_name (#eq? @_name "styled")))) - arguments: ((template_string) @injection.content - (#offset! @injection.content 0 1 0 -1) - (#set! injection.include-children) + arguments: ((template_string + [ + (string_fragment) @injection.content + (template_substitution) + ]+) (#set! injection.language "styled"))) ; styled(Component).attrs({ prop: "foo" })`` @@ -128,9 +180,11 @@ object: (call_expression function: (identifier) @_name (#eq? @_name "styled")))) - arguments: ((template_string) @injection.content - (#offset! @injection.content 0 1 0 -1) - (#set! injection.include-children) + arguments: ((template_string + [ + (string_fragment) @injection.content + (template_substitution) + ]+) (#set! injection.language "styled"))) ((regex_pattern) @injection.content @@ -140,10 +194,10 @@ ; (#eq? @_gql_comment "/* GraphQL */") ; (template_string) @injection.content ; (#set! injection.language "graphql")) -((template_string) @injection.content - (#lua-match? @injection.content "^`#graphql") - (#offset! @injection.content 0 1 0 -1) - (#set! injection.include-children) +((template_string + (string_fragment) @injection.content) + (#lua-match? @injection.content "^#graphql") + (#set! injection.combined) (#set! injection.language "graphql")) ; el.innerHTML = `` @@ -151,9 +205,11 @@ left: (member_expression property: (property_identifier) @_prop (#any-of? @_prop "outerHTML" "innerHTML")) - right: (template_string) @injection.content - (#offset! @injection.content 0 1 0 -1) - (#set! injection.include-children) + right: (template_string + [ + (string_fragment) @injection.content + (template_substitution) + ]+) (#set! injection.language "html")) ; el.innerHTML = '' @@ -178,9 +234,11 @@ (pair key: ((property_identifier) @_prop (#eq? @_prop "template")) - value: ((template_string) @injection.content - (#offset! @injection.content 0 1 0 -1) - (#set! injection.include-children) + value: ((template_string + [ + (string_fragment) @injection.content + (template_substitution) + ]+) (#set! injection.language "angular"))))))) ; @Component({ @@ -196,9 +254,11 @@ key: ((property_identifier) @_prop (#eq? @_prop "styles")) value: (array - ((template_string) @injection.content - (#offset! @injection.content 0 1 0 -1) - (#set! injection.include-children) + ((template_string + [ + (string_fragment) @injection.content + (template_substitution) + ]+) (#set! injection.language "css")))))))) ; @Component({ @@ -213,7 +273,9 @@ (pair key: ((property_identifier) @_prop (#eq? @_prop "styles")) - value: ((template_string) @injection.content - (#set! injection.include-children) - (#offset! @injection.content 0 1 0 -1) + value: ((template_string + [ + (string_fragment) @injection.content + (template_substitution) + ]+) (#set! injection.language "css"))))))) diff --git a/runtime/queries/html_tags/injections.scm b/runtime/queries/html_tags/injections.scm index 1c8ce012b..eb0ecd8e1 100644 --- a/runtime/queries/html_tags/injections.scm +++ b/runtime/queries/html_tags/injections.scm @@ -81,13 +81,13 @@ ((attribute (quoted_attribute_value (attribute_value) @injection.content)) - (#lua-match? @injection.content "%${") + (#lua-match? @injection.content "^%${") (#offset! @injection.content 0 2 0 -1) (#set! injection.language "javascript")) ((attribute (attribute_value) @injection.content) - (#lua-match? @injection.content "%${") + (#lua-match? @injection.content "^%${") (#offset! @injection.content 0 2 0 -2) (#set! injection.language "javascript"))