diff --git a/unified/extractor/tree-sitter-swift/grammar.js b/unified/extractor/tree-sitter-swift/grammar.js index 22b5af18ffa..5dbfd7fdbbf 100644 --- a/unified/extractor/tree-sitter-swift/grammar.js +++ b/unified/extractor/tree-sitter-swift/grammar.js @@ -84,7 +84,14 @@ if (tree_sitter_version_supports_emoji()) { module.exports = grammar({ name: "swift", - supertypes: ($) => [$.expression, $.unannotated_type], + supertypes: ($) => [ + $.expression, + $.unannotated_type, + $.global_declaration, + $.type_level_declaration, + $.local_declaration, + $.protocol_member_declaration, + ], conflicts: ($) => [ // @Type(... could either be an annotation constructor invocation or an annotated expression [$.attribute], @@ -1183,14 +1190,14 @@ module.exports = grammar({ _local_statement: ($) => choice( $.expression, - $._local_declaration, + $.local_declaration, $._labeled_statement, $.control_transfer_statement ), _top_level_statement: ($) => choice( $.expression, - $._global_declaration, + $.global_declaration, $._labeled_statement, $._throw_statement ), @@ -1298,7 +1305,7 @@ module.exports = grammar({ //////////////////////////////// // Declarations - https://docs.swift.org/swift-book/ReferenceManual/Declarations.html //////////////////////////////// - _global_declaration: ($) => + global_declaration: ($) => choice( $.import_declaration, $.property_declaration, @@ -1312,7 +1319,7 @@ module.exports = grammar({ $.associatedtype_declaration, $.macro_declaration ), - _type_level_declaration: ($) => + type_level_declaration: ($) => choice( $.import_declaration, $.property_declaration, @@ -1327,7 +1334,7 @@ module.exports = grammar({ $.precedence_group_declaration, $.associatedtype_declaration ), - _local_declaration: ($) => + local_declaration: ($) => choice( alias($._local_property_declaration, $.property_declaration), alias($._local_typealias_declaration, $.typealias_declaration), @@ -1598,7 +1605,7 @@ module.exports = grammar({ _class_member_separator: ($) => choice($._semi, $.multiline_comment), _class_member_declarations: ($) => seq( - sep1($._type_level_declaration, $._class_member_separator), + sep1($.type_level_declaration, $._class_member_separator), optional($._class_member_separator) ), _function_value_parameters: ($) => @@ -1666,7 +1673,7 @@ module.exports = grammar({ throws_clause: ($) => seq($._throws_keyword, "(", field("type", $.unannotated_type), ")"), enum_class_body: ($) => - seq("{", repeat(choice($.enum_entry, $._type_level_declaration)), "}"), + seq("{", repeat(choice($.enum_entry, $.type_level_declaration)), "}"), enum_entry: ($) => seq( optional($.modifiers), @@ -1718,16 +1725,10 @@ module.exports = grammar({ protocol_body: ($) => seq("{", optional($._protocol_member_declarations), "}"), _protocol_member_declarations: ($) => - seq(sep1($._protocol_member_declaration, $._semi), optional($._semi)), - _protocol_member_declaration: ($) => + seq(sep1($.protocol_member_declaration, $._semi), optional($._semi)), + protocol_member_declaration: ($) => choice( - alias( - seq( - $._bodyless_function_declaration, - optional(field("body", $.function_body)) - ), - $.protocol_function_declaration - ), + $.protocol_function_declaration, $.init_declaration, $.deinit_declaration, $.protocol_property_declaration, @@ -1735,6 +1736,11 @@ module.exports = grammar({ $.associatedtype_declaration, $.subscript_declaration ), + protocol_function_declaration: ($) => + seq( + $._bodyless_function_declaration, + optional(field("body", $.function_body)) + ), init_declaration: ($) => prec.right( seq( diff --git a/unified/extractor/tree-sitter-swift/node-types.yml b/unified/extractor/tree-sitter-swift/node-types.yml index 7b97a68afde..c4bf650944b 100644 --- a/unified/extractor/tree-sitter-swift/node-types.yml +++ b/unified/extractor/tree-sitter-swift/node-types.yml @@ -56,6 +56,44 @@ supertypes: - tuple_expression - value_pack_expansion - value_parameter_pack + global_declaration: + - associatedtype_declaration + - class_declaration + - function_declaration + - import_declaration + - init_declaration + - macro_declaration + - operator_declaration + - precedence_group_declaration + - property_declaration + - protocol_declaration + - typealias_declaration + local_declaration: + - class_declaration + - function_declaration + - property_declaration + - typealias_declaration + protocol_member_declaration: + - associatedtype_declaration + - deinit_declaration + - init_declaration + - protocol_function_declaration + - protocol_property_declaration + - subscript_declaration + - typealias_declaration + type_level_declaration: + - associatedtype_declaration + - class_declaration + - deinit_declaration + - function_declaration + - import_declaration + - init_declaration + - operator_declaration + - precedence_group_declaration + - property_declaration + - protocol_declaration + - subscript_declaration + - typealias_declaration unannotated_type: - array_type - dictionary_type @@ -128,7 +166,7 @@ named: target: expression type: type class_body: - $children*: [associatedtype_declaration, class_declaration, deinit_declaration, function_declaration, import_declaration, init_declaration, multiline_comment, operator_declaration, precedence_group_declaration, property_declaration, protocol_declaration, subscript_declaration, typealias_declaration] + $children*: [multiline_comment, type_level_declaration] class_declaration: $children*: [attribute, inheritance_modifier, inheritance_specifier, modifiers, ownership_modifier, property_behavior_modifier, type_constraints, type_parameters] body: [class_body, enum_class_body] @@ -188,7 +226,7 @@ named: $children*: [catch_block, statements] else: enum_class_body: - $children*: [associatedtype_declaration, class_declaration, deinit_declaration, enum_entry, function_declaration, import_declaration, init_declaration, operator_declaration, precedence_group_declaration, property_declaration, protocol_declaration, subscript_declaration, typealias_declaration] + $children*: [enum_entry, type_level_declaration] enum_entry: $children?: modifiers data_contents*: enum_type_parameters @@ -372,8 +410,7 @@ named: value*: expression property_modifier: protocol_body: - $children*: [associatedtype_declaration, deinit_declaration, init_declaration, protocol_function_declaration, protocol_property_declaration, subscript_declaration, typealias_declaration] - body*: protocol_function_declaration + $children*: protocol_member_declaration protocol_composition_type: $children+: unannotated_type protocol_declaration: @@ -382,9 +419,10 @@ named: declaration_kind: "protocol" name: type_identifier protocol_function_declaration: - $children*: [attribute, modifiers, parameter, statements, throws, throws_clause, type_constraints, type_parameters] + $children*: [attribute, modifiers, parameter, throws, throws_clause, type_constraints, type_parameters] + body?: function_body default_value*: expression - name?: [referenceable_operator, simple_identifier] + name: [referenceable_operator, simple_identifier] return_type?: [implicitly_unwrapped_type, type] protocol_property_declaration: $children+: [modifiers, protocol_property_requirements, type_annotation, type_constraints] @@ -421,11 +459,11 @@ named: shebang_line: simple_identifier: source_file: - $children*: [associatedtype_declaration, class_declaration, do_statement, expression, for_statement, function_declaration, guard_statement, import_declaration, init_declaration, macro_declaration, operator_declaration, precedence_group_declaration, property_declaration, protocol_declaration, repeat_while_statement, shebang_line, statement_label, throw_keyword, typealias_declaration, while_statement] + $children*: [do_statement, expression, for_statement, global_declaration, guard_statement, repeat_while_statement, shebang_line, statement_label, throw_keyword, while_statement] special_literal: statement_label: statements: - $children+: [class_declaration, control_transfer_statement, do_statement, expression, for_statement, function_declaration, guard_statement, property_declaration, repeat_while_statement, statement_label, typealias_declaration, while_statement] + $children+: [control_transfer_statement, do_statement, expression, for_statement, guard_statement, local_declaration, repeat_while_statement, statement_label, while_statement] str_escaped_char: subscript_declaration: $children+: [attribute, computed_property, modifiers, parameter, type_constraints, type_parameters]