From 499a34d3cf4c4815ada57d95892d1ef129153285 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Fri, 5 Jun 2026 15:41:40 +0900 Subject: [PATCH] Add tags and textobjects for more languages --- runtime/queries/css/textobjects.scm | 22 +++++++++++++ runtime/queries/dart/tags.scm | 14 +++++++++ runtime/queries/haskell/tags.scm | 7 +++++ runtime/queries/julia/tags.scm | 45 +++++++++++++++++++++++++++ runtime/queries/lua/tags.scm | 17 ++++++++++ runtime/queries/ocaml/textobjects.scm | 32 +++++++++++++++++++ runtime/queries/perl/tags.scm | 2 ++ runtime/queries/scala/tags.scm | 9 ++++++ runtime/queries/swift/tags.scm | 10 ++++++ runtime/queries/zig/tags.scm | 26 ++++++++++++++++ 10 files changed, 184 insertions(+) create mode 100644 runtime/queries/css/textobjects.scm create mode 100644 runtime/queries/dart/tags.scm create mode 100644 runtime/queries/haskell/tags.scm create mode 100644 runtime/queries/julia/tags.scm create mode 100644 runtime/queries/lua/tags.scm create mode 100644 runtime/queries/ocaml/textobjects.scm create mode 100644 runtime/queries/perl/tags.scm create mode 100644 runtime/queries/scala/tags.scm create mode 100644 runtime/queries/swift/tags.scm create mode 100644 runtime/queries/zig/tags.scm diff --git a/runtime/queries/css/textobjects.scm b/runtime/queries/css/textobjects.scm new file mode 100644 index 00000000..1139e902 --- /dev/null +++ b/runtime/queries/css/textobjects.scm @@ -0,0 +1,22 @@ +; Rule sets and their declaration blocks +(rule_set) @function.around +(rule_set + (block) @function.inside) + +(keyframe_block_list) @function.around +(keyframe_block + (block) @function.inside) + +; At-rules with a body (e.g. @media, @supports) +(media_statement) @class.around +(media_statement + (block) @class.inside) + +; Declarations as key/value entries +(declaration) @entry.around +(declaration + ":" + (_) @entry.inside) + +(comment) @comment.inside +(comment)+ @comment.around diff --git a/runtime/queries/dart/tags.scm b/runtime/queries/dart/tags.scm new file mode 100644 index 00000000..2b7a59f0 --- /dev/null +++ b/runtime/queries/dart/tags.scm @@ -0,0 +1,14 @@ +(class_definition + name: (identifier) @name) @definition.class +(enum_declaration + name: (identifier) @name) @definition.enum +(mixin_declaration + (identifier) @name) @definition.interface +(extension_declaration + name: (identifier) @name) @definition.class +(function_signature + name: (identifier) @name) @definition.function +(constructor_signature + name: (identifier) @name) @definition.function +(type_alias + "typedef" . (type_identifier) @name) @definition.type diff --git a/runtime/queries/haskell/tags.scm b/runtime/queries/haskell/tags.scm new file mode 100644 index 00000000..bb2b6ab3 --- /dev/null +++ b/runtime/queries/haskell/tags.scm @@ -0,0 +1,7 @@ +(function name: (variable) @name) @definition.function +(signature name: (variable) @name) @definition.function +(data_type name: (name) @name) @definition.struct +(newtype name: (name) @name) @definition.struct +(type_synomym name: (name) @name) @definition.type +(class name: (name) @name) @definition.interface +(header module: (module (module_id) @name)) @definition.module diff --git a/runtime/queries/julia/tags.scm b/runtime/queries/julia/tags.scm new file mode 100644 index 00000000..3bcafbef --- /dev/null +++ b/runtime/queries/julia/tags.scm @@ -0,0 +1,45 @@ +; The function name lives in the signature's call_expression (optionally wrapped +; in a where_expression); short-form `f(x) = …` is an assignment with a call LHS. +(function_definition + (signature + [ + (call_expression . (identifier) @name) + (where_expression (call_expression . (identifier) @name)) + ])) @definition.function + +((assignment + . (call_expression . (identifier) @name)) @definition.function) + +(macro_definition + (signature (call_expression . (identifier) @name))) @definition.macro + +(module_definition + name: (identifier) @name) @definition.module + +; Type name(s) live in a type_head; unwrap the `<: Super` (binary_expression) +; and `{T}` (parametrized_type_expression) wrappers to the leading identifier. +(struct_definition + (type_head [ + (identifier) @name + (binary_expression . (identifier) @name) + (parametrized_type_expression . (identifier) @name) + (binary_expression . (parametrized_type_expression . (identifier) @name)) + ])) @definition.struct + +(abstract_definition + (type_head [ + (identifier) @name + (binary_expression . (identifier) @name) + (parametrized_type_expression . (identifier) @name) + (binary_expression . (parametrized_type_expression . (identifier) @name)) + ])) @definition.type + +(primitive_definition + (type_head [ + (identifier) @name + (binary_expression . (identifier) @name) + (parametrized_type_expression . (identifier) @name) + ])) @definition.type + +(const_statement + (assignment . (identifier) @name)) @definition.constant diff --git a/runtime/queries/lua/tags.scm b/runtime/queries/lua/tags.scm new file mode 100644 index 00000000..51ff5ac4 --- /dev/null +++ b/runtime/queries/lua/tags.scm @@ -0,0 +1,17 @@ +; Function definitions +(function_declaration + name: [ + (identifier) @name + (dot_index_expression field: (identifier) @name) + (method_index_expression method: (identifier) @name) + ]) @definition.function + +; `x = function() ... end`, `M.x = function() ... end` +(assignment_statement + (variable_list + name: [ + (identifier) @name + (dot_index_expression field: (identifier) @name) + ]) + (expression_list + value: (function_definition))) @definition.function diff --git a/runtime/queries/ocaml/textobjects.scm b/runtime/queries/ocaml/textobjects.scm new file mode 100644 index 00000000..8298c3ab --- /dev/null +++ b/runtime/queries/ocaml/textobjects.scm @@ -0,0 +1,32 @@ +; Value/function definitions +(value_definition) @function.around +(value_definition + (let_binding + body: (_) @function.inside)) + +(fun_expression + body: (_) @function.inside) @function.around + +(function_expression) @function.around + +(method_definition + body: (_) @function.inside) @function.around + +; Types and modules +(type_definition) @class.around +(type_definition + (type_binding + body: (_) @class.inside)) + +(module_definition) @class.around +(module_definition + (module_binding + body: (_) @class.inside)) + +; Parameters +(parameter) @parameter.around +(parameter + pattern: (_) @parameter.inside) + +(comment) @comment.inside +(comment)+ @comment.around diff --git a/runtime/queries/perl/tags.scm b/runtime/queries/perl/tags.scm new file mode 100644 index 00000000..c91ad8f9 --- /dev/null +++ b/runtime/queries/perl/tags.scm @@ -0,0 +1,2 @@ +(subroutine_declaration_statement name: (bareword) @name) @definition.function +(package_statement name: (package) @name) @definition.module diff --git a/runtime/queries/scala/tags.scm b/runtime/queries/scala/tags.scm new file mode 100644 index 00000000..0d9fd18d --- /dev/null +++ b/runtime/queries/scala/tags.scm @@ -0,0 +1,9 @@ +(class_definition name: (identifier) @name) @definition.class +(object_definition name: (identifier) @name) @definition.module +(trait_definition name: (identifier) @name) @definition.interface +(enum_definition name: (identifier) @name) @definition.enum +(function_definition name: (identifier) @name) @definition.function +(val_definition pattern: (identifier) @name) @definition.constant +(var_definition pattern: (identifier) @name) @definition.constant +(type_definition name: (type_identifier) @name) @definition.type +(given_definition name: (identifier) @name) @definition.constant diff --git a/runtime/queries/swift/tags.scm b/runtime/queries/swift/tags.scm new file mode 100644 index 00000000..fb5adce6 --- /dev/null +++ b/runtime/queries/swift/tags.scm @@ -0,0 +1,10 @@ +(class_declaration "class" name: (type_identifier) @name) @definition.class +(class_declaration "struct" name: (type_identifier) @name) @definition.struct +(class_declaration "enum" name: (type_identifier) @name) @definition.enum +(class_declaration "extension" name: (user_type (type_identifier) @name)) @definition.class +(protocol_declaration name: (type_identifier) @name) @definition.interface +(typealias_declaration name: (type_identifier) @name) @definition.type +(function_declaration name: (simple_identifier) @name) @definition.function +(protocol_function_declaration name: (simple_identifier) @name) @definition.function +(property_declaration + name: (pattern bound_identifier: (simple_identifier) @name)) @definition.constant diff --git a/runtime/queries/zig/tags.scm b/runtime/queries/zig/tags.scm new file mode 100644 index 00000000..1526a73e --- /dev/null +++ b/runtime/queries/zig/tags.scm @@ -0,0 +1,26 @@ +(function_declaration + name: (identifier) @name) @definition.function + +; `test "name" { ... }` +(test_declaration + (string (string_content) @name)) @definition.function + +; `const Name = struct/enum/union/opaque/error { ... }` +(variable_declaration + (identifier) @name + (struct_declaration)) @definition.struct +(variable_declaration + (identifier) @name + (enum_declaration)) @definition.enum +(variable_declaration + (identifier) @name + (union_declaration)) @definition.struct +(variable_declaration + (identifier) @name + (opaque_declaration)) @definition.struct +(variable_declaration + (identifier) @name + (error_set_declaration)) @definition.enum + +(container_field + name: (identifier) @name) @definition.field -- 2.51.2