unified: add supertypes for various kinds of declarations

Hides a bunch of huge unions under (hopefully) sensible supertypes.
This commit is contained in:
Taus
2026-05-08 21:26:25 +00:00
parent a5a1312e51
commit ff5c0b40f1
2 changed files with 69 additions and 25 deletions

View File

@@ -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(

View File

@@ -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]