From a8cdcefacc6f04fb1df15e13785d1168450df134 Mon Sep 17 00:00:00 2001 From: Copybara Bot Date: Wed, 14 Jun 2023 12:26:26 -0700 Subject: [PATCH] Project import generated by Copybara. GitOrigin-RevId: b6543158eaf5d247afad402a2b2f583721bec226 --- download_parse.sh | 2 +- goldens/test.cpp.golden | 29 +++++++++++++++- goldens/test.go.golden | 2 ++ goldens/test.java.golden | 2 +- queries/cpp_class_fields.scm | 19 +++++++++++ queries/cpp_tags.scm | 51 +++++++++++++++++++++++++---- queries/go_class_fields.scm | 9 +++++ queries/go_tags.scm | 6 +++- queries/java_class_fields.scm | 26 +++++++++++++++ queries/java_tags.scm | 20 ++++++++++- queries/javascript_class_fields.scm | 19 +++++++++++ queries/python_class_fields.scm | 12 +++++++ queries/python_tags.scm | 1 + queries/typescript_class_fields.scm | 35 ++++++++++++++++++++ queries/typescript_tags.scm | 25 ++++++++++---- test_files/test.cpp | 11 ++++++- 16 files changed, 250 insertions(+), 19 deletions(-) create mode 100644 queries/cpp_class_fields.scm create mode 100644 queries/go_class_fields.scm create mode 100644 queries/java_class_fields.scm create mode 100644 queries/javascript_class_fields.scm create mode 100644 queries/python_class_fields.scm create mode 100644 queries/typescript_class_fields.scm diff --git a/download_parse.sh b/download_parse.sh index cb8cbf1..54a38fc 100755 --- a/download_parse.sh +++ b/download_parse.sh @@ -2,7 +2,7 @@ set -euo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" -VERSION="v0.0.10" +VERSION="v0.0.11" 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 7227364..3af9f30 100644 --- a/goldens/test.cpp.golden +++ b/goldens/test.cpp.golden @@ -10,6 +10,7 @@ struct Foo2; Name: baz Parameters: (const std::string& bing) +Return type: bool Doc: // Declaration. Declaration (definition.function): @@ -38,6 +39,7 @@ class Foo { Name: foo Parameters: () +Return type: void Doc: // foo // foo2 @@ -62,9 +64,34 @@ Lineage types: [unknown unknown] Name: baz Parameters: (const std::string& bing) +Return type: bool Doc: // baz Definition (definition.function): -bool bar::baz(const std::string& bing) { return bing.empty(); } +bool bar::baz(const std::string& bing) { + // This shouldn't be recognized as a function. + Foo dist(); + return bing.empty(); +} Lineage: [bar] Lineage types: [unknown] + +Name: one_pointer +Parameters: () +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 +Doc: +// two_pointer comment +Definition (definition.function): +bool** two_pointer() { return nullptr; } +Metadata: + return_type_suffix = ** diff --git a/goldens/test.go.golden b/goldens/test.go.golden index 7845743..e591844 100644 --- a/goldens/test.go.golden +++ b/goldens/test.go.golden @@ -25,6 +25,7 @@ Lineage types: [package] Name: a Parameters: () +Return type: string Doc: // Hi Declaration (definition.method): @@ -51,6 +52,7 @@ Lineage types: [package class] Name: Method2 Parameters: (a string) +Return type: string Definition (definition.method): func (p Pattern0) Method2(a string) string { Pattern2() diff --git a/goldens/test.java.golden b/goldens/test.java.golden index 7bf1a87..3bfe512 100644 --- a/goldens/test.java.golden +++ b/goldens/test.java.golden @@ -7,7 +7,7 @@ Lineage types: [package] Name: Foo Doc: // Class Foo. -Declaration (definition.class): +Definition (definition.class): public class Foo { /** Foo1. */ static public void foo1(int x) {} diff --git a/queries/cpp_class_fields.scm b/queries/cpp_class_fields.scm new file mode 100644 index 0000000..ec8196d --- /dev/null +++ b/queries/cpp_class_fields.scm @@ -0,0 +1,19 @@ +( + (class_specifier + body: ( + (field_declaration_list + (_) @field + ) + ) + ) +) + +( + (struct_specifier + body: ( + (field_declaration_list + _ @field + ) + ) + ) +) diff --git a/queries/cpp_tags.scm b/queries/cpp_tags.scm index ee75f84..0dff89c 100644 --- a/queries/cpp_tags.scm +++ b/queries/cpp_tags.scm @@ -1,12 +1,17 @@ ( (comment)* @doc . - (_ - [ - "struct" - "class" - ] - . + (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 @@ -18,6 +23,7 @@ (comment)* @doc . (_ + (_type_specifier) @codeium.return_type declarator: (function_declarator declarator: (_) @name parameters: (parameter_list) @codeium.parameters) @@ -27,6 +33,39 @@ (#lineage-from-name! "::") ) +( + (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) + (#lineage-from-name! "::") + (#set! return_type_suffix "*") +) + +( + (comment)* @doc + . + (_ + (_type_specifier) @codeium.return_type + declarator: (pointer_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) + (#lineage-from-name! "::") + (#set! return_type_suffix "**") +) + (namespace_definition name: (_) @name (#lineage-from-name! "::") diff --git a/queries/go_class_fields.scm b/queries/go_class_fields.scm new file mode 100644 index 0000000..6459a7d --- /dev/null +++ b/queries/go_class_fields.scm @@ -0,0 +1,9 @@ +(type_declaration + (type_spec + type: (struct_type + (field_declaration_list + (field_declaration) @field + ) + ) + ) +) diff --git a/queries/go_tags.scm b/queries/go_tags.scm index ee21707..dc0c9e5 100644 --- a/queries/go_tags.scm +++ b/queries/go_tags.scm @@ -31,6 +31,7 @@ (function_declaration name: (identifier) @name parameters: (parameter_list) @codeium.parameters + result: _? @codeium.return_type body: (_)? @body) @definition.function (#select-adjacent! @doc @definition.function) ) @@ -45,6 +46,7 @@ type: (_) @_)) name: (field_identifier) @name parameters: (parameter_list) @codeium.parameters + result: _? @codeium.return_type body: (_)? @body) @definition.method (#select-adjacent! @doc @definition.method) (#set! codeium.lineage @_) @@ -78,5 +80,7 @@ . (method_spec name: (field_identifier) @name - parameters: (parameter_list) @codeium.parameters) @definition.method + parameters: (parameter_list) @codeium.parameters + result: _? @codeium.return_type + ) @definition.method ) diff --git a/queries/java_class_fields.scm b/queries/java_class_fields.scm new file mode 100644 index 0000000..7946e08 --- /dev/null +++ b/queries/java_class_fields.scm @@ -0,0 +1,26 @@ +(class_declaration + (class_body + (field_declaration) @field + ) +) +(class_declaration + (class_body + ([ + (constructor_declaration) + ]) @codeium.constructor + ) +) + +(record_declaration + (formal_parameters + (formal_parameter) @field + ) +) +(record_declaration + (class_body + ([ + (constructor_declaration) + (compact_constructor_declaration) + ]) @codeium.constructor + ) +) diff --git a/queries/java_tags.scm b/queries/java_tags.scm index 4e52141..9d45ea9 100644 --- a/queries/java_tags.scm +++ b/queries/java_tags.scm @@ -8,6 +8,7 @@ (#lineage-from-name! ".") ) @codeium.lineage_node +;; Class and record ( [ (line_comment) @@ -15,10 +16,27 @@ ]* @doc . (class_declaration - name: (identifier) @name) @definition.class + name: (identifier) @name + body: (class_body)? @body + ) @definition.class + (#select-adjacent! @doc @definition.class) +) + +( + [ + (line_comment) + (block_comment) + ]* @doc + . + (record_declaration + name: (identifier) @name + parameters: (formal_parameters) @body + body: (class_body)? @body + ) @definition.class (#select-adjacent! @doc @definition.class) ) + ( [ (line_comment) diff --git a/queries/javascript_class_fields.scm b/queries/javascript_class_fields.scm new file mode 100644 index 0000000..5e264c3 --- /dev/null +++ b/queries/javascript_class_fields.scm @@ -0,0 +1,19 @@ +( + (class_body + ([ + (field_definition) + ]) @field + ) +) + +( + (comment)* @doc + . + (_ + name: (property_identifier) @name + parameters: (formal_parameters) @codeium.parameters + body: (_)? @body) @codeium.constructor + (#eq? @name "constructor") + (#has-type? @codeium.constructor method_definition method_signature abstract_method_signature) + (#select-adjacent! @doc @codeium.constructor) +) diff --git a/queries/python_class_fields.scm b/queries/python_class_fields.scm new file mode 100644 index 0000000..9592e55 --- /dev/null +++ b/queries/python_class_fields.scm @@ -0,0 +1,12 @@ +(class_definition + body: (block (expression_statement + (assignment) @field + )) +) +( + (function_definition + name: (identifier) @name + parameters: (parameters) @codeium.parameters + body: (block . (expression_statement . (string) @doc .)?) @body) @codeium.constructor + (#eq? @name "__init__") +) diff --git a/queries/python_tags.scm b/queries/python_tags.scm index e2f0161..cb8fbf6 100644 --- a/queries/python_tags.scm +++ b/queries/python_tags.scm @@ -13,6 +13,7 @@ parameters: (parameters) @codeium.parameters body: (block . (expression_statement . (string) @doc .)?) @body) @definition.function (#not-has-parent? @definition.function decorated_definition) + (#not-eq? @name "__init__") ) ;; 2. Pattern 2 from tags.scm. diff --git a/queries/typescript_class_fields.scm b/queries/typescript_class_fields.scm new file mode 100644 index 0000000..a2c274e --- /dev/null +++ b/queries/typescript_class_fields.scm @@ -0,0 +1,35 @@ +;; For class_declaration +( + (class_body + ([ + (public_field_definition) + ]) @field + ) +) +;; For type_alias_declaration and interface_declaration, whose body is an object_type +( + (object_type + [ + (property_signature) @field + (construct_signature) @codeium.constructor + (_) + ] + ) +) + +( + (comment)* @doc + . + (_ + name: (property_identifier) @name + parameters: (formal_parameters) @codeium.parameters + return_type: ([ + (type_annotation (_) @codeium.return_type) + (asserts (_) @codeium.return_type) + (type_predicate_annotation (_) @codeium.return_type) + ])? + body: (_)? @body) @codeium.constructor + (#eq? @name "constructor") + (#has-type? @codeium.constructor method_definition method_signature abstract_method_signature) + (#select-adjacent! @doc @codeium.constructor) +) diff --git a/queries/typescript_tags.scm b/queries/typescript_tags.scm index 44df6db..e5c38e8 100644 --- a/queries/typescript_tags.scm +++ b/queries/typescript_tags.scm @@ -265,7 +265,9 @@ (comment)* @doc . (interface_declaration - name: (_) @name) @definition.interface + name: (_) @name + body: (_)? @body + ) @definition.interface (#not-has-parent? @definition.interface export_statement ambient_declaration) (#select-adjacent! @doc @definition.interface) ) @@ -274,7 +276,8 @@ . (export_statement declaration: (interface_declaration - name: (_) @name)) @definition.interface + name: (_) @name + body: (_)? @body)) @definition.interface (#select-adjacent! @doc @definition.interface) (#set! is_export true) ) @@ -283,7 +286,8 @@ . (ambient_declaration (interface_declaration - name: (_) @name)) @definition.interface + name: (_) @name + body: (_)? @body)) @definition.interface (#not-has-parent? @definition.interface export_statement) (#select-adjacent! @doc @definition.interface) ) @@ -293,7 +297,8 @@ (export_statement declaration: (ambient_declaration (interface_declaration - name: (_) @name))) @definition.interface + name: (_) @name + body: (_)? @body))) @definition.interface (#select-adjacent! @doc @definition.interface) (#set! is_export true) ) @@ -303,7 +308,9 @@ (comment)* @doc . (type_alias_declaration - name: (_) @name) @definition.type + name: (_) @name + value: (_)? @body + ) @definition.type (#not-has-parent? @definition.type export_statement ambient_declaration) (#select-adjacent! @doc @definition.type) ) @@ -312,7 +319,9 @@ . (export_statement declaration: (type_alias_declaration - name: (_) @name)) @definition.type + name: (_) @name + value: (_)? @body + )) @definition.type (#select-adjacent! @doc @definition.type) (#set! is_export true) ) @@ -321,7 +330,9 @@ . (ambient_declaration (type_alias_declaration - name: (_) @name)) @definition.type + name: (_) @name + value: (_)? @body + )) @definition.type (#not-has-parent? @definition.type export_statement) (#select-adjacent! @doc @definition.type) ) diff --git a/test_files/test.cpp b/test_files/test.cpp index 1a59c2d..c060fa4 100644 --- a/test_files/test.cpp +++ b/test_files/test.cpp @@ -25,4 +25,13 @@ struct bar::Foo2 {}; struct bar::bar2::Foo3 {}; // baz -bool bar::baz(const std::string& bing) { return bing.empty(); } +bool bar::baz(const std::string& bing) { + // This shouldn't be recognized as a function. + Foo dist(); + return bing.empty(); +} + +// one_pointer comment +bool* one_pointer() { return nullptr; } +// two_pointer comment +bool** two_pointer() { return nullptr; }