Skip to content

[5.1][utils/gyb_syntax_support] Add collection_element_name for when specifying a Child #24238

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions include/swift/Syntax/SyntaxBuilders.h.gyb
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,12 @@ public:
${node.name}Builder &use${child.name}(${child.type_name} ${child.name});
% child_node = NODE_MAP.get(child.syntax_kind)
% if child_node and child_node.is_syntax_collection():
% child_elt = child_node.collection_element_name
% child_elt = child.collection_element_name
% child_elt_type = child_node.collection_element_type
% child_elt_name = child.name + 'Member'
${node.name}Builder &add${child_elt_name}(${child_elt_type} ${child_elt});
% if not child_elt:
% raise Exception("'collection_element_name' should be set for '%s' of '%s'" % (child.name, node.name))
% end
${node.name}Builder &add${child_elt}(${child_elt_type} ${child_elt});
% end
% end

Expand Down
7 changes: 5 additions & 2 deletions include/swift/Syntax/SyntaxNodes.h.gyb
Original file line number Diff line number Diff line change
Expand Up @@ -88,15 +88,18 @@ public:

% child_node = NODE_MAP.get(child.syntax_kind)
% if child_node and child_node.is_syntax_collection():
% child_elt = child_node.collection_element_name
% child_elt = child.collection_element_name
% child_elt_type = child_node.collection_element_type
% if not child_elt:
% raise Exception("'collection_element_name' should be set for '%s' of '%s'" % (child.name, node.name))
% end
/// Adds the provided `${child_elt}` to the node's `${child.name}`
/// collection.
/// - param element: The new `${child_elt}` to add to the node's
/// `${child.name}` collection.
/// - returns: A copy of the receiver with the provided `${child_elt}`
/// appended to its `${child.name}` collection.
${node.name} add${child.name}Member(${child_elt_type} ${child_elt});
${node.name} add${child_elt}(${child_elt_type} ${child_elt});
% end

