Add new injections for Go (#37605)

support for injecting sql, json, yaml, xml, html, css, js, lua and csv
value

if you use `/* lang */` before string literals, highlights them

**Example:**

```go
const sqlQuery = /* sql */ "SELECT * FROM users;" // highlights as SQL code
```

<img width="629" height="46" alt="Screenshot 2025-09-05 at 06 17 49"
src="https://github.com/user-attachments/assets/80f404d8-0a47-428d-bdb5-09fbee502cfe"
/>


Closes #ISSUE

Release Notes:

- Go: Added support for injecting sql, json, yaml, xml, html, css, js, lua and csv language highlights into string literals, when they are prefixed with `/* lang */`

**Example:**

```go
const sqlQuery = /* sql */ "SELECT * FROM users;" // Will be highlighted as SQL code
```
This commit is contained in:
Kaan Kuscu 2025-09-15 18:51:03 +03:00 committed by GitHub
parent 35e5aa4e71
commit 63586ff2e4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -10,4 +10,365 @@
(raw_string_literal)
(interpreted_string_literal)
] @injection.content
(#set! injection.language "regex")))
(#set! injection.language "regex")
))
; 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)
]
(#match? @comment "^\\/\\*\\s*sql\\s*\\*\\/") ; /* sql */ or /*sql*/
(#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)
]
(#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)
]
(#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)
]
(#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)
]
(#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)
]
(#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)
]
(#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)
]
(#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)
]
(#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)
]
(#match? @comment "^\\/\\*\\s*csv\\s*\\*\\/") ; /* csv */ or /*csv*/
(#set! injection.language "csv")
)