373 lines
6.3 KiB
Scheme
373 lines
6.3 KiB
Scheme
(function_declaration
|
||
body: (statement_block)) @function.outer
|
||
|
||
(generator_function_declaration
|
||
body: (statement_block)) @function.outer
|
||
|
||
(function_expression
|
||
body: (statement_block)) @function.outer
|
||
|
||
(function_declaration
|
||
body: (statement_block
|
||
.
|
||
"{"
|
||
_+ @function.inner
|
||
"}"))
|
||
|
||
(generator_function_declaration
|
||
body: (statement_block
|
||
.
|
||
"{"
|
||
_+ @function.inner
|
||
"}"))
|
||
|
||
(function_expression
|
||
body: (statement_block
|
||
.
|
||
"{"
|
||
_+ @function.inner
|
||
"}"))
|
||
|
||
(export_statement
|
||
(function_declaration)) @function.outer
|
||
|
||
(arrow_function
|
||
body: (_) @function.inner) @function.outer
|
||
|
||
(arrow_function
|
||
body: (statement_block
|
||
.
|
||
"{"
|
||
_+ @function.inner
|
||
"}"))
|
||
|
||
(method_definition
|
||
body: (statement_block)) @function.outer
|
||
|
||
(method_definition
|
||
body: (statement_block
|
||
.
|
||
"{"
|
||
_+ @function.inner
|
||
"}"))
|
||
|
||
(class_declaration
|
||
body: (class_body)) @class.outer
|
||
|
||
(class_declaration
|
||
body: (class_body
|
||
.
|
||
"{"
|
||
_+ @class.inner
|
||
"}"))
|
||
|
||
(export_statement
|
||
(class_declaration)) @class.outer
|
||
|
||
(for_in_statement
|
||
body: (statement_block
|
||
.
|
||
"{"
|
||
_+ @loop.inner
|
||
"}")) @loop.outer
|
||
|
||
(for_statement
|
||
body: (statement_block
|
||
.
|
||
"{"
|
||
_+ @loop.inner
|
||
"}")) @loop.outer
|
||
|
||
(while_statement
|
||
body: (statement_block
|
||
.
|
||
"{"
|
||
_+ @loop.inner
|
||
"}")) @loop.outer
|
||
|
||
(do_statement
|
||
body: (statement_block
|
||
.
|
||
"{"
|
||
_+ @loop.inner
|
||
"}")) @loop.outer
|
||
|
||
(if_statement
|
||
consequence: (statement_block
|
||
.
|
||
"{"
|
||
_+ @conditional.inner
|
||
"}")) @conditional.outer
|
||
|
||
(if_statement
|
||
alternative: (else_clause
|
||
(statement_block
|
||
.
|
||
"{"
|
||
_+ @conditional.inner
|
||
"}"))) @conditional.outer
|
||
|
||
(if_statement) @conditional.outer
|
||
|
||
(switch_statement
|
||
body: (_)? @conditional.inner) @conditional.outer
|
||
|
||
(call_expression) @call.outer
|
||
|
||
(call_expression
|
||
arguments: (arguments
|
||
.
|
||
"("
|
||
_+ @call.inner
|
||
")"))
|
||
|
||
(new_expression
|
||
constructor: (identifier) @call.outer
|
||
arguments: (arguments
|
||
.
|
||
"("
|
||
_+ @call.inner
|
||
")") @call.outer)
|
||
|
||
; blocks
|
||
(statement_block
|
||
(_)* @block.inner) @block.outer
|
||
|
||
; parameters
|
||
; function ({ x }) ...
|
||
; function ([ x ]) ...
|
||
; function (v = default_value)
|
||
(formal_parameters
|
||
"," @parameter.outer
|
||
.
|
||
(_) @parameter.inner @parameter.outer)
|
||
|
||
(formal_parameters
|
||
.
|
||
(_) @parameter.inner @parameter.outer
|
||
.
|
||
","? @parameter.outer)
|
||
|
||
; last element with trailing comma
|
||
(formal_parameters
|
||
(_) @parameter.outer
|
||
.
|
||
"," @parameter.outer .)
|
||
|
||
; If the array/object pattern is the first parameter, treat its elements as the argument list
|
||
(formal_parameters
|
||
.
|
||
(_
|
||
[
|
||
(object_pattern
|
||
"," @parameter.outer
|
||
.
|
||
(_) @parameter.inner @parameter.outer)
|
||
(array_pattern
|
||
"," @parameter.outer
|
||
.
|
||
(_) @parameter.inner @parameter.outer)
|
||
]))
|
||
|
||
(formal_parameters
|
||
.
|
||
(_
|
||
[
|
||
(object_pattern
|
||
.
|
||
(_) @parameter.inner @parameter.outer
|
||
.
|
||
","? @parameter.outer)
|
||
(array_pattern
|
||
.
|
||
(_) @parameter.inner @parameter.outer
|
||
.
|
||
","? @parameter.outer)
|
||
]))
|
||
|
||
; last element with trailing comma
|
||
(formal_parameters
|
||
.
|
||
(_
|
||
[
|
||
(object_pattern
|
||
(_) @parameter.outer
|
||
.
|
||
"," @parameter.outer .)
|
||
(array_pattern
|
||
(_) @parameter.outer
|
||
.
|
||
"," @parameter.outer .)
|
||
]))
|
||
|
||
; arguments
|
||
(arguments
|
||
"," @parameter.outer
|
||
.
|
||
(_) @parameter.inner @parameter.outer)
|
||
|
||
(arguments
|
||
.
|
||
(_) @parameter.inner @parameter.outer
|
||
.
|
||
","? @parameter.outer)
|
||
|
||
; last element with trailing comma
|
||
(arguments
|
||
(_) @parameter.outer
|
||
.
|
||
"," @parameter.outer .)
|
||
|
||
; comment
|
||
(comment) @comment.outer
|
||
|
||
; regex
|
||
(regex
|
||
(regex_pattern) @regex.inner) @regex.outer
|
||
|
||
; number
|
||
(number) @number.inner
|
||
|
||
(lexical_declaration
|
||
(variable_declarator
|
||
name: (_) @assignment.lhs
|
||
value: (_) @assignment.inner @assignment.rhs)) @assignment.outer
|
||
|
||
(variable_declarator
|
||
name: (_) @assignment.inner)
|
||
|
||
(object
|
||
(pair
|
||
key: (_) @assignment.lhs
|
||
value: (_) @assignment.inner @assignment.rhs) @assignment.outer)
|
||
|
||
(return_statement
|
||
(_) @return.inner) @return.outer
|
||
|
||
(return_statement) @statement.outer
|
||
|
||
[
|
||
(if_statement)
|
||
(expression_statement)
|
||
(for_statement)
|
||
(while_statement)
|
||
(do_statement)
|
||
(for_in_statement)
|
||
(export_statement)
|
||
(lexical_declaration)
|
||
] @statement.outer
|
||
|
||
; 1. default import
|
||
(import_statement
|
||
(import_clause
|
||
(identifier) @parameter.inner @parameter.outer))
|
||
|
||
; 2. namespace import e.g. `* as React`
|
||
(import_statement
|
||
(import_clause
|
||
(namespace_import
|
||
(identifier) @parameter.inner) @parameter.outer))
|
||
|
||
; 3. named import e.g. `import { Bar, Baz } from ...`
|
||
(import_statement
|
||
(import_clause
|
||
(named_imports
|
||
(import_specifier) @parameter.inner)))
|
||
|
||
; 3‑A. named import followed by a comma
|
||
(import_statement
|
||
(import_clause
|
||
(named_imports
|
||
(import_specifier) @parameter.outer
|
||
.
|
||
"," @parameter.outer)))
|
||
|
||
; 3‑B. comma followed by named import
|
||
(import_statement
|
||
(import_clause
|
||
(named_imports
|
||
"," @parameter.outer
|
||
.
|
||
(import_specifier) @parameter.outer)))
|
||
|
||
; 3-C. only one named import without a comma
|
||
(import_statement
|
||
(import_clause
|
||
(named_imports
|
||
.
|
||
(import_specifier) @parameter.outer .)))
|
||
|
||
; Treat list or object elements as @parameter
|
||
; 1. parameter.inner
|
||
(object
|
||
(_) @parameter.inner)
|
||
|
||
(array
|
||
(_) @parameter.inner)
|
||
|
||
(object_pattern
|
||
(_) @parameter.inner)
|
||
|
||
(array_pattern
|
||
(_) @parameter.inner)
|
||
|
||
; 2. parameter.outer: Only one element, no comma
|
||
(object
|
||
.
|
||
(_) @parameter.outer .)
|
||
|
||
(array
|
||
.
|
||
(_) @parameter.outer .)
|
||
|
||
(object_pattern
|
||
.
|
||
(_) @parameter.outer .)
|
||
|
||
(array_pattern
|
||
.
|
||
(_) @parameter.outer .)
|
||
|
||
; 3. parameter.outer: Comma before or after
|
||
[
|
||
(object
|
||
"," @parameter.outer
|
||
.
|
||
(_) @parameter.outer)
|
||
(array
|
||
"," @parameter.outer
|
||
.
|
||
(_) @parameter.outer)
|
||
(object_pattern
|
||
"," @parameter.outer
|
||
.
|
||
(_) @parameter.outer)
|
||
(array_pattern
|
||
"," @parameter.outer
|
||
.
|
||
(_) @parameter.outer)
|
||
]
|
||
|
||
[
|
||
(object
|
||
.
|
||
(_) @parameter.outer
|
||
.
|
||
"," @parameter.outer)
|
||
(array
|
||
.
|
||
(_) @parameter.outer
|
||
.
|
||
"," @parameter.outer)
|
||
(object_pattern
|
||
.
|
||
(_) @parameter.outer
|
||
.
|
||
"," @parameter.outer)
|
||
(array_pattern
|
||
.
|
||
(_) @parameter.outer
|
||
.
|
||
"," @parameter.outer)
|
||
]
|