diff --git a/Sources/SwiftParser/Declarations.swift b/Sources/SwiftParser/Declarations.swift index 45877fc89d2..86f8babaaac 100644 --- a/Sources/SwiftParser/Declarations.swift +++ b/Sources/SwiftParser/Declarations.swift @@ -968,7 +968,7 @@ extension Parser { } // Parse the signature. - let signature = self.parseFunctionSignature(allowOutput: false) + let signature = self.parseFunctionSignature() let whereClause: RawGenericWhereClauseSyntax? if self.at(.keyword(.where)) { @@ -1131,7 +1131,7 @@ extension Parser { ) } - mutating func parseFunctionSignature(allowOutput: Bool = true) -> RawFunctionSignatureSyntax { + mutating func parseFunctionSignature() -> RawFunctionSignatureSyntax { let parameterClause = self.parseParameterClause(RawFunctionParameterClauseSyntax.self) { parser in parser.parseFunctionParameter() } @@ -1148,19 +1148,10 @@ extension Parser { returnClause = nil } - var unexpectedAfterReturnClause: RawUnexpectedNodesSyntax? - if !allowOutput, - let unexpectedOutput = returnClause - { - returnClause = nil - unexpectedAfterReturnClause = RawUnexpectedNodesSyntax([unexpectedOutput], arena: self.arena) - } - return RawFunctionSignatureSyntax( parameterClause: parameterClause, effectSpecifiers: effectSpecifiers, returnClause: returnClause, - unexpectedAfterReturnClause, arena: self.arena ) } diff --git a/Sources/SwiftParserDiagnostics/ParseDiagnosticsGenerator.swift b/Sources/SwiftParserDiagnostics/ParseDiagnosticsGenerator.swift index 5db948f941a..a02a8d15e6e 100644 --- a/Sources/SwiftParserDiagnostics/ParseDiagnosticsGenerator.swift +++ b/Sources/SwiftParserDiagnostics/ParseDiagnosticsGenerator.swift @@ -1212,14 +1212,6 @@ public class ParseDiagnosticsGenerator: SyntaxAnyVisitor { ) } - if let unexpectedOutput = node.signature.unexpectedAfterReturnClause { - addDiagnostic( - unexpectedOutput, - .initializerCannotHaveResultType, - handledNodes: [unexpectedOutput.id] - ) - } - return .visitChildren } diff --git a/Sources/SwiftParserDiagnostics/ParserDiagnosticMessages.swift b/Sources/SwiftParserDiagnostics/ParserDiagnosticMessages.swift index 86430581513..ecf2e5d2cde 100644 --- a/Sources/SwiftParserDiagnostics/ParserDiagnosticMessages.swift +++ b/Sources/SwiftParserDiagnostics/ParserDiagnosticMessages.swift @@ -182,9 +182,6 @@ extension DiagnosticMessage where Self == StaticParserError { public static var initializerCannotHaveName: Self { .init("initializers cannot have a name") } - public static var initializerCannotHaveResultType: Self { - .init("initializers cannot have a result type") - } public static var invalidFlagAfterPrecedenceGroupAssignment: Self { .init("expected 'true' or 'false' after 'assignment'") } diff --git a/Tests/SwiftParserTest/DeclarationTests.swift b/Tests/SwiftParserTest/DeclarationTests.swift index bddc8743bba..e4c085a9c32 100644 --- a/Tests/SwiftParserTest/DeclarationTests.swift +++ b/Tests/SwiftParserTest/DeclarationTests.swift @@ -3156,4 +3156,14 @@ final class DeclarationTests: ParserTestCase { XCTAssertEqual(decl.description, input, line: line) } } + + func testInitializerWithReturnType() { + assertParse( + "init(_ ptr: UnsafeRawBufferPointer, _ a: borrowing Array) -> _borrow(a) Self", + experimentalFeatures: .nonescapableTypes + ) + + // Not actually valid, needs to be diagnosed during type checking + assertParse("public init() -> Int") + } } diff --git a/Tests/SwiftParserTest/translated/InitDeinitTests.swift b/Tests/SwiftParserTest/translated/InitDeinitTests.swift index 59c94a0a155..a75f665729e 100644 --- a/Tests/SwiftParserTest/translated/InitDeinitTests.swift +++ b/Tests/SwiftParserTest/translated/InitDeinitTests.swift @@ -104,10 +104,7 @@ final class InitDeinitTests: ParserTestCase { struct FooStructConstructorD { init() 1️⃣-> FooStructConstructorD { } } - """, - diagnostics: [ - DiagnosticSpec(message: "initializers cannot have a result type") - ] + """ ) } @@ -425,10 +422,7 @@ final class InitDeinitTests: ParserTestCase { assertParse( """ init(_ foo: T) 1️⃣-> Int where T: Comparable {} - """, - diagnostics: [ - DiagnosticSpec(message: "initializers cannot have a result type") - ] + """ ) }