diff --git a/README.md b/README.md index 71c7367..5f74f3e 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,7 @@ Most captures also include documentation as `@doc`. `@definition.function` and ` | Language | Supported injections | | -------- | ---------------------- | | Vue | JavaScript, TypeScript | +| HTML | JavaScript | [^1]: Currently functions and methods are not distinguished. [^2]: Function calls and class instantiation are indistinguishable in Python. @@ -157,6 +158,7 @@ html java javascript json +julia kotlin latex markdown diff --git a/download_parse.sh b/download_parse.sh index 54a38fc..29cd8e6 100755 --- a/download_parse.sh +++ b/download_parse.sh @@ -2,7 +2,7 @@ set -euo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" -VERSION="v0.0.11" +VERSION="v0.0.12" rm -f parse.gz parse curl -Lo parse.gz "https://github.com/Exafunction/codeium-parse/releases/download/$VERSION/parse.gz" gzip -d parse.gz diff --git a/goldens/test.cpp.golden b/goldens/test.cpp.golden index 3af9f30..6360eab 100644 --- a/goldens/test.cpp.golden +++ b/goldens/test.cpp.golden @@ -78,20 +78,66 @@ Lineage types: [unknown] Name: one_pointer Parameters: () -Return type: bool +Return type: bool* Doc: // one_pointer comment Definition (definition.function): bool* one_pointer() { return nullptr; } -Metadata: - return_type_suffix = * Name: two_pointer Parameters: () -Return type: bool +Return type: bool** Doc: // two_pointer comment Definition (definition.function): bool** two_pointer() { return nullptr; } -Metadata: - return_type_suffix = ** + +Name: TemplatedFoo +Doc: +// Comment. +Definition (definition.class): +template +class TemplatedFoo { + template + void foo(); +}; + +Name: foo +Parameters: () +Return type: void +Declaration (definition.function): +template + void foo(); +Lineage: [TemplatedFoo] +Lineage types: [class] + +Name: foo +Parameters: () +Return type: void +Doc: +// Comment. +Definition (definition.function): +template +template +void TemplatedFoo::foo() {} +Lineage: [TemplatedFoo] +Lineage types: [unknown] + +Name: foo +Parameters: () +Return type: void +Doc: +// Comment. +Definition (definition.function): +template <> +template <> +void TemplatedFoo::foo() {} +Lineage: [TemplatedFoo] +Lineage types: [unknown] + +Name: TemplatedFoo2 +Doc: +// Comment. +Definition (definition.class): +template <> +class TemplatedFoo2 {}; diff --git a/goldens/test.go.golden b/goldens/test.go.golden index e591844..8f84887 100644 --- a/goldens/test.go.golden +++ b/goldens/test.go.golden @@ -76,6 +76,7 @@ Reference (reference.class): Pattern0{} Name: Method +Parent: s Parameters: ("") Reference (reference.call): s.Method("") diff --git a/goldens/test.py.golden b/goldens/test.py.golden index e261eab..49f0f47 100644 --- a/goldens/test.py.golden +++ b/goldens/test.py.golden @@ -58,14 +58,18 @@ def pattern1(param1): 'Pattern 1 docstring.' Name: Pattern2a +Parameters: () Reference (reference.call): Pattern2a() Name: pattern2b +Parameters: (1) Reference (reference.call): pattern2b(1) Name: foo +Parent: Pattern2a +Parameters: () Reference (reference.call): Pattern2a.foo() diff --git a/queries/cpp_tags.scm b/queries/cpp_tags.scm index 0dff89c..348bb8f 100644 --- a/queries/cpp_tags.scm +++ b/queries/cpp_tags.scm @@ -1,20 +1,12 @@ ( (comment)* @doc . - (class_specifier - name: (_) @name - body: (field_declaration_list) @body - ) @definition.class - (#select-adjacent! @doc @definition.class) - (#lineage-from-name! "::") -) -( - (comment)* @doc - . - (struct_specifier + (_ name: (_) @name body: (field_declaration_list) @body ) @definition.class + (#has-type? @definition.class class_specifier struct_specifier) + (#not-has-parent? @definition.class template_declaration) (#select-adjacent! @doc @definition.class) (#lineage-from-name! "::") ) @@ -24,49 +16,121 @@ . (_ (_type_specifier) @codeium.return_type - declarator: (function_declarator - declarator: (_) @name - parameters: (parameter_list) @codeium.parameters) + declarator: [ + (function_declarator + declarator: (_) @name + parameters: (parameter_list) @codeium.parameters) + (pointer_declarator + "*" @codeium.return_type + (function_declarator + declarator: (_) @name + parameters: (parameter_list) @codeium.parameters)) + (pointer_declarator + "*" @codeium.return_type + (pointer_declarator + "*" @codeium.return_type + (function_declarator + declarator: (_) @name + parameters: (parameter_list) @codeium.parameters))) + ] body: (_)? @body) @definition.function (#has-type? @definition.function function_definition declaration) + (#not-has-parent? @definition.function template_declaration) (#select-adjacent! @doc @definition.function) (#lineage-from-name! "::") ) +(namespace_definition + name: (_) @name + (#lineage-from-name! "::") +) @definition.namespace + +;; Copy to deal with single templates ( (comment)* @doc . - (_ - (_type_specifier) @codeium.return_type - declarator: (pointer_declarator - (function_declarator - declarator: (_) @name - parameters: (parameter_list) @codeium.parameters)) - body: (_)? @body) @definition.function - (#has-type? @definition.function function_definition declaration) - (#select-adjacent! @doc @definition.function) + (template_declaration + (_ + name: (_) @name + body: (field_declaration_list) @body) @_) @definition.class + (#has-type? @_ class_specifier struct_specifier) + (#not-has-parent? @definition.class template_declaration) + (#select-adjacent! @doc @definition.class) (#lineage-from-name! "::") - (#set! return_type_suffix "*") ) ( (comment)* @doc . - (_ - (_type_specifier) @codeium.return_type - declarator: (pointer_declarator - (pointer_declarator + (template_declaration + (_ + (_type_specifier) @codeium.return_type + declarator: [ (function_declarator declarator: (_) @name - parameters: (parameter_list) @codeium.parameters))) - body: (_)? @body) @definition.function - (#has-type? @definition.function function_definition declaration) + parameters: (parameter_list) @codeium.parameters) + (pointer_declarator + "*" @codeium.return_type + (function_declarator + declarator: (_) @name + parameters: (parameter_list) @codeium.parameters)) + (pointer_declarator + "*" @codeium.return_type + (pointer_declarator + "*" @codeium.return_type + (function_declarator + declarator: (_) @name + parameters: (parameter_list) @codeium.parameters))) + ] + body: (_)? @body) @_) @definition.function + (#has-type? @_ function_definition declaration) + (#not-has-parent? @definition.function template_declaration) (#select-adjacent! @doc @definition.function) (#lineage-from-name! "::") - (#set! return_type_suffix "**") ) -(namespace_definition - name: (_) @name +;; Copy to deal with double templates +( + (comment)* @doc + . + (template_declaration + (template_declaration + (_ + name: (_) @name + body: (field_declaration_list) @body) @_)) @definition.class + (#has-type? @_ class_specifier struct_specifier) + ;; (#not-has-parent? @definition.class template_declaration) + (#select-adjacent! @doc @definition.class) (#lineage-from-name! "::") -) @definition.namespace +) + +( + (comment)* @doc + . + (template_declaration + (template_declaration + (_ + (_type_specifier) @codeium.return_type + declarator: [ + (function_declarator + declarator: (_) @name + parameters: (parameter_list) @codeium.parameters) + (pointer_declarator + "*" @codeium.return_type + (function_declarator + declarator: (_) @name + parameters: (parameter_list) @codeium.parameters)) + (pointer_declarator + "*" @codeium.return_type + (pointer_declarator + "*" @codeium.return_type + (function_declarator + declarator: (_) @name + parameters: (parameter_list) @codeium.parameters))) + ] + body: (_)? @body) @_)) @definition.function + (#has-type? @_ function_definition declaration) + ;; (#not-has-parent? @definition.function template_declaration) + (#select-adjacent! @doc @definition.function) + (#lineage-from-name! "::") +) diff --git a/queries/go_tags.scm b/queries/go_tags.scm index dc0c9e5..7e5b7d1 100644 --- a/queries/go_tags.scm +++ b/queries/go_tags.scm @@ -57,13 +57,22 @@ (call_expression function: [ (identifier) @name - (selector_expression field: (field_identifier) @name) + (selector_expression + operand: (identifier) @parent + field: (field_identifier) @name) + (selector_expression + field: (field_identifier) @name) ] arguments: (argument_list) @codeium.parameters) @reference.call ;; 5. (composite_literal - type: (type_identifier) @name) @reference.class + type: [ + (type_identifier) @name + (qualified_type + package: (package_identifier) @parent + name: (type_identifier) @name) + ]) @reference.class ;; 6. Pattern 3 from tags.scm. ;; Restricted to just type aliases. diff --git a/queries/python_tags.scm b/queries/python_tags.scm index cb8fbf6..50110a9 100644 --- a/queries/python_tags.scm +++ b/queries/python_tags.scm @@ -22,8 +22,10 @@ function: [ (identifier) @name (attribute + object: (identifier) @parent attribute: (identifier) @name) - ]) @reference.call + ] + arguments: (argument_list) @codeium.parameters) @reference.call ( (decorated_definition diff --git a/test_files/test.cpp b/test_files/test.cpp index c060fa4..f56b496 100644 --- a/test_files/test.cpp +++ b/test_files/test.cpp @@ -35,3 +35,28 @@ bool bar::baz(const std::string& bing) { bool* one_pointer() { return nullptr; } // two_pointer comment bool** two_pointer() { return nullptr; } + +// Comment. +template +class TemplatedFoo { + template + void foo(); +}; + +// Comment. +template +template +void TemplatedFoo::foo() {} + +// Comment. +template <> +template <> +void TemplatedFoo::foo() {} + +// Comment. +template +class TemplatedFoo2; + +// Comment. +template <> +class TemplatedFoo2 {};