/// Returns a copy of the receiver with its `${child.name}` replaced.
Expand Down
8 changes: 5 additions & 3 deletions lib/Syntax/SyntaxBuilders.cpp.gyb
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,13 @@ ${node.name}Builder::use${child.name}(${child.type_name} ${child.name}) {
}
% child_node = NODE_MAP.get(child.syntax_kind)
% if child_node and child_node.is_syntax_collection():
% child_elt = child_node.collection_element_name
% child_elt = child.collection_element_name
% child_elt_type = child_node.collection_element_type
% child_elt_name = child.name + 'Member'
% if not child_elt:
% raise Exception("'collection_element_name' should be set for '%s' of '%s'" % (child.name, node.name))
% end
${node.name}Builder &
${node.name}Builder::add${child_elt_name}(${child_elt_type} ${child_elt}) {
${node.name}Builder::add${child_elt}(${child_elt_type} ${child_elt}) {
auto &raw = Layout[cursorIndex(${node.name}::Cursor::${child.name})];
if (!raw)
raw = RawSyntax::make(SyntaxKind::${child_node.syntax_kind},
Expand Down
8 changes: 5 additions & 3 deletions lib/Syntax/SyntaxNodes.cpp.gyb
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,12 @@ ${child.type_name} ${node.name}::get${child.name}() {

% child_node = NODE_MAP.get(child.syntax_kind)
% if child_node and child_node.is_syntax_collection():
% child_elt = child_node.collection_element_name
% child_elt = child.collection_element_name
% child_elt_type = child_node.collection_element_type
% child_elt_name = child.name + 'Member'
${node.name} ${node.name}::add${child_elt_name}(${child_elt_type} ${child_elt}) {
% if not child_elt:
% raise Exception("'collection_element_name' should be set for '%s' of '%s'" % (child.name, node.name))
% end
${node.name} ${node.name}::add${child_elt}(${child_elt_type} ${child_elt}) {
RC<RawSyntax> raw = getRaw()->getChild(Cursor::${child.name});
if (raw)
raw = raw->append(${child_elt}.getRaw());
Expand Down
16 changes: 8 additions & 8 deletions unittests/Syntax/DeclSyntaxTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ TEST(DeclSyntaxTests, TypealiasMakeAPIs) {
auto GenericParams = GenericParameterClauseSyntaxBuilder()
.useLeftAngleBracket(LeftAngle)
.useRightAngleBracket(RightAngle)
.addGenericParameterListMember(ElementParam)
.addGenericParameter(ElementParam)
.build();
auto Assignment = SyntaxFactory::makeEqualToken({}, { Trivia::spaces(1) });
auto ElementType = SyntaxFactory::makeTypeIdentifier("Element", {}, {});
Expand All @@ -97,7 +97,7 @@ TEST(DeclSyntaxTests, TypealiasMakeAPIs) {
auto GenericArgs = GenericArgumentClauseSyntaxBuilder()
.useLeftAngleBracket(LeftAngle)
.useRightAngleBracket(SyntaxFactory::makeRightAngleToken({}, {}))
.addArgumentsMember(ElementArg)
.addArgument(ElementArg)
.build();

auto Array = SyntaxFactory::makeIdentifier("Array", {}, {});
Expand Down Expand Up @@ -126,7 +126,7 @@ TEST(DeclSyntaxTests, TypealiasWithAPIs) {
auto GenericParams = GenericParameterClauseSyntaxBuilder()
.useLeftAngleBracket(LeftAngle)
.useRightAngleBracket(RightAngle)
.addGenericParameterListMember(ElementParam)
.addGenericParameter(ElementParam)
.build();
auto Equal = SyntaxFactory::makeEqualToken({}, { Trivia::spaces(1) });

Expand All @@ -135,7 +135,7 @@ TEST(DeclSyntaxTests, TypealiasWithAPIs) {
auto GenericArgs = GenericArgumentClauseSyntaxBuilder()
.useLeftAngleBracket(LeftAngle)
.useRightAngleBracket(SyntaxFactory::makeRightAngleToken({}, {}))
.addArgumentsMember(ElementArg)
.addArgument(ElementArg)
.build();

auto Array = SyntaxFactory::makeIdentifier("Array", {}, {});
Expand Down Expand Up @@ -170,7 +170,7 @@ TEST(DeclSyntaxTests, TypealiasBuilderAPIs) {
auto GenericParams = GenericParameterClauseSyntaxBuilder()
.useLeftAngleBracket(LeftAngle)
.useRightAngleBracket(RightAngle)
.addGenericParameterListMember(ElementParam)
.addGenericParameter(ElementParam)
.build();
auto Equal =
SyntaxFactory::makeEqualToken({}, { Trivia::spaces(1) });
Expand All @@ -181,7 +181,7 @@ TEST(DeclSyntaxTests, TypealiasBuilderAPIs) {
auto GenericArgs = GenericArgumentClauseSyntaxBuilder()
.useLeftAngleBracket(LeftAngle)
.useRightAngleBracket(SyntaxFactory::makeRightAngleToken({}, {}))
.addArgumentsMember(ElementArg)
.addArgument(ElementArg)
.build();

auto Array = SyntaxFactory::makeIdentifier("Array", {}, {});
Expand Down Expand Up @@ -519,8 +519,8 @@ GenericParameterClauseSyntax getCannedGenericParams() {
auto T = SyntaxFactory::makeGenericParameter(TType, Comma);
auto U = SyntaxFactory::makeGenericParameter(UType, None);

GB.addGenericParameterListMember(T);
GB.addGenericParameterListMember(U);
GB.addGenericParameter(T);
GB.addGenericParameter(U);
GB.useLeftAngleBracket(LAngle);
GB.useRightAngleBracket(RAngle);

Expand Down
10 changes: 5 additions & 5 deletions unittests/Syntax/ExprSyntaxTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ TEST(ExprSyntaxTests, SymbolicReferenceExprGetAPIs) {
ArgBuilder
.useLeftAngleBracket(SyntaxFactory::makeLeftAngleToken({}, {}))
.useRightAngleBracket(SyntaxFactory::makeRightAngleToken({}, {}))
.addArgumentsMember(GenericArg);
.addArgument(GenericArg);

auto GenericArgs = ArgBuilder.build();

Expand Down Expand Up @@ -98,7 +98,7 @@ TEST(ExprSyntaxTests, SymbolicReferenceExprMakeAPIs) {
ArgBuilder
.useLeftAngleBracket(SyntaxFactory::makeLeftAngleToken({}, {}))
.useRightAngleBracket(SyntaxFactory::makeRightAngleToken({}, {}))
.addArgumentsMember(GenericArg);
.addArgument(GenericArg);
auto GenericArgs = ArgBuilder.build();

{
Expand Down Expand Up @@ -135,7 +135,7 @@ TEST(ExprSyntaxTests, SymbolicReferenceExprWithAPIs) {
ArgBuilder
.useLeftAngleBracket(SyntaxFactory::makeLeftAngleToken({}, {}))
.useRightAngleBracket(SyntaxFactory::makeRightAngleToken({}, {}))
.addArgumentsMember(GenericArg);
.addArgument(GenericArg);
auto GenericArgs = ArgBuilder.build();

{
Expand Down Expand Up @@ -528,15 +528,15 @@ TEST(ExprSyntaxTests, FunctionCallExprBuilderAPIs) {
{
llvm::SmallString<64> Scratch;
llvm::raw_svector_ostream OS(Scratch);
CallBuilder.addArgumentListMember(OneArg);
CallBuilder.addArgument(OneArg);
CallBuilder.build().print(OS);
ASSERT_EQ(OS.str().str(), "foo(1, )");
}

{
llvm::SmallString<64> Scratch;
llvm::raw_svector_ostream OS(Scratch);
CallBuilder.addArgumentListMember(OneArg.withTrailingComma(NoComma));
CallBuilder.addArgument(OneArg.withTrailingComma(NoComma));
CallBuilder.build().print(OS);
ASSERT_EQ(OS.str().str(), "foo(1, 1)");
}
Expand Down
26 changes: 13 additions & 13 deletions unittests/Syntax/TypeSyntaxTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -202,9 +202,9 @@ TEST(TypeSyntaxTests, TupleBuilderAPIs) {
auto StringId = SyntaxFactory::makeIdentifier("String", {}, {});
auto StringType = SyntaxFactory::makeSimpleTypeIdentifier(StringId, None);
auto String = SyntaxFactory::makeTupleTypeElement(StringType, Comma);
Builder.addElementsMember(IntWithComma);
Builder.addElementsMember(String);
Builder.addElementsMember(Int);
Builder.addElement(IntWithComma);
Builder.addElement(String);
Builder.addElement(Int);
Builder.useRightParen(SyntaxFactory::makeRightParenToken({}, {}));

auto TupleType = Builder.build();
Expand All @@ -229,8 +229,8 @@ TEST(TypeSyntaxTests, TupleBuilderAPIs) {
auto yTypeElt = SyntaxFactory::makeTupleTypeElement(yLabel, Colon,
Int)
.withInOut(inout);
Builder.addElementsMember(xTypeElt);
Builder.addElementsMember(yTypeElt);
Builder.addElement(xTypeElt);
Builder.addElement(yTypeElt);
Builder.useRightParen(SyntaxFactory::makeRightParenToken({}, {}));

auto TupleType = Builder.build();
Expand Down Expand Up @@ -562,8 +562,8 @@ TEST(TypeSyntaxTests, FunctionTypeWithAPIs) {

SyntaxFactory::makeBlankFunctionType()
.withLeftParen(LeftParen)
.addArgumentsMember(xArg)
.addArgumentsMember(yArg)
.addArgument(xArg)
.addArgument(yArg)
.withRightParen(RightParen)
.withThrowsOrRethrowsKeyword(Throws)
.withArrow(Arrow)
Expand All @@ -580,8 +580,8 @@ TEST(TypeSyntaxTests, FunctionTypeWithAPIs) {
SyntaxFactory::makeBlankFunctionType()
.withLeftParen(LeftParen)
.withRightParen(RightParen)
.addArgumentsMember(IntArg.withTrailingComma(Comma))
.addArgumentsMember(IntArg)
.addArgument(IntArg.withTrailingComma(Comma))
.addArgument(IntArg)
.withThrowsOrRethrowsKeyword(Rethrows)
.withArrow(Arrow)
.withReturnType(Int)
Expand Down Expand Up @@ -628,8 +628,8 @@ TEST(TypeSyntaxTests, FunctionTypeBuilderAPIs) {

Builder.useLeftParen(LeftParen)
.useRightParen(RightParen)
.addArgumentsMember(xArg)
.addArgumentsMember(yArg)
.addArgument(xArg)
.addArgument(yArg)
.useThrowsOrRethrowsKeyword(Throws)
.useArrow(Arrow)
.useReturnType(Int);
Expand All @@ -646,8 +646,8 @@ TEST(TypeSyntaxTests, FunctionTypeBuilderAPIs) {
Int, None, None, None);
Builder.useLeftParen(LeftParen)
.useRightParen(RightParen)
.addArgumentsMember(IntArg.withTrailingComma(Comma))
.addArgumentsMember(IntArg)
.addArgument(IntArg.withTrailingComma(Comma))
.addArgument(IntArg)
.useThrowsOrRethrowsKeyword(Rethrows)
.useArrow(Arrow)
.useReturnType(Int);
Expand Down
5 changes: 3 additions & 2 deletions utils/gyb_syntax_support/AttributeNodes.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@
'''),
# TokenList to gather remaining tokens of invalid attributes
# FIXME: Remove this recovery option entirely
Child('TokenList', kind='TokenList', is_optional=True),
Child('TokenList', kind='TokenList',
collection_element_name='Token', is_optional=True),
]),

# attribute-list -> attribute attribute-list?
Expand All @@ -72,7 +73,7 @@
description='''
A collection of arguments for the `@_specialize` attribute
''',
element='Syntax',
element='Syntax', element_name='SpecializeAttribute',
element_choices=[
'LabeledSpecializeEntry',
'GenericWhereClause',
Expand Down
2 changes: 2 additions & 0 deletions utils/gyb_syntax_support/Child.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ class Child(object):
"""
def __init__(self, name, kind, description=None, is_optional=False,
token_choices=None, text_choices=None, node_choices=None,
collection_element_name=None,
classification=None, force_classification=False):
"""
If a classification is passed, it specifies the color identifiers in
Expand All @@ -25,6 +26,7 @@ def __init__(self, name, kind, description=None, is_optional=False,
self.description = description
self.swift_syntax_kind = lowercase_first_word(self.syntax_kind)
self.type_name = kind_to_type(self.syntax_kind)
self.collection_element_name = collection_element_name
self.classification = classification_by_name(classification)
self.force_classification = force_classification

Expand Down
3 changes: 2 additions & 1 deletion utils/gyb_syntax_support/CommonNodes.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@
traits=['Braced', 'WithStatements'],
children=[
Child('LeftBrace', kind='LeftBraceToken'),
Child('Statements', kind='CodeBlockItemList'),
Child('Statements', kind='CodeBlockItemList',
collection_element_name='Statement'),
Child('RightBrace', kind='RightBraceToken'),
]),
]
Loading