From 057aa1367fd9227cebd36b9df3ec7882c3f47089 Mon Sep 17 00:00:00 2001 From: Elifarley Date: Wed, 11 Dec 2024 19:33:16 -0300 Subject: [PATCH] Tree-Sitter queries moved to folder structure for better organization --- pyproject.toml | 2 +- .../tree_sitter_identifier_finder.py | 4 +- .../tree_sitter_identifier_queries.py | 1103 +---------------- src/tree-sitter-queries/TODO/TODO.txt | 845 +++++++++++++ src/tree-sitter-queries/kotlin/basedef.scm | 3 + src/tree-sitter-queries/kotlin/classes.scm | 28 + src/tree-sitter-queries/kotlin/common.scm | 0 src/tree-sitter-queries/kotlin/functions.scm | 21 + src/tree-sitter-queries/python/basedef.scm | 3 + src/tree-sitter-queries/python/classes.scm | 37 + src/tree-sitter-queries/python/common.scm | 6 + src/tree-sitter-queries/python/functions.scm | 14 + 12 files changed, 977 insertions(+), 1089 deletions(-) create mode 100644 src/tree-sitter-queries/TODO/TODO.txt create mode 100644 src/tree-sitter-queries/kotlin/basedef.scm create mode 100644 src/tree-sitter-queries/kotlin/classes.scm create mode 100644 src/tree-sitter-queries/kotlin/common.scm create mode 100644 src/tree-sitter-queries/kotlin/functions.scm create mode 100644 src/tree-sitter-queries/python/basedef.scm create mode 100644 src/tree-sitter-queries/python/classes.scm create mode 100644 src/tree-sitter-queries/python/common.scm create mode 100644 src/tree-sitter-queries/python/functions.scm diff --git a/pyproject.toml b/pyproject.toml index d55214e..8a2cace 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -64,7 +64,7 @@ version_scheme = "post-release" [tool.setuptools.packages.find] where = ["src"] -include = ["version", "cedarscript_editor*", "text_manipulation*"] +include = ["version", "tree-sitter-queries", "cedarscript_editor*", "text_manipulation*"] exclude = ["cedarscript_ast_parser.tests*"] namespaces = false diff --git a/src/cedarscript_editor/tree_sitter_identifier_finder.py b/src/cedarscript_editor/tree_sitter_identifier_finder.py index 94deb48..586e0ef 100644 --- a/src/cedarscript_editor/tree_sitter_identifier_finder.py +++ b/src/cedarscript_editor/tree_sitter_identifier_finder.py @@ -10,7 +10,7 @@ from text_manipulation import IdentifierFinder from tree_sitter_languages import get_language, get_parser from pylibtreesitter import nodes_by_type_suffix -from .tree_sitter_identifier_queries import LANG_TO_TREE_SITTER_QUERY +from .tree_sitter_identifier_queries import get_query """ Parser for extracting identifier information from source code using tree-sitter. @@ -48,7 +48,7 @@ def __init__(self, fname: str, source: str | Sequence[str], parent_restriction: self.query_info = None _log.info(f"[TreeSitterIdentifierFinder] NO LANGUAGE for `{fname}`") return - self.query_info: dict[str, dict[str, str]] = LANG_TO_TREE_SITTER_QUERY[langstr] + self.query_info: dict[str, str] = get_query(langstr) self.language = get_language(langstr) _log.info(f"[TreeSitterIdentifierFinder] Selected {self.language}") self.tree = get_parser(langstr).parse(bytes(source, "utf-8")) diff --git a/src/cedarscript_editor/tree_sitter_identifier_queries.py b/src/cedarscript_editor/tree_sitter_identifier_queries.py index ad9f2c5..1f58fc3 100644 --- a/src/cedarscript_editor/tree_sitter_identifier_queries.py +++ b/src/cedarscript_editor/tree_sitter_identifier_queries.py @@ -30,1094 +30,25 @@ # except KeyError: # return -_common_template = """ - ; Common pattern for body and docstring capture - body: (block - . - (expression_statement - (string) @{type}.docstring)? - ) @{type}.body -""" +from importlib.resources import files -_definition_base_template = """ - name: (identifier) @_{type}_name - (#match? @_{type}_name "^{{name}}$") - (#set! role name) -""" +_tree_sitter_queries = files("tree-sitter-queries") -LANG_TO_TREE_SITTER_QUERY = { - "python": { - 'function': """ -; Function Definitions -(function_definition - {definition_base} - {common_body} -) @function.definition -; Decorated Function Definitions -(decorated_definition - (decorator)+ @function.decorator - (function_definition - {definition_base} - {common_body} - ) @function.definition -) -""".format( - definition_base=_definition_base_template.format(type="function"), - common_body=_common_template.format(type="function") - ), - - 'class': """ -; Class Definitions -(class_definition - {definition_base} - {common_body} -) @class.definition - -; Decorated Class Definitions -(decorated_definition - (decorator)+ @class.decorator - (class_definition - {definition_base} - {common_body} - ) @class.definition -) - -; Nested Classes -(class_definition - body: (block - (class_definition - {definition_base} - {common_body} - ) @class.definition - ) -) - -; Decorated Nested Classes -(class_definition - body: (block - (decorated_definition - (decorator)+ @class.decorator - (class_definition - {definition_base} - {common_body} - ) @class.definition - ) - ) -) -""".format( - definition_base=_definition_base_template.format(type="class"), - common_body=_common_template.format(type="class") +def get_query(langstr: str) -> dict[str, str]: + basedir = _tree_sitter_queries / langstr + if not basedir.exists(): + raise KeyError(f"Missing language dir: {basedir}") + base_template = (basedir / "basedef.scm").read_text(encoding='utf-8') + common_template = (basedir / "common.scm").read_text(encoding='utf-8') + templates2 = { + "function": (basedir / "functions.scm").read_text(encoding='utf-8'), + "class": (basedir / "classes.scm").read_text(encoding='utf-8') + } + return { + _type: templates2[_type].format( + definition_base=base_template.format(type=_type), + common_body=common_template.format(type=_type) ) - }, "kotlin": { - 'function': """ - ; Regular function definitions with optional annotations and KDoc - (function_declaration - (modifiers (annotation) @function.decorator)* - name: (simple_identifier) @_function_name - body: (function_body) @function.body) @function.definition - - (function_declaration - (modifiers (annotation) @function.decorator)* - (comment) @function.docstring - name: (simple_identifier) @_function_name - body: (function_body) @function.body) @function.definition - - ; Function definitions with type parameters - (function_declaration - (modifiers (annotation) @function.decorator)* - name: (simple_identifier) @_function_name - type_parameters: (type_parameters) - body: (function_body) @function.body) @function.definition - - (function_declaration - (modifiers (annotation) @function.decorator)* - (comment) @function.docstring - name: (simple_identifier) @_function_name - type_parameters: (type_parameters) - body: (function_body) @function.body) @function.definition - - ; Method definitions in classes - (class_body - (function_declaration - (modifiers (annotation) @function.decorator)* - name: (simple_identifier) @_function_name - body: (function_body) @function.body) @function.definition) - - (class_body - (function_declaration - (modifiers (annotation) @function.decorator)* - (comment) @function.docstring - name: (simple_identifier) @_function_name - body: (function_body) @function.body) @function.definition) - - ; Constructor definitions - (class_body - (constructor_declaration - (modifiers (annotation) @function.decorator)* - body: (function_body) @function.body) @function.definition) - - (class_body - (constructor_declaration - (modifiers (annotation) @function.decorator)* - (comment) @function.docstring - body: (function_body) @function.body) @function.definition) - - ; Extension functions - (function_declaration - (modifiers (annotation) @function.decorator)* - receiver_type: (type_reference) - name: (simple_identifier) @_function_name - body: (function_body) @function.body) @function.definition - - (function_declaration - (modifiers (annotation) @function.decorator)* - (comment) @function.docstring - receiver_type: (type_reference) - name: (simple_identifier) @_function_name - body: (function_body) @function.body) @function.definition - - ; Backticked function names - (function_declaration - (modifiers (annotation) @function.decorator)* - name: (simple_identifier (identifier_string)) @_function_name - body: (function_body) @function.body) @function.definition - - (function_declaration - (modifiers (annotation) @function.decorator)* - (comment) @function.docstring - name: (simple_identifier (identifier_string)) @_function_name - body: (function_body) @function.body) @function.definition - - ; Lambda expressions - (lambda_literal - body: (_) @function.body) @function.definition - """, - - 'class': """ - ; Regular class definitions with optional annotations and KDoc - (class_declaration - (modifiers (annotation) @class.decorator)* - name: (type_identifier) @_class_name - body: (class_body) @class.body) @class.definition - - (class_declaration - (modifiers (annotation) @class.decorator)* - (comment) @class.docstring - name: (type_identifier) @_class_name - body: (class_body) @class.body) @class.definition - - ; Interface definitions - (interface_declaration - (modifiers (annotation) @class.decorator)* - name: (type_identifier) @_class_name - body: (class_body) @class.body) @class.definition - - (interface_declaration - (modifiers (annotation) @class.decorator)* - (comment) @class.docstring - name: (type_identifier) @_class_name - body: (class_body) @class.body) @class.definition - - ; Object declarations - (object_declaration - (modifiers (annotation) @class.decorator)* - name: (type_identifier) @_class_name - body: (class_body) @class.body) @class.definition - - (object_declaration - (modifiers (annotation) @class.decorator)* - (comment) @class.docstring - name: (type_identifier) @_class_name - body: (class_body) @class.body) @class.definition - - ; Nested class definitions - (class_body - (class_declaration - (modifiers (annotation) @class.decorator)* - name: (type_identifier) @_class_name - body: (class_body) @class.body) @class.definition) - - (class_body - (class_declaration - (modifiers (annotation) @class.decorator)* - (comment) @class.docstring - name: (type_identifier) @_class_name - body: (class_body) @class.body) @class.definition) - - ; Data class definitions - (class_declaration - (modifiers (annotation) @class.decorator)* - "data" - name: (type_identifier) @_class_name - body: (class_body) @class.body) @class.definition - - (class_declaration - (modifiers (annotation) @class.decorator)* - (comment) @class.docstring - "data" - name: (type_identifier) @_class_name - body: (class_body) @class.body) @class.definition - - ; Enum class definitions - (class_declaration - (modifiers (annotation) @class.decorator)* - "enum" - name: (type_identifier) @_class_name - body: (class_body) @class.body) @class.definition - - (class_declaration - (modifiers (annotation) @class.decorator)* - (comment) @class.docstring - "enum" - name: (type_identifier) @_class_name - body: (class_body) @class.body) @class.definition - """ - }, - - "php": { - 'function': """ - ; Regular function definitions with optional attributes and docstring - (function_definition - (attribute_list)? @function.decorator - name: (name) @function.name - body: (compound_statement) @function.body) @function.definition - - (function_definition - (attribute_list)? @function.decorator - (comment) @function.docstring - name: (name) @function.name - body: (compound_statement) @function.body) @function.definition - - ; Method definitions in classes with optional attributes and docstring - (method_declaration - (attribute_list)? @function.decorator - name: (name) @function.name - body: (compound_statement) @function.body) @function.definition - - (method_declaration - (attribute_list)? @function.decorator - (comment) @function.docstring - name: (name) @function.name - body: (compound_statement) @function.body) @function.definition - - ; Anonymous functions - (anonymous_function - (attribute_list)? @function.decorator - body: (compound_statement) @function.body) @function.definition - - ; Arrow functions - (arrow_function - (attribute_list)? @function.decorator - body: (expression) @function.body) @function.definition - """, - - 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ - ; Regular class definitions with optional attributes and docstring - (class_declaration - (attribute_list)? @class.decorator - name: (name) @class.name - body: (declaration_list) @class.body) @class.definition - - (class_declaration - (attribute_list)? @class.decorator - (comment) @class.docstring - name: (name) @class.name - body: (declaration_list) @class.body) @class.definition - - ; Interface definitions - (interface_declaration - (attribute_list)? @class.decorator - name: (name) @class.name - body: (declaration_list) @class.body) @class.definition - - (interface_declaration - (attribute_list)? @class.decorator - (comment) @class.docstring - name: (name) @class.name - body: (declaration_list) @class.body) @class.definition - - ; Trait definitions - (trait_declaration - (attribute_list)? @class.decorator - name: (name) @class.name - body: (declaration_list) @class.body) @class.definition - - (trait_declaration - (attribute_list)? @class.decorator - (comment) @class.docstring - name: (name) @class.name - body: (declaration_list) @class.body) @class.definition - - ; Enum definitions - (enum_declaration - (attribute_list)? @class.decorator - name: (name) @class.name - body: (enum_declaration_list) @class.body) @class.definition - - (enum_declaration - (attribute_list)? @class.decorator - (comment) @class.docstring - name: (name) @class.name - body: (enum_declaration_list) @class.body) @class.definition - """) - }, - - "rust": { - 'function': """ - ; Function definitions with optional attributes, visibility, and docstring - (function_item - (attribute_item)? @function.decorator - (visibility_modifier)? - (function_modifiers)? - "fn" - name: (identifier) @function.name - parameters: (parameters) - return_type: (_)? - body: (block) @function.body) @function.definition - - (function_item - (attribute_item)? @function.decorator - (visibility_modifier)? - (function_modifiers)? - (line_comment)+ @function.docstring - "fn" - name: (identifier) @function.name - parameters: (parameters) - return_type: (_)? - body: (block) @function.body) @function.definition - - ; Method definitions in impl blocks - (impl_item - (attribute_item)? @function.decorator - (visibility_modifier)? - (function_modifiers)? - "fn" - name: (identifier) @function.name - parameters: (parameters) - return_type: (_)? - body: (block) @function.body) @function.definition - - (impl_item - (attribute_item)? @function.decorator - (visibility_modifier)? - (function_modifiers)? - (line_comment)+ @function.docstring - "fn" - name: (identifier) @function.name - parameters: (parameters) - return_type: (_)? - body: (block) @function.body) @function.definition - - ; Async function definitions - (function_item - (attribute_item)? @function.decorator - (visibility_modifier)? - "async" - "fn" - name: (identifier) @function.name - parameters: (parameters) - return_type: (_)? - body: (block) @function.body) @function.definition - - ; Const function definitions - (function_item - (attribute_item)? @function.decorator - (visibility_modifier)? - "const" - "fn" - name: (identifier) @function.name - parameters: (parameters) - return_type: (_)? - body: (block) @function.body) @function.definition - """, - - 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ - ; Struct definitions with optional attributes, visibility, and docstring - (struct_item - (attribute_item)? @class.decorator - (visibility_modifier)? - "struct" - name: (type_identifier) @class.name - body: (field_declaration_list)? @class.body) @class.definition - - (struct_item - (attribute_item)? @class.decorator - (visibility_modifier)? - (line_comment)+ @class.docstring - "struct" - name: (type_identifier) @class.name - body: (field_declaration_list)? @class.body) @class.definition - - ; Enum definitions - (enum_item - (attribute_item)? @class.decorator - (visibility_modifier)? - "enum" - name: (type_identifier) @class.name - body: (enum_variant_list) @class.body) @class.definition - - (enum_item - (attribute_item)? @class.decorator - (visibility_modifier)? - (line_comment)+ @class.docstring - "enum" - name: (type_identifier) @class.name - body: (enum_variant_list) @class.body) @class.definition - - ; Trait definitions - (trait_item - (attribute_item)? @class.decorator - (visibility_modifier)? - "trait" - name: (type_identifier) @class.name - body: (declaration_list) @class.body) @class.definition - - (trait_item - (attribute_item)? @class.decorator - (visibility_modifier)? - (line_comment)+ @class.docstring - "trait" - name: (type_identifier) @class.name - body: (declaration_list) @class.body) @class.definition - - ; Union definitions - (union_item - (attribute_item)? @class.decorator - (visibility_modifier)? - "union" - name: (type_identifier) @class.name - body: (field_declaration_list) @class.body) @class.definition - - (union_item - (attribute_item)? @class.decorator - (visibility_modifier)? - (line_comment)+ @class.docstring - "union" - name: (type_identifier) @class.name - body: (field_declaration_list) @class.body) @class.definition - """) - }, - - "go": { - 'function': """ - ; Function declarations with optional docstring - (function_declaration - (comment)* @function.docstring - name: (identifier) @function.name - body: (block) @function.body) @function.definition - - ; Method declarations with optional docstring - (method_declaration - (comment)* @function.docstring - name: (field_identifier) @function.name - body: (block) @function.body) @function.definition - """, - - 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ - ; Struct type definitions with optional docstring - (type_declaration - (type_spec - name: (type_identifier) @class.name - type: (struct_type - (field_declaration_list) @class.body))) @class.definition - - (type_declaration - (comment)* @class.docstring - (type_spec - name: (type_identifier) @class.name - type: (struct_type - (field_declaration_list) @class.body))) @class.definition - - ; Interface type definitions with optional docstring - (type_declaration - (type_spec - name: (type_identifier) @class.name - type: (interface_type - (method_spec_list) @class.body))) @class.definition - - (type_declaration - (comment)* @class.docstring - (type_spec - name: (type_identifier) @class.name - type: (interface_type - (method_spec_list) @class.body))) @class.definition - """) - }, - - "cpp": { - 'function': """ - ; Function definitions - (function_definition - declarator: (function_declarator - declarator: (identifier) @function.name) - body: (compound_statement) @function.body) @function.definition - - ; Method definitions - (function_definition - declarator: (function_declarator - declarator: (field_identifier) @function.name) - body: (compound_statement) @function.body) @function.definition - - ; Constructor definitions - (constructor_or_destructor_definition - declarator: (function_declarator - declarator: (qualified_identifier - name: (identifier) @function.name)) - body: (compound_statement) @function.body) @function.definition - - ; Destructor definitions - (constructor_or_destructor_definition - declarator: (function_declarator - declarator: (destructor_name - (identifier) @function.name)) - body: (compound_statement) @function.body) @function.definition - - ; Operator overloading definitions - (function_definition - declarator: (function_declarator - declarator: (operator_name) @function.name) - body: (compound_statement) @function.body) @function.definition - - ; Lambda expressions - (lambda_expression - body: (compound_statement) @function.body) @function.definition - """, - - 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ - ; Class definitions - (class_specifier - name: (type_identifier) @class.name - body: (field_declaration_list) @class.body) @class.definition - - ; Struct definitions - (struct_specifier - name: (type_identifier) @class.name - body: (field_declaration_list) @class.body) @class.definition - - ; Union definitions - (union_specifier - name: (type_identifier) @class.name - body: (field_declaration_list) @class.body) @class.definition - - ; Enum definitions - (enum_specifier - name: (type_identifier) @class.name - body: (enumerator_list) @class.body) @class.definition - - ; Template class definitions - (template_declaration - (class_specifier - name: (type_identifier) @class.name - body: (field_declaration_list) @class.body)) @class.definition - - ; Template struct definitions - (template_declaration - (struct_specifier - name: (type_identifier) @class.name - body: (field_declaration_list) @class.body)) @class.definition - """) - }, - - "c": { - 'function': """ - ; Function definitions - (function_definition - declarator: (function_declarator - declarator: (identifier) @function.name) - body: (compound_statement) @function.body) @function.definition - - ; Function definitions with type qualifiers - (function_definition - type: (type_qualifier) - declarator: (function_declarator - declarator: (identifier) @function.name) - body: (compound_statement) @function.body) @function.definition - - ; Function declarations (prototypes) - (declaration - declarator: (function_declarator - declarator: (identifier) @function.name)) @function.definition - """, - - 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ - ; Struct definitions - (struct_specifier - name: (type_identifier) @class.name - body: (field_declaration_list) @class.body) @class.definition - - ; Union definitions - (union_specifier - name: (type_identifier) @class.name - body: (field_declaration_list) @class.body) @class.definition - - ; Enum definitions - (enum_specifier - name: (type_identifier) @class.name - body: (enumerator_list) @class.body) @class.definition - - ; Typedef struct definitions - (declaration - (type_qualifier)* - "typedef" - (type_qualifier)* - (struct_specifier - name: (type_identifier) @class.name - body: (field_declaration_list) @class.body) - (type_identifier)) @class.definition - - ; Typedef union definitions - (declaration - (type_qualifier)* - "typedef" - (type_qualifier)* - (union_specifier - name: (type_identifier) @class.name - body: (field_declaration_list) @class.body) - (type_identifier)) @class.definition - - ; Typedef enum definitions - (declaration - (type_qualifier)* - "typedef" - (type_qualifier)* - (enum_specifier - name: (type_identifier) @class.name - body: (enumerator_list) @class.body) - (type_identifier)) @class.definition - """) - }, - - "java": { - 'function': """ - ; Method declarations - (method_declaration - (modifiers)? @function.decorator - (_method_header - name: (identifier) @function.name) - body: (block) @function.body) @function.definition - - ; Compact constructor declarations (for records) - (compact_constructor_declaration - (modifiers)? @function.decorator - name: (identifier) @function.name - body: (block) @function.body) @function.definition - - ; Constructor declarations - (constructor_declaration - (modifiers)? @function.decorator - (_constructor_declarator - name: (identifier) @function.name) - body: (constructor_body) @function.body) @function.definition - """, - - 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ - ; Class declarations - (class_declaration - (modifiers)? @class.decorator - "class" - name: (identifier) @class.name - body: (class_body) @class.body) @class.definition - - ; Interface declarations - (interface_declaration - (modifiers)? @class.decorator - "interface" - name: (identifier) @class.name - body: (interface_body) @class.body) @class.definition - - ; Enum declarations - (enum_declaration - (modifiers)? @class.decorator - "enum" - name: (identifier) @class.name - body: (enum_body) @class.body) @class.definition - - ; Record declarations - (record_declaration - (modifiers)? @class.decorator - "record" - name: (identifier) @class.name - body: (class_body) @class.body) @class.definition - - ; Annotation type declarations - (annotation_type_declaration - (modifiers)? @class.decorator - "@interface" - name: (identifier) @class.name - body: (annotation_type_body) @class.body) @class.definition - """) - }, - - "javascript": { - 'function': """ - ; Function declarations - (function_declaration - name: (identifier) @function.name - body: (statement_block) @function.body) @function.definition - - ; Function expressions - (function_expression - name: (identifier)? @function.name - body: (statement_block) @function.body) @function.definition - - ; Arrow functions - (arrow_function - body: [(expression) (statement_block)] @function.body) @function.definition - - ; Method definitions - (method_definition - name: [(property_identifier) (private_property_identifier)] @function.name - body: (statement_block) @function.body) @function.definition - - ; Generator functions - (generator_function_declaration - name: (identifier) @function.name - body: (statement_block) @function.body) @function.definition - - (generator_function - name: (identifier)? @function.name - body: (statement_block) @function.body) @function.definition - - ; Async functions - (function_declaration - "async" - name: (identifier) @function.name - body: (statement_block) @function.body) @function.definition - - (function_expression - "async" - name: (identifier)? @function.name - body: (statement_block) @function.body) @function.definition - - (arrow_function - "async" - body: [(expression) (statement_block)] @function.body) @function.definition - - ; Decorators for class methods - (method_definition - decorator: (decorator)+ @function.decorator - name: [(property_identifier) (private_property_identifier)] @function.name - body: (statement_block) @function.body) @function.definition - """, - - 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ - ; Class declarations - (class_declaration - name: (identifier) @class.name - body: (class_body) @class.body) @class.definition - - ; Class expressions - (class - name: (identifier)? @class.name - body: (class_body) @class.body) @class.definition - - ; Decorators for classes - (class_declaration - decorator: (decorator)+ @class.decorator - name: (identifier) @class.name - body: (class_body) @class.body) @class.definition - - (class - decorator: (decorator)+ @class.decorator - name: (identifier)? @class.name - body: (class_body) @class.body) @class.definition - """) - }, - - "lua": { - 'function': """ - ; Function definitions - (function_definition - "function" - (parameter_list) @function.parameters - (block) @function.body) @function.definition - - ; Local function definitions - (local_function_definition_statement - "local" "function" - (identifier) @function.name - (parameter_list) @function.parameters - (block) @function.body) @function.definition - - ; Function definition statements - (function_definition_statement - "function" - (identifier) @function.name - (parameter_list) @function.parameters - (block) @function.body) @function.definition - - ; Function definition statements with table methods - (function_definition_statement - "function" - ((identifier) @function.name - ":" (identifier) @function.method) - (parameter_list) @function.parameters - (block) @function.body) @function.definition - """, - - 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ - ; Lua doesn't have built-in classes, but tables are often used to simulate them - ; We'll capture table definitions that might represent "classes" - (variable_assignment - (variable_list - (variable) @class.name) - "=" - (expression_list - (table) @class.body)) @class.definition - """) - }, - - "fortran": { - 'function': """ - (function - (function_statement - name: (identifier) @function.name) - body: (_) @function.body) @function.definition - """, - - 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ - (derived_type_definition - (derived_type_statement - name: (_type_name) @class.name) - body: (_) @class.body) @class.definition - """) - }, - - "scala": { - 'function': """ - (function_definition - (annotation)* @function.decorator - (modifiers)? @function.decorator - "def" - name: (_identifier) @function.name - type_parameters: (type_parameters)? - parameters: (parameters)* - return_type: ((_type) @function.return_type)? - body: [ - (indented_block) @function.body - (block) @function.body - (expression) @function.body - ]?) @function.definition - - (function_declaration - (annotation)* @function.decorator - (modifiers)? @function.decorator - "def" - name: (_identifier) @function.name - type_parameters: (type_parameters)? - parameters: (parameters)* - return_type: ((_type) @function.return_type)?) @function.definition - """, - - 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ - (class_definition - (annotation)* @class.decorator - (modifiers)? @class.decorator - "class" - name: (_identifier) @class.name - type_parameters: (type_parameters)? - parameters: (class_parameters)* - (extends_clause)? - (derives_clause)? - body: (template_body)?) @class.definition - - (object_definition - (annotation)* @class.decorator - (modifiers)? @class.decorator - "object" - name: (_identifier) @class.name - (extends_clause)? - (derives_clause)? - body: (template_body)?) @class.definition - - (trait_definition - (annotation)* @class.decorator - (modifiers)? @class.decorator - "trait" - name: (_identifier) @class.name - type_parameters: (type_parameters)? - parameters: (class_parameters)* - (extends_clause)? - (derives_clause)? - body: (template_body)?) @class.definition - - (enum_definition - (annotation)* @class.decorator - "enum" - name: (_identifier) @class.name - type_parameters: (type_parameters)? - parameters: (class_parameters)* - (extends_clause)? - (derives_clause)? - body: (enum_body)) @class.definition - """) - }, - - "c_sharp": { - 'function': """ - ; Method declarations - (method_declaration - (attribute_list)? @function.decorator - (modifier)* @function.decorator - type: (_) - name: (identifier) @function.name - parameters: (parameter_list) - body: (block) @function.body) @function.definition - - ; Constructor declarations - (constructor_declaration - (attribute_list)? @function.decorator - (modifier)* @function.decorator - name: (identifier) @function.name - parameters: (parameter_list) - body: (block) @function.body) @function.definition - - ; Destructor declarations - (destructor_declaration - (attribute_list)? @function.decorator - "extern"? @function.decorator - "~" - name: (identifier) @function.name - parameters: (parameter_list) - body: (block) @function.body) @function.definition - - ; Operator declarations - (operator_declaration - (attribute_list)? @function.decorator - (modifier)* @function.decorator - type: (_) - "operator" - operator: (_) - parameters: (parameter_list) - body: (block) @function.body) @function.definition - - ; Conversion operator declarations - (conversion_operator_declaration - (attribute_list)? @function.decorator - (modifier)* @function.decorator - ("implicit" | "explicit") - "operator" - type: (_) - parameters: (parameter_list) - body: (block) @function.body) @function.definition - - ; Local function statements - (local_function_statement - (attribute_list)? @function.decorator - (modifier)* @function.decorator - type: (_) - name: (identifier) @function.name - parameters: (parameter_list) - body: (block) @function.body) @function.definition - """, - - 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ - ; Class declarations - (class_declaration - (attribute_list)? @class.decorator - (modifier)* @class.decorator - "class" - name: (identifier) @class.name - body: (declaration_list) @class.body) @class.definition - - ; Struct declarations - (struct_declaration - (attribute_list)? @class.decorator - (modifier)* @class.decorator - "struct" - name: (identifier) @class.name - body: (declaration_list) @class.body) @class.definition - - ; Interface declarations - (interface_declaration - (attribute_list)? @class.decorator - (modifier)* @class.decorator - "interface" - name: (identifier) @class.name - body: (declaration_list) @class.body) @class.definition - - ; Enum declarations - (enum_declaration - (attribute_list)? @class.decorator - (modifier)* @class.decorator - "enum" - name: (identifier) @class.name - body: (enum_member_declaration_list) @class.body) @class.definition - - ; Record declarations - (record_declaration - (attribute_list)? @class.decorator - (modifier)* @class.decorator - "record" - name: (identifier) @class.name - body: (declaration_list) @class.body) @class.definition - """) - }, - - "cobol": { - 'function': """ - (function_definition - (function_division - name: (program_name) @function.name) - (environment_division)? - (data_division)? - (procedure_division) @function.body) @function.definition - """, - - 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ - (data_division - (file_section - (file_description - name: (WORD) @class.name - (record_description_list) @class.body))) @class.definition - - (data_division - (working_storage_section - (data_description - level_number: (level_number) - name: (entry_name) @class.name - (repeat ($._data_description_clause))* @class.body))) @class.definition - """) - }, - - "matlab": { - 'function': """ - (function_definition - (function_output)? - name: (identifier) @function.name - (function_arguments)? - (_end_of_line) - (arguments_statement)* - body: (block)? @function.body) @function.definition - - (function_definition - (function_output)? - "get." @function.decorator - name: (identifier) @function.name - (function_arguments)? - (_end_of_line) - (arguments_statement)* - body: (block)? @function.body) @function.definition - - (function_definition - (function_output)? - "set." @function.decorator - name: (identifier) @function.name - (function_arguments)? - (_end_of_line) - (arguments_statement)* - body: (block)? @function.body) @function.definition - """, - - 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ - (class_definition - (attributes)? @class.decorator - name: (identifier) @class.name - (superclasses)? - (_end_of_line) - body: (_ (properties | methods | events | enumeration | ";")*)+ @class.body) @class.definition - """) + for _type in ["function", "class"] } - -} diff --git a/src/tree-sitter-queries/TODO/TODO.txt b/src/tree-sitter-queries/TODO/TODO.txt new file mode 100644 index 0000000..b298f4d --- /dev/null +++ b/src/tree-sitter-queries/TODO/TODO.txt @@ -0,0 +1,845 @@ +LANG_TO_TREE_SITTER_QUERY = { + "php": { + 'function': """ + ; Regular function definitions with optional attributes and docstring + (function_definition + (attribute_list)? @function.decorator + name: (name) @function.name + body: (compound_statement) @function.body) @function.definition + + (function_definition + (attribute_list)? @function.decorator + (comment) @function.docstring + name: (name) @function.name + body: (compound_statement) @function.body) @function.definition + + ; Method definitions in classes with optional attributes and docstring + (method_declaration + (attribute_list)? @function.decorator + name: (name) @function.name + body: (compound_statement) @function.body) @function.definition + + (method_declaration + (attribute_list)? @function.decorator + (comment) @function.docstring + name: (name) @function.name + body: (compound_statement) @function.body) @function.definition + + ; Anonymous functions + (anonymous_function + (attribute_list)? @function.decorator + body: (compound_statement) @function.body) @function.definition + + ; Arrow functions + (arrow_function + (attribute_list)? @function.decorator + body: (expression) @function.body) @function.definition + """, + + 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ + ; Regular class definitions with optional attributes and docstring + (class_declaration + (attribute_list)? @class.decorator + name: (name) @class.name + body: (declaration_list) @class.body) @class.definition + + (class_declaration + (attribute_list)? @class.decorator + (comment) @class.docstring + name: (name) @class.name + body: (declaration_list) @class.body) @class.definition + + ; Interface definitions + (interface_declaration + (attribute_list)? @class.decorator + name: (name) @class.name + body: (declaration_list) @class.body) @class.definition + + (interface_declaration + (attribute_list)? @class.decorator + (comment) @class.docstring + name: (name) @class.name + body: (declaration_list) @class.body) @class.definition + + ; Trait definitions + (trait_declaration + (attribute_list)? @class.decorator + name: (name) @class.name + body: (declaration_list) @class.body) @class.definition + + (trait_declaration + (attribute_list)? @class.decorator + (comment) @class.docstring + name: (name) @class.name + body: (declaration_list) @class.body) @class.definition + + ; Enum definitions + (enum_declaration + (attribute_list)? @class.decorator + name: (name) @class.name + body: (enum_declaration_list) @class.body) @class.definition + + (enum_declaration + (attribute_list)? @class.decorator + (comment) @class.docstring + name: (name) @class.name + body: (enum_declaration_list) @class.body) @class.definition + """) + }, + + "rust": { + 'function': """ + ; Function definitions with optional attributes, visibility, and docstring + (function_item + (attribute_item)? @function.decorator + (visibility_modifier)? + (function_modifiers)? + "fn" + name: (identifier) @function.name + parameters: (parameters) + return_type: (_)? + body: (block) @function.body) @function.definition + + (function_item + (attribute_item)? @function.decorator + (visibility_modifier)? + (function_modifiers)? + (line_comment)+ @function.docstring + "fn" + name: (identifier) @function.name + parameters: (parameters) + return_type: (_)? + body: (block) @function.body) @function.definition + + ; Method definitions in impl blocks + (impl_item + (attribute_item)? @function.decorator + (visibility_modifier)? + (function_modifiers)? + "fn" + name: (identifier) @function.name + parameters: (parameters) + return_type: (_)? + body: (block) @function.body) @function.definition + + (impl_item + (attribute_item)? @function.decorator + (visibility_modifier)? + (function_modifiers)? + (line_comment)+ @function.docstring + "fn" + name: (identifier) @function.name + parameters: (parameters) + return_type: (_)? + body: (block) @function.body) @function.definition + + ; Async function definitions + (function_item + (attribute_item)? @function.decorator + (visibility_modifier)? + "async" + "fn" + name: (identifier) @function.name + parameters: (parameters) + return_type: (_)? + body: (block) @function.body) @function.definition + + ; Const function definitions + (function_item + (attribute_item)? @function.decorator + (visibility_modifier)? + "const" + "fn" + name: (identifier) @function.name + parameters: (parameters) + return_type: (_)? + body: (block) @function.body) @function.definition + """, + + 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ + ; Struct definitions with optional attributes, visibility, and docstring + (struct_item + (attribute_item)? @class.decorator + (visibility_modifier)? + "struct" + name: (type_identifier) @class.name + body: (field_declaration_list)? @class.body) @class.definition + + (struct_item + (attribute_item)? @class.decorator + (visibility_modifier)? + (line_comment)+ @class.docstring + "struct" + name: (type_identifier) @class.name + body: (field_declaration_list)? @class.body) @class.definition + + ; Enum definitions + (enum_item + (attribute_item)? @class.decorator + (visibility_modifier)? + "enum" + name: (type_identifier) @class.name + body: (enum_variant_list) @class.body) @class.definition + + (enum_item + (attribute_item)? @class.decorator + (visibility_modifier)? + (line_comment)+ @class.docstring + "enum" + name: (type_identifier) @class.name + body: (enum_variant_list) @class.body) @class.definition + + ; Trait definitions + (trait_item + (attribute_item)? @class.decorator + (visibility_modifier)? + "trait" + name: (type_identifier) @class.name + body: (declaration_list) @class.body) @class.definition + + (trait_item + (attribute_item)? @class.decorator + (visibility_modifier)? + (line_comment)+ @class.docstring + "trait" + name: (type_identifier) @class.name + body: (declaration_list) @class.body) @class.definition + + ; Union definitions + (union_item + (attribute_item)? @class.decorator + (visibility_modifier)? + "union" + name: (type_identifier) @class.name + body: (field_declaration_list) @class.body) @class.definition + + (union_item + (attribute_item)? @class.decorator + (visibility_modifier)? + (line_comment)+ @class.docstring + "union" + name: (type_identifier) @class.name + body: (field_declaration_list) @class.body) @class.definition + """) + }, + + "go": { + 'function': """ + ; Function declarations with optional docstring + (function_declaration + (comment)* @function.docstring + name: (identifier) @function.name + body: (block) @function.body) @function.definition + + ; Method declarations with optional docstring + (method_declaration + (comment)* @function.docstring + name: (field_identifier) @function.name + body: (block) @function.body) @function.definition + """, + + 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ + ; Struct type definitions with optional docstring + (type_declaration + (type_spec + name: (type_identifier) @class.name + type: (struct_type + (field_declaration_list) @class.body))) @class.definition + + (type_declaration + (comment)* @class.docstring + (type_spec + name: (type_identifier) @class.name + type: (struct_type + (field_declaration_list) @class.body))) @class.definition + + ; Interface type definitions with optional docstring + (type_declaration + (type_spec + name: (type_identifier) @class.name + type: (interface_type + (method_spec_list) @class.body))) @class.definition + + (type_declaration + (comment)* @class.docstring + (type_spec + name: (type_identifier) @class.name + type: (interface_type + (method_spec_list) @class.body))) @class.definition + """) + }, + + "cpp": { + 'function': """ + ; Function definitions + (function_definition + declarator: (function_declarator + declarator: (identifier) @function.name) + body: (compound_statement) @function.body) @function.definition + + ; Method definitions + (function_definition + declarator: (function_declarator + declarator: (field_identifier) @function.name) + body: (compound_statement) @function.body) @function.definition + + ; Constructor definitions + (constructor_or_destructor_definition + declarator: (function_declarator + declarator: (qualified_identifier + name: (identifier) @function.name)) + body: (compound_statement) @function.body) @function.definition + + ; Destructor definitions + (constructor_or_destructor_definition + declarator: (function_declarator + declarator: (destructor_name + (identifier) @function.name)) + body: (compound_statement) @function.body) @function.definition + + ; Operator overloading definitions + (function_definition + declarator: (function_declarator + declarator: (operator_name) @function.name) + body: (compound_statement) @function.body) @function.definition + + ; Lambda expressions + (lambda_expression + body: (compound_statement) @function.body) @function.definition + """, + + 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ + ; Class definitions + (class_specifier + name: (type_identifier) @class.name + body: (field_declaration_list) @class.body) @class.definition + + ; Struct definitions + (struct_specifier + name: (type_identifier) @class.name + body: (field_declaration_list) @class.body) @class.definition + + ; Union definitions + (union_specifier + name: (type_identifier) @class.name + body: (field_declaration_list) @class.body) @class.definition + + ; Enum definitions + (enum_specifier + name: (type_identifier) @class.name + body: (enumerator_list) @class.body) @class.definition + + ; Template class definitions + (template_declaration + (class_specifier + name: (type_identifier) @class.name + body: (field_declaration_list) @class.body)) @class.definition + + ; Template struct definitions + (template_declaration + (struct_specifier + name: (type_identifier) @class.name + body: (field_declaration_list) @class.body)) @class.definition + """) + }, + + "c": { + 'function': """ + ; Function definitions + (function_definition + declarator: (function_declarator + declarator: (identifier) @function.name) + body: (compound_statement) @function.body) @function.definition + + ; Function definitions with type qualifiers + (function_definition + type: (type_qualifier) + declarator: (function_declarator + declarator: (identifier) @function.name) + body: (compound_statement) @function.body) @function.definition + + ; Function declarations (prototypes) + (declaration + declarator: (function_declarator + declarator: (identifier) @function.name)) @function.definition + """, + + 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ + ; Struct definitions + (struct_specifier + name: (type_identifier) @class.name + body: (field_declaration_list) @class.body) @class.definition + + ; Union definitions + (union_specifier + name: (type_identifier) @class.name + body: (field_declaration_list) @class.body) @class.definition + + ; Enum definitions + (enum_specifier + name: (type_identifier) @class.name + body: (enumerator_list) @class.body) @class.definition + + ; Typedef struct definitions + (declaration + (type_qualifier)* + "typedef" + (type_qualifier)* + (struct_specifier + name: (type_identifier) @class.name + body: (field_declaration_list) @class.body) + (type_identifier)) @class.definition + + ; Typedef union definitions + (declaration + (type_qualifier)* + "typedef" + (type_qualifier)* + (union_specifier + name: (type_identifier) @class.name + body: (field_declaration_list) @class.body) + (type_identifier)) @class.definition + + ; Typedef enum definitions + (declaration + (type_qualifier)* + "typedef" + (type_qualifier)* + (enum_specifier + name: (type_identifier) @class.name + body: (enumerator_list) @class.body) + (type_identifier)) @class.definition + """) + }, + + "java": { + 'function': """ + ; Method declarations + (method_declaration + (modifiers)? @function.decorator + (_method_header + name: (identifier) @function.name) + body: (block) @function.body) @function.definition + + ; Compact constructor declarations (for records) + (compact_constructor_declaration + (modifiers)? @function.decorator + name: (identifier) @function.name + body: (block) @function.body) @function.definition + + ; Constructor declarations + (constructor_declaration + (modifiers)? @function.decorator + (_constructor_declarator + name: (identifier) @function.name) + body: (constructor_body) @function.body) @function.definition + """, + + 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ + ; Class declarations + (class_declaration + (modifiers)? @class.decorator + "class" + name: (identifier) @class.name + body: (class_body) @class.body) @class.definition + + ; Interface declarations + (interface_declaration + (modifiers)? @class.decorator + "interface" + name: (identifier) @class.name + body: (interface_body) @class.body) @class.definition + + ; Enum declarations + (enum_declaration + (modifiers)? @class.decorator + "enum" + name: (identifier) @class.name + body: (enum_body) @class.body) @class.definition + + ; Record declarations + (record_declaration + (modifiers)? @class.decorator + "record" + name: (identifier) @class.name + body: (class_body) @class.body) @class.definition + + ; Annotation type declarations + (annotation_type_declaration + (modifiers)? @class.decorator + "@interface" + name: (identifier) @class.name + body: (annotation_type_body) @class.body) @class.definition + """) + }, + + "javascript": { + 'function': """ + ; Function declarations + (function_declaration + name: (identifier) @function.name + body: (statement_block) @function.body) @function.definition + + ; Function expressions + (function_expression + name: (identifier)? @function.name + body: (statement_block) @function.body) @function.definition + + ; Arrow functions + (arrow_function + body: [(expression) (statement_block)] @function.body) @function.definition + + ; Method definitions + (method_definition + name: [(property_identifier) (private_property_identifier)] @function.name + body: (statement_block) @function.body) @function.definition + + ; Generator functions + (generator_function_declaration + name: (identifier) @function.name + body: (statement_block) @function.body) @function.definition + + (generator_function + name: (identifier)? @function.name + body: (statement_block) @function.body) @function.definition + + ; Async functions + (function_declaration + "async" + name: (identifier) @function.name + body: (statement_block) @function.body) @function.definition + + (function_expression + "async" + name: (identifier)? @function.name + body: (statement_block) @function.body) @function.definition + + (arrow_function + "async" + body: [(expression) (statement_block)] @function.body) @function.definition + + ; Decorators for class methods + (method_definition + decorator: (decorator)+ @function.decorator + name: [(property_identifier) (private_property_identifier)] @function.name + body: (statement_block) @function.body) @function.definition + """, + + 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ + ; Class declarations + (class_declaration + name: (identifier) @class.name + body: (class_body) @class.body) @class.definition + + ; Class expressions + (class + name: (identifier)? @class.name + body: (class_body) @class.body) @class.definition + + ; Decorators for classes + (class_declaration + decorator: (decorator)+ @class.decorator + name: (identifier) @class.name + body: (class_body) @class.body) @class.definition + + (class + decorator: (decorator)+ @class.decorator + name: (identifier)? @class.name + body: (class_body) @class.body) @class.definition + """) + }, + + "lua": { + 'function': """ + ; Function definitions + (function_definition + "function" + (parameter_list) @function.parameters + (block) @function.body) @function.definition + + ; Local function definitions + (local_function_definition_statement + "local" "function" + (identifier) @function.name + (parameter_list) @function.parameters + (block) @function.body) @function.definition + + ; Function definition statements + (function_definition_statement + "function" + (identifier) @function.name + (parameter_list) @function.parameters + (block) @function.body) @function.definition + + ; Function definition statements with table methods + (function_definition_statement + "function" + ((identifier) @function.name + ":" (identifier) @function.method) + (parameter_list) @function.parameters + (block) @function.body) @function.definition + """, + + 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ + ; Lua doesn't have built-in classes, but tables are often used to simulate them + ; We'll capture table definitions that might represent "classes" + (variable_assignment + (variable_list + (variable) @class.name) + "=" + (expression_list + (table) @class.body)) @class.definition + """) + }, + + "fortran": { + 'function': """ + (function + (function_statement + name: (identifier) @function.name) + body: (_) @function.body) @function.definition + """, + + 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ + (derived_type_definition + (derived_type_statement + name: (_type_name) @class.name) + body: (_) @class.body) @class.definition + """) + }, + + "scala": { + 'function': """ + (function_definition + (annotation)* @function.decorator + (modifiers)? @function.decorator + "def" + name: (_identifier) @function.name + type_parameters: (type_parameters)? + parameters: (parameters)* + return_type: ((_type) @function.return_type)? + body: [ + (indented_block) @function.body + (block) @function.body + (expression) @function.body + ]?) @function.definition + + (function_declaration + (annotation)* @function.decorator + (modifiers)? @function.decorator + "def" + name: (_identifier) @function.name + type_parameters: (type_parameters)? + parameters: (parameters)* + return_type: ((_type) @function.return_type)?) @function.definition + """, + + 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ + (class_definition + (annotation)* @class.decorator + (modifiers)? @class.decorator + "class" + name: (_identifier) @class.name + type_parameters: (type_parameters)? + parameters: (class_parameters)* + (extends_clause)? + (derives_clause)? + body: (template_body)?) @class.definition + + (object_definition + (annotation)* @class.decorator + (modifiers)? @class.decorator + "object" + name: (_identifier) @class.name + (extends_clause)? + (derives_clause)? + body: (template_body)?) @class.definition + + (trait_definition + (annotation)* @class.decorator + (modifiers)? @class.decorator + "trait" + name: (_identifier) @class.name + type_parameters: (type_parameters)? + parameters: (class_parameters)* + (extends_clause)? + (derives_clause)? + body: (template_body)?) @class.definition + + (enum_definition + (annotation)* @class.decorator + "enum" + name: (_identifier) @class.name + type_parameters: (type_parameters)? + parameters: (class_parameters)* + (extends_clause)? + (derives_clause)? + body: (enum_body)) @class.definition + """) + }, + + "c_sharp": { + 'function': """ + ; Method declarations + (method_declaration + (attribute_list)? @function.decorator + (modifier)* @function.decorator + type: (_) + name: (identifier) @function.name + parameters: (parameter_list) + body: (block) @function.body) @function.definition + + ; Constructor declarations + (constructor_declaration + (attribute_list)? @function.decorator + (modifier)* @function.decorator + name: (identifier) @function.name + parameters: (parameter_list) + body: (block) @function.body) @function.definition + + ; Destructor declarations + (destructor_declaration + (attribute_list)? @function.decorator + "extern"? @function.decorator + "~" + name: (identifier) @function.name + parameters: (parameter_list) + body: (block) @function.body) @function.definition + + ; Operator declarations + (operator_declaration + (attribute_list)? @function.decorator + (modifier)* @function.decorator + type: (_) + "operator" + operator: (_) + parameters: (parameter_list) + body: (block) @function.body) @function.definition + + ; Conversion operator declarations + (conversion_operator_declaration + (attribute_list)? @function.decorator + (modifier)* @function.decorator + ("implicit" | "explicit") + "operator" + type: (_) + parameters: (parameter_list) + body: (block) @function.body) @function.definition + + ; Local function statements + (local_function_statement + (attribute_list)? @function.decorator + (modifier)* @function.decorator + type: (_) + name: (identifier) @function.name + parameters: (parameter_list) + body: (block) @function.body) @function.definition + """, + + 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ + ; Class declarations + (class_declaration + (attribute_list)? @class.decorator + (modifier)* @class.decorator + "class" + name: (identifier) @class.name + body: (declaration_list) @class.body) @class.definition + + ; Struct declarations + (struct_declaration + (attribute_list)? @class.decorator + (modifier)* @class.decorator + "struct" + name: (identifier) @class.name + body: (declaration_list) @class.body) @class.definition + + ; Interface declarations + (interface_declaration + (attribute_list)? @class.decorator + (modifier)* @class.decorator + "interface" + name: (identifier) @class.name + body: (declaration_list) @class.body) @class.definition + + ; Enum declarations + (enum_declaration + (attribute_list)? @class.decorator + (modifier)* @class.decorator + "enum" + name: (identifier) @class.name + body: (enum_member_declaration_list) @class.body) @class.definition + + ; Record declarations + (record_declaration + (attribute_list)? @class.decorator + (modifier)* @class.decorator + "record" + name: (identifier) @class.name + body: (declaration_list) @class.body) @class.definition + """) + }, + + "cobol": { + 'function': """ + (function_definition + (function_division + name: (program_name) @function.name) + (environment_division)? + (data_division)? + (procedure_division) @function.body) @function.definition + """, + + 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ + (data_division + (file_section + (file_description + name: (WORD) @class.name + (record_description_list) @class.body))) @class.definition + + (data_division + (working_storage_section + (data_description + level_number: (level_number) + name: (entry_name) @class.name + (repeat ($._data_description_clause))* @class.body))) @class.definition + """) + }, + + "matlab": { + 'function': """ + (function_definition + (function_output)? + name: (identifier) @function.name + (function_arguments)? + (_end_of_line) + (arguments_statement)* + body: (block)? @function.body) @function.definition + + (function_definition + (function_output)? + "get." @function.decorator + name: (identifier) @function.name + (function_arguments)? + (_end_of_line) + (arguments_statement)* + body: (block)? @function.body) @function.definition + + (function_definition + (function_output)? + "set." @function.decorator + name: (identifier) @function.name + (function_arguments)? + (_end_of_line) + (arguments_statement)* + body: (block)? @function.body) @function.definition + """, + + 'class': ("class.definition", "class.name", "class.body", "class.docstring", "class.decorator", """ + (class_definition + (attributes)? @class.decorator + name: (identifier) @class.name + (superclasses)? + (_end_of_line) + body: (_ (properties | methods | events | enumeration | ";")*)+ @class.body) @class.definition + """) + } \ No newline at end of file diff --git a/src/tree-sitter-queries/kotlin/basedef.scm b/src/tree-sitter-queries/kotlin/basedef.scm new file mode 100644 index 0000000..3945591 --- /dev/null +++ b/src/tree-sitter-queries/kotlin/basedef.scm @@ -0,0 +1,3 @@ +name: (simple_identifier) @_{type}_name +(#match? @_{type}_name "^{{name}}$") +(#set! role name) diff --git a/src/tree-sitter-queries/kotlin/classes.scm b/src/tree-sitter-queries/kotlin/classes.scm new file mode 100644 index 0000000..2514261 --- /dev/null +++ b/src/tree-sitter-queries/kotlin/classes.scm @@ -0,0 +1,28 @@ +; Regular class definitions with optional annotations and KDoc +(class_declaration + (modifiers (annotation) )* @class.decorator + (comment)? @class.docstring + ["data" "enum"]? @class.subtype + {definition_base} + body: (class_body) @class.body +) @class.definition + +; Interface definitions +(interface_declaration + (modifiers (annotation) @class.decorator)* + (comment)? @class.docstring + name: (type_identifier) @_class_name + (#match? @_class_name "^{{name}}$") + (#set! role name) + body: (class_body) @class.body +) @class.definition + +; Object declarations +(object_declaration + (modifiers (annotation) @class.decorator)* + (comment)? @class.docstring + name: (type_identifier) @_class_name + (#match? @_class_name "^{{name}}$") + (#set! role name) + body: (class_body) @class.body +) @class.definition diff --git a/src/tree-sitter-queries/kotlin/common.scm b/src/tree-sitter-queries/kotlin/common.scm new file mode 100644 index 0000000..e69de29 diff --git a/src/tree-sitter-queries/kotlin/functions.scm b/src/tree-sitter-queries/kotlin/functions.scm new file mode 100644 index 0000000..462f3d1 --- /dev/null +++ b/src/tree-sitter-queries/kotlin/functions.scm @@ -0,0 +1,21 @@ +(function_declaration + (comment)? @function.docstring + (modifiers (annotation) )* @function.decorator + (receiver_type: (type_reference))? @function.receiver + (comment)? @function.docstring + {definition_base} + (type_parameters: (type_parameters))? @function.type_parameters + body: (function_body) @function.body +) @function.definition + +; Constructor definitions +(constructor_declaration + (modifiers (annotation) )* @function.decorator + (comment)? @function.docstring + body: (function_body) @function.body +) @function.definition + +; Lambda expressions +(lambda_literal + body: (_) @function.body +) @function.definition \ No newline at end of file diff --git a/src/tree-sitter-queries/python/basedef.scm b/src/tree-sitter-queries/python/basedef.scm new file mode 100644 index 0000000..cd512a5 --- /dev/null +++ b/src/tree-sitter-queries/python/basedef.scm @@ -0,0 +1,3 @@ +name: (identifier) @_{type}_name +(#match? @_{type}_name "^{{name}}$") +(#set! role name) diff --git a/src/tree-sitter-queries/python/classes.scm b/src/tree-sitter-queries/python/classes.scm new file mode 100644 index 0000000..1a8fc49 --- /dev/null +++ b/src/tree-sitter-queries/python/classes.scm @@ -0,0 +1,37 @@ +; Class Definitions +(class_definition + {definition_base} + {common_body} +) @class.definition + +; Decorated Class Definitions +(decorated_definition + (decorator)+ @class.decorator + (class_definition + {definition_base} + {common_body} + ) @class.definition +) + +; Nested Classes +(class_definition + body: (block + (class_definition + {definition_base} + {common_body} + ) @class.definition + ) +) + +; Decorated Nested Classes +(class_definition + body: (block + (decorated_definition + (decorator)+ @class.decorator + (class_definition + {definition_base} + {common_body} + ) @class.definition + ) + ) +) diff --git a/src/tree-sitter-queries/python/common.scm b/src/tree-sitter-queries/python/common.scm new file mode 100644 index 0000000..8d196ab --- /dev/null +++ b/src/tree-sitter-queries/python/common.scm @@ -0,0 +1,6 @@ +; Common pattern for body and docstring capture +body: (block + . + (expression_statement + (string) @{type}.docstring)? + ) @{type}.body diff --git a/src/tree-sitter-queries/python/functions.scm b/src/tree-sitter-queries/python/functions.scm new file mode 100644 index 0000000..76d1912 --- /dev/null +++ b/src/tree-sitter-queries/python/functions.scm @@ -0,0 +1,14 @@ +; Function Definitions +(function_definition + {definition_base} + {common_body} +) @function.definition + +; Decorated Function Definitions +(decorated_definition + (decorator)+ @function.decorator + (function_definition + {definition_base} + {common_body} + ) @function.definition +)