diff --git a/.gitignore b/.gitignore index 3983192..8c6ae29 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,11 @@ /src/version/_version.py src/*.egg-info +__pycache__ dist build out +.venv +.env .coverage .*.history* *.tags.cache* diff --git a/README.md b/README.md index e594511..cda89bc 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![PyPI version](https://badge.fury.io/py/cedarscript-editor.svg)](https://pypi.org/project/cedarscript-editor/) [![Python Versions](https://img.shields.io/pypi/pyversions/cedarscript-editor.svg)](https://pypi.org/project/cedarscript-editor/) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) -[![AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0) +[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) `CEDARScript Editor (Python)` is a [CEDARScript](https://bit.ly/cedarscript) runtime for interpreting `CEDARScript` scripts and performing code analysis and modification operations on a codebase. diff --git a/pyproject.toml b/pyproject.toml index d55214e..da22f44 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,7 @@ classifiers = [ keywords = ["cedarscript", "code-editing", "refactoring", "code-analysis", "sql-like", "ai-assisted-development"] dependencies = [ "orgecc-pylib>=0.1.3", - "cedarscript-ast-parser>=0.6.1", + "cedarscript-ast-parser>=0.7.0", "grep-ast==0.4.1", # https://github.com/tree-sitter/py-tree-sitter/issues/303 # https://github.com/grantjenks/py-tree-sitter-languages/issues/64 @@ -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 +) diff --git a/tests/corpus/chat.make-top-level-from-method.1/chat.xml b/tests/corpus/chat.make-top-level-from-method.1/chat.xml index 0e22884..9fd81e1 100644 --- a/tests/corpus/chat.make-top-level-from-method.1/chat.xml +++ b/tests/corpus/chat.make-top-level-from-method.1/chat.xml @@ -11,14 +11,14 @@ Here's my plan to implement the requested changes: Here's the CEDARScript script: ```CEDARScript --- 1. Move the `_candidate()` method from the `A` class, placing it at the top level, just before the line where its class starts +# 1. Move the `_candidate()` method from the `A` class, placing it at the top level, just before the line where its class starts UPDATE CLASS "A" FROM FILE "main.py" MOVE FUNCTION "_candidate" INSERT BEFORE CLASS "A" RELATIVE INDENTATION 0; --- 2. Update the copied function to remove references to `self` +# 2. Update the copied function to remove references to `self` UPDATE FUNCTION "_candidate" FROM FILE "main.py" REPLACE LINE "def _candidate(self, a, b, c):" @@ -26,7 +26,7 @@ WITH CONTENT ''' @0:def _candidate(a, b, c): '''; --- 3. Update ALL call sites of the method `_candidate()` to call the new top-level function with the same name +# 3. Update ALL call sites of the method `_candidate()` to call the new top-level function with the same name UPDATE FUNCTION "_check" FROM FILE "main.py" REPLACE LINE "self._candidate(" diff --git a/tests/corpus/move.decorated-method/chat.xml b/tests/corpus/move.decorated-method/chat.xml index 1ffa66e..e81bef5 100644 --- a/tests/corpus/move.decorated-method/chat.xml +++ b/tests/corpus/move.decorated-method/chat.xml @@ -1,13 +1,13 @@ ```CEDARScript --- 1. Move the `get_fault_text` method from the `SpyderKernel` class to be a top-level function +# 1. Move the `get_fault_text` method from the `SpyderKernel` class to be a top-level function UPDATE METHOD "SpyderKernel.get_fault_text" FROM FILE "1.py" MOVE WHOLE INSERT BEFORE CLASS "SpyderKernel" RELATIVE INDENTATION 0; --- 2. Update the copied function to remove references to `self` +# 2. Update the copied function to remove references to `self` UPDATE FUNCTION "get_fault_text" FROM FILE r"1.py" REPLACE WHOLE WITH CASE diff --git a/tests/corpus/move.double-decorated-method/chat.xml b/tests/corpus/move.double-decorated-method/chat.xml index 1ffa66e..e81bef5 100644 --- a/tests/corpus/move.double-decorated-method/chat.xml +++ b/tests/corpus/move.double-decorated-method/chat.xml @@ -1,13 +1,13 @@ ```CEDARScript --- 1. Move the `get_fault_text` method from the `SpyderKernel` class to be a top-level function +# 1. Move the `get_fault_text` method from the `SpyderKernel` class to be a top-level function UPDATE METHOD "SpyderKernel.get_fault_text" FROM FILE "1.py" MOVE WHOLE INSERT BEFORE CLASS "SpyderKernel" RELATIVE INDENTATION 0; --- 2. Update the copied function to remove references to `self` +# 2. Update the copied function to remove references to `self` UPDATE FUNCTION "get_fault_text" FROM FILE r"1.py" REPLACE WHOLE WITH CASE diff --git a/tests/corpus/refactor-benchmark.indentation-size-discovery/chat.xml b/tests/corpus/refactor-benchmark.indentation-size-discovery/chat.xml index 5a6bb51..10b3956 100644 --- a/tests/corpus/refactor-benchmark.indentation-size-discovery/chat.xml +++ b/tests/corpus/refactor-benchmark.indentation-size-discovery/chat.xml @@ -1,22 +1,22 @@ ```CEDARScript --- Try CST-based indentation discovery --- Move the `__get_brackets` method from the `CodeEditor` class, placing it at the top level, just before the line where its class starts +# Try CST-based indentation discovery +# Move the `__get_brackets` method from the `CodeEditor` class, placing it at the top level, just before the line where its class starts UPDATE CLASS "CodeEditor" FROM FILE "codeeditor.py" MOVE METHOD "__get_brackets" INSERT BEFORE CLASS "CodeEditor" RELATIVE INDENTATION 0; --- 1. Move the method to become a top-level function. +# 1. Move the method to become a top-level function. UPDATE CLASS "AutosaveForPlugin" FROM FILE "autosave.py" MOVE METHOD "get_files_to_recover" INSERT BEFORE CLASS "AutosaveForPlugin" RELATIVE INDENTATION 0; --- 1. Move the `adapt_method_mode` method from the `BaseHandler` class, placing it at the top level, just before the line where its class starts +# 1. Move the `adapt_method_mode` method from the `BaseHandler` class, placing it at the top level, just before the line where its class starts UPDATE CLASS "BaseHandler" FROM FILE "base.py" MOVE METHOD "adapt_method_mode" diff --git a/tests/corpus/update.identifier.case-filter/chat.xml b/tests/corpus/update.identifier.case-filter/chat.xml index 9d790ac..25ba5e6 100644 --- a/tests/corpus/update.identifier.case-filter/chat.xml +++ b/tests/corpus/update.identifier.case-filter/chat.xml @@ -20,7 +20,7 @@ REPLACE WHOLE WITH CASE r'\1' END; --- Update the copied function to remove references to `self` +# Update the copied function to remove references to `self` UPDATE FUNCTION "_make_source_table" FROM FILE "analyzer_cli.py" REPLACE WHOLE WITH CASE @@ -29,7 +29,7 @@ REPLACE WHOLE WITH CASE r'''\1''' END; --- Update ALL call sites of the method `_make_source_table` to call the new top-level function with the same name +# Update ALL call sites of the method `_make_source_table` to call the new top-level function with the same name UPDATE METHOD "DebugAnalyzer.list_source" FROM FILE "analyzer_cli.py" REPLACE BODY WITH CASE diff --git a/tests/corpus/update.identifier.ed-script-filter!nowindows/chat.xml b/tests/corpus/update.identifier.ed-script-filter!nowindows/chat.xml index 3625e6b..d46aeb8 100644 --- a/tests/corpus/update.identifier.ed-script-filter!nowindows/chat.xml +++ b/tests/corpus/update.identifier.ed-script-filter!nowindows/chat.xml @@ -8,7 +8,7 @@ g/^def convert/s/self, // '''; --- 1. Update the function signature of `calc1()` to add parameter `tax: float` as the first one and use the new parameter instead of `7` +# 1. Update the function signature of `calc1()` to add parameter `tax: float` as the first one and use the new parameter instead of `7` UPDATE FUNCTION "calc1" FROM FILE "1.py" REPLACE WHOLE WITH ED r''' @@ -18,8 +18,8 @@ g/return/s/7.*/tax/ '''; --- 2. Update the function signature of `calc2()` to add parameter `base_tax: float = 1.3` as the last one --- 3. Update ALL call sites of `calc1()` to pass `base_tax` as the first argument +# 2. Update the function signature of `calc2()` to add parameter `base_tax: float = 1.3` as the last one +# 3. Update ALL call sites of `calc1()` to pass `base_tax` as the first argument UPDATE FUNCTION "calc2" FROM FILE "1.py" REPLACE WHOLE WITH ED r''' diff --git a/tests/corpus/update.identifier.move.whole.1/chat.xml b/tests/corpus/update.identifier.move.whole.1/chat.xml index 5742c37..527b753 100644 --- a/tests/corpus/update.identifier.move.whole.1/chat.xml +++ b/tests/corpus/update.identifier.move.whole.1/chat.xml @@ -1,6 +1,6 @@ ```CEDARScript --- A02 becomes local to b +# A02 becomes local to b UPDATE FUNCTION "b" FROM FILE "main.py" MOVE WHOLE INSERT BEFORE CLASS "A02" diff --git a/tests/corpus/update.identifier.move.whole.2/chat.xml b/tests/corpus/update.identifier.move.whole.2/chat.xml index b2b9f2f..d612c4f 100644 --- a/tests/corpus/update.identifier.move.whole.2/chat.xml +++ b/tests/corpus/update.identifier.move.whole.2/chat.xml @@ -1,6 +1,6 @@ ```CEDARScript --- 2nd pst becomes inner of A3 +# 2nd pst becomes inner of A3 UPDATE FUNCTION "pst" OFFSET 1 FROM FILE "main.py" MOVE WHOLE INSERT AFTER CLASS "A3" RELATIVE INDENTATION 1; pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy