From 954c2bcfd85cab8bfaf264170eab1921ea49af7b Mon Sep 17 00:00:00 2001 From: Natik Gadzhi Date: Mon, 28 Aug 2023 22:40:31 -0700 Subject: [PATCH] Add a convenience init for EnumCaseParameterSyntax that adds a colon automatically --- Sources/SwiftSyntax/Convenience.swift | 36 +++++++++++++++++++++++++ Tests/SwiftSyntaxTest/SyntaxTests.swift | 8 ++++++ 2 files changed, 44 insertions(+) diff --git a/Sources/SwiftSyntax/Convenience.swift b/Sources/SwiftSyntax/Convenience.swift index 7ff762779ec..eba5cea70ec 100644 --- a/Sources/SwiftSyntax/Convenience.swift +++ b/Sources/SwiftSyntax/Convenience.swift @@ -10,6 +10,37 @@ // //===----------------------------------------------------------------------===// +extension EnumCaseParameterSyntax { + + /// Creates an `EnumCaseParameterSyntax` with a `firstName`, and automatically adds a `colon` to it. + /// + /// - SeeAlso: For more information on the arguments, see ``EnumCaseParameterSyntax/init(leadingTrivia:_:modifiers:_:firstName:_:secondName:_:colon:_:type:_:defaultArgument:_:trailingComma:_:trailingTrivia:)`` + /// + public init( + leadingTrivia: Trivia? = nil, + modifiers: DeclModifierListSyntax = [], + firstName: TokenSyntax, + secondName: TokenSyntax? = nil, + colon: TokenSyntax = TokenSyntax.colonToken(), + type: some TypeSyntaxProtocol, + defaultValue: InitializerClauseSyntax? = nil, + trailingComma: TokenSyntax? = nil, + trailingTrivia: Trivia? = nil + ) { + self.init( + leadingTrivia: leadingTrivia, + modifiers: modifiers, + firstName: firstName as TokenSyntax?, + secondName: secondName, + colon: colon, + type: type, + defaultValue: defaultValue, + trailingComma: trailingComma, + trailingTrivia: trailingTrivia + ) + } +} + extension MemberAccessExprSyntax { /// Creates a new ``MemberAccessExprSyntax`` where the accessed member is represented by /// an identifier without specifying argument labels. @@ -45,3 +76,8 @@ extension MemberAccessExprSyntax { ) } } + +//==========================================================================// +// IMPORTANT: If you are tempted to add an extension here, please insert // +// it in alphabetical order above // +//==========================================================================// diff --git a/Tests/SwiftSyntaxTest/SyntaxTests.swift b/Tests/SwiftSyntaxTest/SyntaxTests.swift index f4d28450e66..5dc4b521ed8 100644 --- a/Tests/SwiftSyntaxTest/SyntaxTests.swift +++ b/Tests/SwiftSyntaxTest/SyntaxTests.swift @@ -125,4 +125,12 @@ public class SyntaxTests: XCTestCase { XCTAssertEqual(funcKW.endPosition, AbsolutePosition(utf8Offset: 7)) XCTAssertEqual(funcKW.trimmedLength, SourceLength(utf8Length: 4)) } + + public func testEnumCaseParameterSyntaxConvenienceInit() { + let noFirstName = EnumCaseParameterSyntax(type: TypeSyntax("MyType")) + XCTAssertEqual(noFirstName.formatted().description, "MyType") + + let node = EnumCaseParameterSyntax(firstName: "label", type: TypeSyntax("MyType")) + XCTAssertEqual(node.formatted().description, "label: MyType") + } }