semi ok
This commit is contained in:
@@ -0,0 +1,372 @@
|
||||
(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)
|
||||
]
|
||||
Reference in New Issue
Block a user