175 lines
3.2 KiB
Scheme

; inner function textobject
(function_declaration
body: (block
.
"{"
.
(_) @_start @_end
(_)? @_end
.
"}"
(#make-range! "function.inner" @_start @_end)))
; inner function literals
(func_literal
body: (block
.
"{"
.
(_) @_start @_end
(_)? @_end
.
"}"
(#make-range! "function.inner" @_start @_end)))
; method as inner function textobject
(method_declaration
body: (block
.
"{"
.
(_) @_start @_end
(_)? @_end
.
"}"
(#make-range! "function.inner" @_start @_end)))
; 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
.
"("
.
(_) @_start
(_)? @_end
.
")"
(#make-range! "call.inner" @_start @_end)))
; parameters
(parameter_list
"," @_start
.
(parameter_declaration) @parameter.inner
(#make-range! "parameter.outer" @_start @parameter.inner))
(parameter_list
.
(parameter_declaration) @parameter.inner
.
","? @_end
(#make-range! "parameter.outer" @parameter.inner @_end))
(parameter_declaration
name: (identifier)
type: (_)) @parameter.inner
(parameter_declaration
name: (identifier)
type: (_)) @parameter.inner
(parameter_list
"," @_start
.
(variadic_parameter_declaration) @parameter.inner
(#make-range! "parameter.outer" @_start @parameter.inner))
; arguments
(argument_list
"," @_start
.
(_) @parameter.inner
(#make-range! "parameter.outer" @_start @parameter.inner))
(argument_list
.
(_) @parameter.inner
.
","? @_end
(#make-range! "parameter.outer" @parameter.inner @_end))
; 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