1
0
mirror of https://github.com/helix-editor/helix synced 2026-03-11 22:38:26 +01:00
helix/runtime/queries/go/injections.scm

93 lines
2.8 KiB
Scheme

((comment) @injection.content
(#set! injection.language "comment"))
; Inject markdown into documentation comments
;
; Go's comments are documentation comments when they are directly followed
; by one of Go's statements (e.g. `type`, `func`, `const`)
;
; This is only a partial implementation, which covers only
; block comments. For line comments (which are more common),
; upstream changes to the grammar are required.
(
(comment) @injection.content . (comment)* . [
(package_clause) ; `package`
(type_declaration) ; `type`
(function_declaration) ; `func`
(method_declaration) ; `func`
(var_declaration) ; `var`
(const_declaration) ; `const`
; var (
; A = 1
; B = 2
; )
(const_spec)
; const (
; A = 1
; B = 2
; )
(var_spec)
]
(#set! injection.language "markdown"))
((comment) @injection.content
(#match? @injection.content "^//go:generate")
(#set! injection.language "bash"))
(call_expression
(selector_expression) @_function
(#any-of? @_function "regexp.Match" "regexp.MatchReader" "regexp.MatchString" "regexp.Compile" "regexp.CompilePOSIX" "regexp.MustCompile" "regexp.MustCompilePOSIX")
(argument_list
.
[
(raw_string_literal)
(interpreted_string_literal)
] @injection.content
(#set! injection.language "regex")))
; https://pkg.go.dev/fmt#Printf
; https://pkg.go.dev/fmt#Sprintf
; https://pkg.go.dev/fmt#Scanf
; https://pkg.go.dev/fmt#Errorf
((call_expression
function: (selector_expression
operand: (identifier) @_module
field: (field_identifier) @_func)
arguments: (argument_list
. (interpreted_string_literal) @injection.content))
(#eq? @_module "fmt")
(#any-of? @_func "Printf" "Sprintf" "Scanf" "Errorf")
(#set! injection.language "go-format-string"))
; https://pkg.go.dev/fmt#Fprintf
; https://pkg.go.dev/fmt#Fscanf
; https://pkg.go.dev/fmt#Sscanf
((call_expression
function: (selector_expression
operand: (identifier) @_module
field: (field_identifier) @_func)
arguments: (argument_list
; [(identifier) (interpreted_string_literal)]
(_)
; (identifier)
.
(interpreted_string_literal) @injection.content))
(#eq? @_module "fmt")
(#any-of? @_func "Fprintf" "Fscanf" "Sscanf")
(#set! injection.language "go-format-string"))
; https://pkg.go.dev/log#Printf
; https://pkg.go.dev/log#Fatalf
; https://pkg.go.dev/log#Panicf
; https://pkg.go.dev/log#Logger.Printf
; https://pkg.go.dev/log#Logger.Fatalf
; https://pkg.go.dev/log#Logger.Panicf
((call_expression
function: (selector_expression
operand: (identifier)
field: (field_identifier) @_func)
arguments: (argument_list
. (interpreted_string_literal) @injection.content))
(#any-of? @_func "Printf" "Fatalf" "Panicf")
(#set! injection.language "go-format-string"))