This commit is contained in:
2026-06-03 05:23:07 +02:00
commit a67da8c917
102 changed files with 9238 additions and 0 deletions
+19
View File
@@ -0,0 +1,19 @@
[
(const_declaration)
(expression_switch_statement)
(expression_case)
(default_case)
(type_switch_statement)
(type_case)
(for_statement)
(func_literal)
(function_declaration)
(if_statement)
(import_declaration)
(method_declaration)
(type_declaration)
(var_declaration)
(composite_literal)
(literal_element)
(block)
] @fold
+254
View File
@@ -0,0 +1,254 @@
; Forked from tree-sitter-go
; Copyright (c) 2014 Max Brunsfeld (The MIT License)
;
; Identifiers
(type_identifier) @type
(type_spec
name: (type_identifier) @type.definition)
(field_identifier) @property
(identifier) @variable
(package_identifier) @module
(parameter_declaration
(identifier) @variable.parameter)
(variadic_parameter_declaration
(identifier) @variable.parameter)
(label_name) @label
(const_spec
name: (identifier) @constant)
; Function calls
(call_expression
function: (identifier) @function.call)
(call_expression
function: (selector_expression
field: (field_identifier) @function.method.call))
; Function definitions
(function_declaration
name: (identifier) @function)
(method_declaration
name: (field_identifier) @function.method)
(method_elem
name: (field_identifier) @function.method)
; Constructors
((call_expression
(identifier) @constructor)
(#lua-match? @constructor "^[nN]ew.+$"))
((call_expression
(identifier) @constructor)
(#lua-match? @constructor "^[mM]ake.+$"))
; Operators
[
"--"
"-"
"-="
":="
"!"
"!="
"..."
"*"
"*"
"*="
"/"
"/="
"&"
"&&"
"&="
"&^"
"&^="
"%"
"%="
"^"
"^="
"+"
"++"
"+="
"<-"
"<"
"<<"
"<<="
"<="
"="
"=="
">"
">="
">>"
">>="
"|"
"|="
"||"
"~"
] @operator
; Keywords
[
"break"
"const"
"continue"
"default"
"defer"
"goto"
"range"
"select"
"var"
"fallthrough"
] @keyword
[
"type"
"struct"
"interface"
] @keyword.type
"func" @keyword.function
"return" @keyword.return
"go" @keyword.coroutine
"for" @keyword.repeat
[
"import"
"package"
] @keyword.import
[
"else"
"case"
"switch"
"if"
] @keyword.conditional
; Builtin types
[
"chan"
"map"
] @type.builtin
((type_identifier) @type.builtin
(#any-of? @type.builtin
"any" "bool" "byte" "comparable" "complex128" "complex64" "error" "float32" "float64" "int"
"int16" "int32" "int64" "int8" "rune" "string" "uint" "uint16" "uint32" "uint64" "uint8"
"uintptr"))
; Builtin functions
((identifier) @function.builtin
(#any-of? @function.builtin
"append" "cap" "clear" "close" "complex" "copy" "delete" "imag" "len" "make" "max" "min" "new"
"panic" "print" "println" "real" "recover"))
; Delimiters
"." @punctuation.delimiter
"," @punctuation.delimiter
":" @punctuation.delimiter
";" @punctuation.delimiter
"(" @punctuation.bracket
")" @punctuation.bracket
"{" @punctuation.bracket
"}" @punctuation.bracket
"[" @punctuation.bracket
"]" @punctuation.bracket
; Literals
(interpreted_string_literal) @string
(raw_string_literal) @string
(rune_literal) @string
(escape_sequence) @string.escape
(int_literal) @number
(float_literal) @number.float
(imaginary_literal) @number
[
(true)
(false)
] @boolean
[
(nil)
(iota)
] @constant.builtin
(keyed_element
.
(literal_element
(identifier) @variable.member))
(field_declaration
name: (field_identifier) @variable.member)
; Comments
(comment) @comment @spell
; Doc Comments
(source_file
.
(comment)+ @comment.documentation)
(source_file
(comment)+ @comment.documentation
.
(const_declaration))
(source_file
(comment)+ @comment.documentation
.
(function_declaration))
(source_file
(comment)+ @comment.documentation
.
(type_declaration))
(source_file
(comment)+ @comment.documentation
.
(var_declaration))
; Spell
((interpreted_string_literal) @spell
(#not-has-parent? @spell import_spec))
; Regex
(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
(raw_string_literal_content) @string.regexp)
(interpreted_string_literal
(interpreted_string_literal_content) @string.regexp)
]))
+42
View File
@@ -0,0 +1,42 @@
((comment) @injection.content
(#set! injection.language "comment"))
(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
(raw_string_literal_content) @injection.content)
(interpreted_string_literal
(interpreted_string_literal_content) @injection.content)
]
(#set! injection.language "regex")))
((comment) @injection.content
(#match? @injection.content "/\\*!([a-zA-Z]+:)?re2c")
(#set! injection.language "re2c"))
((call_expression
function: (selector_expression
field: (field_identifier) @_method)
arguments: (argument_list
.
(interpreted_string_literal
(interpreted_string_literal_content) @injection.content)))
(#any-of? @_method "Printf" "Sprintf" "Fatalf" "Scanf" "Errorf" "Skipf" "Logf")
(#set! injection.language "printf"))
((call_expression
function: (selector_expression
field: (field_identifier) @_method)
arguments: (argument_list
(_)
.
(interpreted_string_literal
(interpreted_string_literal_content) @injection.content)))
(#any-of? @_method "Fprintf" "Fscanf" "Appendf" "Sscanf")
(#set! injection.language "printf"))
+88
View File
@@ -0,0 +1,88 @@
((function_declaration
name: (identifier) @local.definition.function) ; @function
)
((method_declaration
name: (field_identifier) @local.definition.method) ; @function.method
)
(short_var_declaration
left: (expression_list
(identifier) @local.definition.var))
(var_spec
name: (identifier) @local.definition.var)
(parameter_declaration
(identifier) @local.definition.var)
(variadic_parameter_declaration
(identifier) @local.definition.var)
(for_statement
(range_clause
left: (expression_list
(identifier) @local.definition.var)))
(const_declaration
(const_spec
name: (identifier) @local.definition.var))
(type_declaration
(type_spec
name: (type_identifier) @local.definition.type))
; reference
(identifier) @local.reference
(type_identifier) @local.reference
(field_identifier) @local.reference
((package_identifier) @local.reference
(#set! reference.kind "namespace"))
(package_clause
(package_identifier) @local.definition.namespace)
(import_spec_list
(import_spec
name: (package_identifier) @local.definition.namespace))
; Call references
((call_expression
function: (identifier) @local.reference)
(#set! reference.kind "call"))
((call_expression
function: (selector_expression
field: (field_identifier) @local.reference))
(#set! reference.kind "call"))
((call_expression
function: (parenthesized_expression
(identifier) @local.reference))
(#set! reference.kind "call"))
((call_expression
function: (parenthesized_expression
(selector_expression
field: (field_identifier) @local.reference)))
(#set! reference.kind "call"))
; Scopes
(func_literal) @local.scope
(source_file) @local.scope
(function_declaration) @local.scope
(if_statement) @local.scope
(block) @local.scope
(expression_switch_statement) @local.scope
(for_statement) @local.scope
(method_declaration) @local.scope
+153
View File
@@ -0,0 +1,153 @@
; inner function textobject
(function_declaration
body: (block
.
"{"
_+ @function.inner
"}"))
; inner function literals
(func_literal
body: (block
.
"{"
_+ @function.inner
"}"))
; method as inner function textobject
(method_declaration
body: (block
.
"{"
_+ @function.inner
"}"))
; outer function textobject
(function_declaration) @function.outer
; outer function literals
(func_literal
(_)?) @function.outer
; method as outer function textobject
(method_declaration
body: (block)?) @function.outer
; struct and interface declaration as class textobject?
(type_declaration
(type_spec
(type_identifier)
(struct_type
(field_declaration_list
(_)?) @class.inner))) @class.outer
(type_declaration
(type_spec
(type_identifier)
(interface_type) @class.inner)) @class.outer
; struct literals as class textobject
(composite_literal
(type_identifier)?
(struct_type
(_))?
(literal_value
(_)) @class.inner) @class.outer
; conditionals
(if_statement
alternative: (_
(_) @conditional.inner)?) @conditional.outer
(if_statement
consequence: (block)? @conditional.inner)
(if_statement
condition: (_) @conditional.inner)
; loops
(for_statement
body: (block)? @loop.inner) @loop.outer
; blocks
(_
(block) @block.inner) @block.outer
; statements
(block
(_) @statement.outer)
; comments
(comment) @comment.outer
; calls
(call_expression) @call.outer
(call_expression
arguments: (argument_list
.
"("
_+ @call.inner
")"))
; parameters
(parameter_list
"," @parameter.outer
.
(parameter_declaration) @parameter.inner @parameter.outer)
(parameter_list
.
(parameter_declaration) @parameter.inner @parameter.outer
.
","? @parameter.outer)
(parameter_declaration
name: (identifier)
type: (_)) @parameter.inner
(parameter_declaration
name: (identifier)
type: (_)) @parameter.inner
(parameter_list
"," @parameter.outer
.
(variadic_parameter_declaration) @parameter.inner @parameter.outer)
; arguments
(argument_list
"," @parameter.outer
.
(_) @parameter.inner @parameter.outer)
(argument_list
.
(_) @parameter.inner @parameter.outer
.
","? @parameter.outer)
; assignments
(short_var_declaration
left: (_) @assignment.lhs
right: (_) @assignment.rhs @assignment.inner) @assignment.outer
(assignment_statement
left: (_) @assignment.lhs
right: (_) @assignment.rhs @assignment.inner) @assignment.outer
(var_spec
name: (_) @assignment.lhs
value: (_) @assignment.rhs @assignment.inner) @assignment.outer
(var_spec
name: (_) @assignment.inner
type: (_)) @assignment.outer
(const_spec
name: (_) @assignment.lhs
value: (_) @assignment.rhs @assignment.inner) @assignment.outer
(const_spec
name: (_) @assignment.inner
type: (_)) @assignment.outer