155 lines
2.7 KiB
Scheme

; class
(((annotation)? @class.outer.start
.
(class_definition
body: (class_body) @_end @class.inner) @_start)
(#make-range! "class.outer" @_start @_end))
(mixin_declaration
(class_body) @class.inner) @class.outer
(enum_declaration
body: (enum_body) @class.inner) @class.outer
(extension_declaration
body: (extension_body) @class.inner) @class.outer
; function/method
(((annotation)? @function.outer.start
.
[
(method_signature)
(function_signature)
] @_start
.
(function_body) @_end)
(#make-range! "function.outer" @_start @_end))
(function_body
(block
.
"{"
.
(_) @_start @_end
(_)? @_end
.
"}"
(#make-range! "function.inner" @_start @_end)))
(type_alias
(function_type)? @function.inner) @function.outer
; parameter
[
(formal_parameter)
(normal_parameter_type)
(type_parameter)
] @parameter.inner
("," @_start
.
[
(formal_parameter)
(normal_parameter_type)
(type_parameter)
] @_par
(#make-range! "parameter.outer" @_start @_par))
([
(formal_parameter)
(normal_parameter_type)
(type_parameter)
] @_par
.
"," @_end
(#make-range! "parameter.outer" @_par @_end))
; TODO: (_)* not supported yet -> for now this works correctly only with simple arguments
((arguments
.
(_) @parameter.inner
.
","? @_end)
(#make-range! "parameter.outer" @parameter.inner @_end))
((arguments
"," @_start
.
(_) @parameter.inner)
(#make-range! "parameter.outer" @_start @parameter.inner))
; call
((identifier) @_start
.
(selector
(argument_part) @_end)
(#make-range! "call.outer" @_start @_end))
((identifier)
.
(selector
(argument_part
(arguments
.
"("
.
(_) @_start
(_)? @_end
.
")"
(#make-range! "call.inner" @_start @_end)))))
; block
(block) @block.outer
; conditional
(if_statement
[
condition: (_)
consequence: (_)
alternative: (_)?
] @conditional.inner) @conditional.outer
(switch_statement
body: (switch_block) @conditional.inner) @conditional.outer
(conditional_expression
[
consequence: (_)
alternative: (_)
] @conditional.inner) @conditional.outer
; loop
(for_statement
body: (block) @loop.inner) @loop.outer
(while_statement
body: (block) @loop.inner) @loop.outer
(do_statement
body: (block) @loop.inner) @loop.outer
; comment
[
(comment)
(documentation_comment)
] @comment.outer
; statement
[
(break_statement)
(do_statement)
(expression_statement)
(for_statement)
(if_statement)
(return_statement)
(switch_statement)
(while_statement)
(assert_statement)
;(labeled_statement)
(yield_statement)
(yield_each_statement)
(continue_statement)
(try_statement)
] @statement.outer