go: Fix language injections (#43775)

Jeff Brennan created

Closes #43730


## Summary
This modifies the existing injections.scm file for go by adding more
specific prefix queries and *_content nodes to the existing
`raw_string_literal` and `interpreted_string_literal` sections

<details><summary>This PR</summary>

<img width="567" height="784" alt="image"
src="https://github.com/user-attachments/assets/bfe8c64e-1dc2-470c-9f85-2c664a6c5a15"
/>
<img width="383" height="909" alt="image"
src="https://github.com/user-attachments/assets/9349af8c-22d3-4c9b-a435-a73719f17ba3"
/>
<img width="572" height="800" alt="image"
src="https://github.com/user-attachments/assets/939ada3b-1440-443b-8492-0eb61a7ee90f"
/>

</details>

<details><summary>Current Release (0.214.7)</summary>

<img width="569" height="777" alt="image"
src="https://github.com/user-attachments/assets/e6fffe77-e4c6-48e3-9c6d-a140298225c5"
/>
<img width="381" height="896" alt="image"
src="https://github.com/user-attachments/assets/bf107950-c33a-4603-90d3-2304bef0a4af"
/>
<img width="574" height="798" alt="image"
src="https://github.com/user-attachments/assets/2c5e43e5-f101-4722-8f58-6b176ba950ca"
/>

</details>

<details><summary>Code</summary>

```go
func test_sql() {
	// const assignment
	const _ = /* sql */ "SELECT * FROM users"
	const _ = /* sql */ `SELECT id, name FROM products`

	// var assignment
	var _ = /* sql */ `SELECT id, name FROM products`
	var _ = /* sql */ "SELECT id, name FROM products"

	// := assignment
	test := /* sql */ "SELECT * FROM users"
	test2 := /* sql */ `SELECT * FROM users`
	println(test)
	println(test2)

	// = assignment
	_ = /* sql */ "SELECT * FROM users WHERE id = 1"
	_ = /* sql */ `SELECT * FROM users WHERE id = 1`

	// literal elements
	_ = testStruct{Field: /* sql */ "SELECT * FROM users"}
	_ = testStruct{Field: /* sql */ `SELECT * FROM users`}

	testFunc(/* sql */ "SELECT * FROM users")
	testFunc(/* sql */ `SELECT * FROM users`)

	const backtickString = /* sql */ `SELECT * FROM users;`
	const quotedString = /* sql */ "SELECT * FROM users;"

	const backtickStringNoHighlight = `SELECT * FROM users;`
	const quotedStringNoHighlight = "SELECT * FROM users;"
}

func test_yaml() {
	// const assignment
	const _ = /* yaml */ `
settings:
  enabled: true
  port: 8080
`

	// := assignment
	test := /* yaml */ `
settings:
  enabled: true
  port: 8080
`

	println(test)

	// = assignment
	_ = /* yaml */ `
settings:
  enabled: true
  port: 8080
`

	// literal elements in a struct
	_ = testStruct{Field: /* yaml */ `
settings:
  test: 1234
  port: 8080
`}

	// function argument
	testFunc(/* yaml */ `
settings:
  enabled: true
  port: 8080
`)
}

func test_css() {
	// const assignment
	const _ = /* css */ "body { margin: 0; }"
	const _ = /* css */ `body { margin: 0; }`

	const cssCodes = /* css */ `
h1 {
  color: #333;
}
`

	// := assignment
	test := /* css */ "body { margin: 0; }"
	println(test)

	// = assignment
	_ = /* css */ "body { margin: 0; }"
	_ = /* css */ `body { margin: 0; }`

	// literal elements
	_ = testStruct{Field: /* css */ "body { margin: 0; }"}
	_ = testStruct{Field: /* css */ `body { margin: 0; }`}

	testFunc(/* css */ "body { margin: 0; }")
	testFunc(/* css */ `body { margin: 0; }`)

	const backtickString = /* css */ `body { margin: 0; }`
	const quotedString = /* css */ "body { margin: 0; }"

	const backtickStringNoHighlight = `body { margin: 0; }`
	const quotedStringNoHighlight = "body { margin: 0; }"
}
```

</details>

Release Notes:

- Greatly improved the quality of comment-directed language injections
in Go

Change summary

crates/languages/src/go/injections.scm | 959 +++++++++++++++++++--------
1 file changed, 658 insertions(+), 301 deletions(-)

Detailed changes

crates/languages/src/go/injections.scm 🔗

@@ -19,360 +19,717 @@
 
 ; INJECT SQL
 (
-	[
-		; var, const or short declaration of raw or interpreted string literal
-		((comment) @comment
-  		.
-    	(expression_list
-     	[
-      		(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content
-        ))
-
-        ; when passing as a literal element (to struct field eg.)
-		((comment) @comment
-        .
-        (literal_element
-        [
-        	(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content
-        ))
-
-        ; when passing as a function parameter
-        ((comment) @comment
-        .
-        [
-        	(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content)
-    ]
+    [
+        (const_spec
+            name: (identifier)
+            "="
+            (comment) @_comment
+            value: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (var_spec
+            name: (identifier)
+            "="
+            (comment) @_comment
+            value: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (assignment_statement
+        left: (expression_list)
+        "="
+        (comment) @_comment
+        right: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
 
-    (#match? @comment "^\\/\\*\\s*sql\\s*\\*\\/") ; /* sql */ or /*sql*/
-    (#set! injection.language "sql")
+        (short_var_declaration
+        left: (expression_list)
+        ":="
+        (comment) @_comment
+        right: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (composite_literal
+            body: (literal_value
+            (keyed_element
+            (comment) @_comment
+            value: (literal_element
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))))
+
+        (expression_statement
+            (call_expression
+            (argument_list
+            (comment) @_comment
+            [
+               	(interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        )))
+    ]
+  (#match? @_comment "^\\/\\*\\s*sql\\s*\\*\\/$")
+  (#set! injection.language "sql")
 )
 
 ; INJECT JSON
 (
-	[
-		; var, const or short declaration of raw or interpreted string literal
-		((comment) @comment
-  		.
-    	(expression_list
-     	[
-      		(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content
-        ))
-
-        ; when passing as a literal element (to struct field eg.)
-		((comment) @comment
-        .
-        (literal_element
-        [
-        	(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content
-        ))
-
-        ; when passing as a function parameter
-        ((comment) @comment
-        .
-        [
-        	(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content)
-    ]
+    [
+        (const_spec
+            name: (identifier)
+            "="
+            (comment) @_comment
+            value: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
 
-    (#match? @comment "^\\/\\*\\s*json\\s*\\*\\/") ; /* json */ or /*json*/
+        (var_spec
+            name: (identifier)
+            "="
+            (comment) @_comment
+            value: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (assignment_statement
+        left: (expression_list)
+        "="
+        (comment) @_comment
+        right: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (short_var_declaration
+        left: (expression_list)
+        ":="
+        (comment) @_comment
+        right: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (composite_literal
+            body: (literal_value
+            (keyed_element
+            (comment) @_comment
+            value: (literal_element
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))))
+
+        (expression_statement
+            (call_expression
+            (argument_list
+            (comment) @_comment
+            [
+               	(interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        )))
+    ]
+    (#match? @_comment "^\\/\\*\\s*json\\s*\\*\\/") ; /* json */ or /*json*/
     (#set! injection.language "json")
 )
 
 ; INJECT YAML
 (
-	[
-		; var, const or short declaration of raw or interpreted string literal
-		((comment) @comment
-  		.
-    	(expression_list
-     	[
-      		(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content
-        ))
-
-        ; when passing as a literal element (to struct field eg.)
-		((comment) @comment
-        .
-        (literal_element
-        [
-        	(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content
-        ))
-
-        ; when passing as a function parameter
-        ((comment) @comment
-        .
-        [
-        	(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content)
-    ]
+    [
+        (const_spec
+            name: (identifier)
+            "="
+            (comment) @_comment
+            value: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (var_spec
+            name: (identifier)
+            "="
+            (comment) @_comment
+            value: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (assignment_statement
+        left: (expression_list)
+        "="
+        (comment) @_comment
+        right: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (short_var_declaration
+        left: (expression_list)
+        ":="
+        (comment) @_comment
+        right: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
 
-    (#match? @comment "^\\/\\*\\s*yaml\\s*\\*\\/") ; /* yaml */ or /*yaml*/
+        (composite_literal
+            body: (literal_value
+            (keyed_element
+            (comment) @_comment
+            value: (literal_element
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))))
+
+        (expression_statement
+            (call_expression
+            (argument_list
+            (comment) @_comment
+            [
+               	(interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        )))
+    ]
+    (#match? @_comment "^\\/\\*\\s*yaml\\s*\\*\\/") ; /* yaml */ or /*yaml*/
     (#set! injection.language "yaml")
 )
 
 ; INJECT XML
 (
-	[
-		; var, const or short declaration of raw or interpreted string literal
-		((comment) @comment
-  		.
-    	(expression_list
-     	[
-      		(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content
-        ))
-
-        ; when passing as a literal element (to struct field eg.)
-		((comment) @comment
-        .
-        (literal_element
-        [
-        	(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content
-        ))
-
-        ; when passing as a function parameter
-        ((comment) @comment
-        .
-        [
-        	(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content)
-    ]
+    [
+        (const_spec
+            name: (identifier)
+            "="
+            (comment) @_comment
+            value: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (var_spec
+            name: (identifier)
+            "="
+            (comment) @_comment
+            value: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (assignment_statement
+        left: (expression_list)
+        "="
+        (comment) @_comment
+        right: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (short_var_declaration
+        left: (expression_list)
+        ":="
+        (comment) @_comment
+        right: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
 
-    (#match? @comment "^\\/\\*\\s*xml\\s*\\*\\/") ; /* xml */ or /*xml*/
+        (composite_literal
+            body: (literal_value
+            (keyed_element
+            (comment) @_comment
+            value: (literal_element
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))))
+
+        (expression_statement
+            (call_expression
+            (argument_list
+            (comment) @_comment
+            [
+               	(interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        )))
+    ]
+    (#match? @_comment "^\\/\\*\\s*xml\\s*\\*\\/") ; /* xml */ or /*xml*/
     (#set! injection.language "xml")
 )
 
 ; INJECT HTML
 (
-	[
-		; var, const or short declaration of raw or interpreted string literal
-		((comment) @comment
-  		.
-    	(expression_list
-     	[
-      		(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content
-        ))
-
-        ; when passing as a literal element (to struct field eg.)
-		((comment) @comment
-        .
-        (literal_element
-        [
-        	(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content
-        ))
-
-        ; when passing as a function parameter
-        ((comment) @comment
-        .
-        [
-        	(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content)
-    ]
+    [
+        (const_spec
+            name: (identifier)
+            "="
+            (comment) @_comment
+            value: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
 
-    (#match? @comment "^\\/\\*\\s*html\\s*\\*\\/") ; /* html */ or /*html*/
+        (var_spec
+            name: (identifier)
+            "="
+            (comment) @_comment
+            value: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (assignment_statement
+        left: (expression_list)
+        "="
+        (comment) @_comment
+        right: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (short_var_declaration
+        left: (expression_list)
+        ":="
+        (comment) @_comment
+        right: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (composite_literal
+            body: (literal_value
+            (keyed_element
+            (comment) @_comment
+            value: (literal_element
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))))
+
+        (expression_statement
+            (call_expression
+            (argument_list
+            (comment) @_comment
+            [
+               	(interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        )))
+    ]
+    (#match? @_comment "^\\/\\*\\s*html\\s*\\*\\/") ; /* html */ or /*html*/
     (#set! injection.language "html")
 )
 
 ; INJECT JS
 (
-	[
-		; var, const or short declaration of raw or interpreted string literal
-		((comment) @comment
-  		.
-    	(expression_list
-     	[
-      		(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content
-        ))
-
-        ; when passing as a literal element (to struct field eg.)
-		((comment) @comment
-        .
-        (literal_element
-        [
-        	(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content
-        ))
-
-        ; when passing as a function parameter
-        ((comment) @comment
-        .
-        [
-        	(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content)
-    ]
+    [
+        (const_spec
+            name: (identifier)
+            "="
+            (comment) @_comment
+            value: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (var_spec
+            name: (identifier)
+            "="
+            (comment) @_comment
+            value: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (assignment_statement
+        left: (expression_list)
+        "="
+        (comment) @_comment
+        right: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (short_var_declaration
+        left: (expression_list)
+        ":="
+        (comment) @_comment
+        right: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
 
-    (#match? @comment "^\\/\\*\\s*js\\s*\\*\\/") ; /* js */ or /*js*/
+        (composite_literal
+            body: (literal_value
+            (keyed_element
+            (comment) @_comment
+            value: (literal_element
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))))
+
+        (expression_statement
+            (call_expression
+            (argument_list
+            (comment) @_comment
+            [
+               	(interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        )))
+    ]
+    (#match? @_comment "^\\/\\*\\s*js\\s*\\*\\/") ; /* js */ or /*js*/
     (#set! injection.language "javascript")
 )
 
+
 ; INJECT CSS
 (
-	[
-		; var, const or short declaration of raw or interpreted string literal
-		((comment) @comment
-  		.
-    	(expression_list
-     	[
-      		(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content
-        ))
-
-        ; when passing as a literal element (to struct field eg.)
-		((comment) @comment
-        .
-        (literal_element
-        [
-        	(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content
-        ))
-
-        ; when passing as a function parameter
-        ((comment) @comment
-        .
-        [
-        	(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content)
-    ]
+    [
+        (const_spec
+            name: (identifier)
+            "="
+            (comment) @_comment
+            value: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (var_spec
+            name: (identifier)
+            "="
+            (comment) @_comment
+            value: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (assignment_statement
+        left: (expression_list)
+        "="
+        (comment) @_comment
+        right: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
 
-    (#match? @comment "^\\/\\*\\s*css\\s*\\*\\/") ; /* css */ or /*css*/
+        (short_var_declaration
+        left: (expression_list)
+        ":="
+        (comment) @_comment
+        right: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (composite_literal
+            body: (literal_value
+            (keyed_element
+            (comment) @_comment
+            value: (literal_element
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))))
+
+        (expression_statement
+            (call_expression
+            (argument_list
+            (comment) @_comment
+            [
+               	(interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        )))
+    ]
+    (#match? @_comment "^\\/\\*\\s*css\\s*\\*\\/") ; /* css */ or /*css*/
     (#set! injection.language "css")
 )
 
+
 ; INJECT LUA
 (
-	[
-		; var, const or short declaration of raw or interpreted string literal
-		((comment) @comment
-  		.
-    	(expression_list
-     	[
-      		(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content
-        ))
-
-        ; when passing as a literal element (to struct field eg.)
-		((comment) @comment
-        .
-        (literal_element
-        [
-        	(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content
-        ))
-
-        ; when passing as a function parameter
-        ((comment) @comment
-        .
-        [
-        	(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content)
-    ]
+    [
+        (const_spec
+            name: (identifier)
+            "="
+            (comment) @_comment
+            value: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (var_spec
+            name: (identifier)
+            "="
+            (comment) @_comment
+            value: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (assignment_statement
+        left: (expression_list)
+        "="
+        (comment) @_comment
+        right: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (short_var_declaration
+        left: (expression_list)
+        ":="
+        (comment) @_comment
+        right: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
 
-    (#match? @comment "^\\/\\*\\s*lua\\s*\\*\\/") ; /* lua */ or /*lua*/
+        (composite_literal
+            body: (literal_value
+            (keyed_element
+            (comment) @_comment
+            value: (literal_element
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))))
+
+        (expression_statement
+            (call_expression
+            (argument_list
+            (comment) @_comment
+            [
+               	(interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        )))
+    ]
+    (#match? @_comment "^\\/\\*\\s*lua\\s*\\*\\/") ; /* lua */ or /*lua*/
     (#set! injection.language "lua")
 )
 
 ; INJECT BASH
 (
-	[
-		; var, const or short declaration of raw or interpreted string literal
-		((comment) @comment
-  		.
-    	(expression_list
-     	[
-      		(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content
-        ))
-
-        ; when passing as a literal element (to struct field eg.)
-		((comment) @comment
-        .
-        (literal_element
-        [
-        	(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content
-        ))
-
-        ; when passing as a function parameter
-        ((comment) @comment
-        .
-        [
-        	(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content)
-    ]
+    [
+        (const_spec
+            name: (identifier)
+            "="
+            (comment) @_comment
+            value: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (var_spec
+            name: (identifier)
+            "="
+            (comment) @_comment
+            value: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (assignment_statement
+        left: (expression_list)
+        "="
+        (comment) @_comment
+        right: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (short_var_declaration
+        left: (expression_list)
+        ":="
+        (comment) @_comment
+        right: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
 
-    (#match? @comment "^\\/\\*\\s*bash\\s*\\*\\/") ; /* bash */ or /*bash*/
+        (composite_literal
+            body: (literal_value
+            (keyed_element
+            (comment) @_comment
+            value: (literal_element
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))))
+
+        (expression_statement
+            (call_expression
+            (argument_list
+            (comment) @_comment
+            [
+               	(interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        )))
+    ]
+    (#match? @_comment "^\\/\\*\\s*bash\\s*\\*\\/") ; /* bash */ or /*bash*/
     (#set! injection.language "bash")
 )
 
 ; INJECT CSV
 (
-	[
-		; var, const or short declaration of raw or interpreted string literal
-		((comment) @comment
-  		.
-    	(expression_list
-     	[
-      		(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content
-        ))
-
-        ; when passing as a literal element (to struct field eg.)
-		((comment) @comment
-        .
-        (literal_element
-        [
-        	(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content
-        ))
-
-        ; when passing as a function parameter
-        ((comment) @comment
-        .
-        [
-        	(interpreted_string_literal)
-        	(raw_string_literal)
-        ] @injection.content)
-    ]
+    [
+        (const_spec
+            name: (identifier)
+            "="
+            (comment) @_comment
+            value: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
 
-    (#match? @comment "^\\/\\*\\s*csv\\s*\\*\\/") ; /* csv */ or /*csv*/
+        (var_spec
+            name: (identifier)
+            "="
+            (comment) @_comment
+            value: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (assignment_statement
+        left: (expression_list)
+        "="
+        (comment) @_comment
+        right: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (short_var_declaration
+        left: (expression_list)
+        ":="
+        (comment) @_comment
+        right: (expression_list
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        ((comment) @_comment
+            value: (literal_element
+            [
+                (interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        ))
+
+        (argument_list
+            (comment) @_comment
+            [
+               	(interpreted_string_literal (interpreted_string_literal_content) @injection.content)
+                (raw_string_literal (raw_string_literal_content) @injection.content)
+            ]
+        )
+    ]
+    (#match? @_comment "^\\/\\*\\s*csv\\s*\\*\\/") ; /* csv */ or /*csv */
     (#set! injection.language "csv")
 )