Skip to content

[Concurrency] Add Syntax support for async. #231

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 1 commit into from
Jul 29, 2020
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
2 changes: 1 addition & 1 deletion Sources/SwiftSyntax/gyb_generated/Misc.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1936,6 +1936,6 @@ extension Syntax {
extension SyntaxParser {
static func verifyNodeDeclarationHash() -> Bool {
return String(cString: swiftparse_syntax_structure_versioning_identifier()!) ==
"77e9551aa9f94761b9808f610830fa826cc8323a"
"3a049b2faed8cf5c7c125ffe4354a6e8b5d9620f"
}
}
33 changes: 24 additions & 9 deletions Sources/SwiftSyntax/gyb_generated/SyntaxBuilders.swift
Original file line number Diff line number Diff line change
Expand Up @@ -955,10 +955,15 @@ extension BinaryOperatorExprSyntax {

public struct ArrowExprSyntaxBuilder {
private var layout =
Array<RawSyntax?>(repeating: nil, count: 2)
Array<RawSyntax?>(repeating: nil, count: 3)

internal init() {}

public mutating func useAsyncKeyword(_ node: TokenSyntax) {
let idx = ArrowExprSyntax.Cursor.asyncKeyword.rawValue
layout[idx] = node.raw
}

public mutating func useThrowsToken(_ node: TokenSyntax) {
let idx = ArrowExprSyntax.Cursor.throwsToken.rawValue
layout[idx] = node.raw
Expand All @@ -970,8 +975,8 @@ public struct ArrowExprSyntaxBuilder {
}

internal mutating func buildData() -> SyntaxData {
if (layout[1] == nil) {
layout[1] = RawSyntax.missingToken(TokenKind.arrow)
if (layout[2] == nil) {
layout[2] = RawSyntax.missingToken(TokenKind.arrow)
}

return .forRoot(RawSyntax.createAndCalcLength(kind: .arrowExpr,
Expand Down Expand Up @@ -3304,7 +3309,7 @@ extension ReturnClauseSyntax {

public struct FunctionSignatureSyntaxBuilder {
private var layout =
Array<RawSyntax?>(repeating: nil, count: 3)
Array<RawSyntax?>(repeating: nil, count: 4)

internal init() {}

Expand All @@ -3313,6 +3318,11 @@ public struct FunctionSignatureSyntaxBuilder {
layout[idx] = node.raw
}

public mutating func useAsyncKeyword(_ node: TokenSyntax) {
let idx = FunctionSignatureSyntax.Cursor.asyncKeyword.rawValue
layout[idx] = node.raw
}

public mutating func useThrowsOrRethrowsKeyword(_ node: TokenSyntax) {
let idx = FunctionSignatureSyntax.Cursor.throwsOrRethrowsKeyword.rawValue
layout[idx] = node.raw
Expand Down Expand Up @@ -9480,7 +9490,7 @@ extension TupleTypeSyntax {

public struct FunctionTypeSyntaxBuilder {
private var layout =
Array<RawSyntax?>(repeating: nil, count: 6)
Array<RawSyntax?>(repeating: nil, count: 7)

internal init() {}

Expand All @@ -9505,6 +9515,11 @@ public struct FunctionTypeSyntaxBuilder {
layout[idx] = node.raw
}

public mutating func useAsyncKeyword(_ node: TokenSyntax) {
let idx = FunctionTypeSyntax.Cursor.asyncKeyword.rawValue
layout[idx] = node.raw
}

public mutating func useThrowsOrRethrowsKeyword(_ node: TokenSyntax) {
let idx = FunctionTypeSyntax.Cursor.throwsOrRethrowsKeyword.rawValue
layout[idx] = node.raw
Expand All @@ -9530,11 +9545,11 @@ public struct FunctionTypeSyntaxBuilder {
if (layout[2] == nil) {
layout[2] = RawSyntax.missingToken(TokenKind.rightParen)
}
if (layout[4] == nil) {
layout[4] = RawSyntax.missingToken(TokenKind.arrow)
}
if (layout[5] == nil) {
layout[5] = RawSyntax.missing(SyntaxKind.type)
layout[5] = RawSyntax.missingToken(TokenKind.arrow)
}
if (layout[6] == nil) {
layout[6] = RawSyntax.missing(SyntaxKind.type)
}

return .forRoot(RawSyntax.createAndCalcLength(kind: .functionType,
Expand Down
12 changes: 9 additions & 3 deletions Sources/SwiftSyntax/gyb_generated/SyntaxFactory.swift
Original file line number Diff line number Diff line change
Expand Up @@ -579,8 +579,9 @@ public enum SyntaxFactory {
], length: .zero, presence: .present))
return BinaryOperatorExprSyntax(data)
}
public static func makeArrowExpr(throwsToken: TokenSyntax?, arrowToken: TokenSyntax) -> ArrowExprSyntax {
public static func makeArrowExpr(asyncKeyword: TokenSyntax?, throwsToken: TokenSyntax?, arrowToken: TokenSyntax) -> ArrowExprSyntax {
let layout: [RawSyntax?] = [
asyncKeyword?.raw,
throwsToken?.raw,
arrowToken.raw,
]
Expand All @@ -594,6 +595,7 @@ public enum SyntaxFactory {
let data = SyntaxData.forRoot(RawSyntax.create(kind: .arrowExpr,
layout: [
nil,
nil,
RawSyntax.missingToken(TokenKind.arrow),
], length: .zero, presence: .present))
return ArrowExprSyntax(data)
Expand Down Expand Up @@ -1564,9 +1566,10 @@ public enum SyntaxFactory {
], length: .zero, presence: .present))
return ReturnClauseSyntax(data)
}
public static func makeFunctionSignature(input: ParameterClauseSyntax, throwsOrRethrowsKeyword: TokenSyntax?, output: ReturnClauseSyntax?) -> FunctionSignatureSyntax {
public static func makeFunctionSignature(input: ParameterClauseSyntax, asyncKeyword: TokenSyntax?, throwsOrRethrowsKeyword: TokenSyntax?, output: ReturnClauseSyntax?) -> FunctionSignatureSyntax {
let layout: [RawSyntax?] = [
input.raw,
asyncKeyword?.raw,
throwsOrRethrowsKeyword?.raw,
output?.raw,
]
Expand All @@ -1582,6 +1585,7 @@ public enum SyntaxFactory {
RawSyntax.missing(SyntaxKind.parameterClause),
nil,
nil,
nil,
], length: .zero, presence: .present))
return FunctionSignatureSyntax(data)
}
Expand Down Expand Up @@ -4291,11 +4295,12 @@ public enum SyntaxFactory {
], length: .zero, presence: .present))
return TupleTypeSyntax(data)
}
public static func makeFunctionType(leftParen: TokenSyntax, arguments: TupleTypeElementListSyntax, rightParen: TokenSyntax, throwsOrRethrowsKeyword: TokenSyntax?, arrow: TokenSyntax, returnType: TypeSyntax) -> FunctionTypeSyntax {
public static func makeFunctionType(leftParen: TokenSyntax, arguments: TupleTypeElementListSyntax, rightParen: TokenSyntax, asyncKeyword: TokenSyntax?, throwsOrRethrowsKeyword: TokenSyntax?, arrow: TokenSyntax, returnType: TypeSyntax) -> FunctionTypeSyntax {
let layout: [RawSyntax?] = [
leftParen.raw,
arguments.raw,
rightParen.raw,
asyncKeyword?.raw,
throwsOrRethrowsKeyword?.raw,
arrow.raw,
returnType.raw,
Expand All @@ -4313,6 +4318,7 @@ public enum SyntaxFactory {
RawSyntax.missing(SyntaxKind.tupleTypeElementList),
RawSyntax.missingToken(TokenKind.rightParen),
nil,
nil,
RawSyntax.missingToken(TokenKind.arrow),
RawSyntax.missing(SyntaxKind.type),
], length: .zero, presence: .present))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1581,6 +1581,7 @@ extension BinaryOperatorExprSyntax: CustomReflectable {

public struct ArrowExprSyntax: ExprSyntaxProtocol, SyntaxHashable {
enum Cursor: Int {
case asyncKeyword
case throwsToken
case arrowToken
}
Expand All @@ -1606,6 +1607,28 @@ public struct ArrowExprSyntax: ExprSyntaxProtocol, SyntaxHashable {
return Swift.type(of: self)
}

public var asyncKeyword: TokenSyntax? {
get {
let childData = data.child(at: Cursor.asyncKeyword,
parent: Syntax(self))
if childData == nil { return nil }
return TokenSyntax(childData!)
}
set(value) {
self = withAsyncKeyword(value)
}
}

/// Returns a copy of the receiver with its `asyncKeyword` replaced.
/// - param newChild: The new `asyncKeyword` to replace the node's
/// current `asyncKeyword`, if present.
public func withAsyncKeyword(
_ newChild: TokenSyntax?) -> ArrowExprSyntax {
let raw = newChild?.raw
let newData = data.replacingChild(raw, at: Cursor.asyncKeyword)
return ArrowExprSyntax(newData)
}

public var throwsToken: TokenSyntax? {
get {
let childData = data.child(at: Cursor.throwsToken,
Expand Down Expand Up @@ -1652,7 +1675,7 @@ public struct ArrowExprSyntax: ExprSyntaxProtocol, SyntaxHashable {

public func _validateLayout() {
let rawChildren = Array(RawSyntaxChildren(Syntax(self)))
assert(rawChildren.count == 2)
assert(rawChildren.count == 3)
// Check child #0 child is TokenSyntax or missing
if let raw = rawChildren[0].raw {
let info = rawChildren[0].syntaxInfo
Expand All @@ -1661,21 +1684,30 @@ public struct ArrowExprSyntax: ExprSyntaxProtocol, SyntaxHashable {
let syntaxChild = Syntax(syntaxData)
assert(syntaxChild.is(TokenSyntax.self))
}
// Check child #1 child is TokenSyntax
assert(rawChildren[1].raw != nil)
// Check child #1 child is TokenSyntax or missing
if let raw = rawChildren[1].raw {
let info = rawChildren[1].syntaxInfo
let absoluteRaw = AbsoluteRawSyntax(raw: raw, info: info)
let syntaxData = SyntaxData(absoluteRaw, parent: Syntax(self))
let syntaxChild = Syntax(syntaxData)
assert(syntaxChild.is(TokenSyntax.self))
}
// Check child #2 child is TokenSyntax
assert(rawChildren[2].raw != nil)
if let raw = rawChildren[2].raw {
let info = rawChildren[2].syntaxInfo
let absoluteRaw = AbsoluteRawSyntax(raw: raw, info: info)
let syntaxData = SyntaxData(absoluteRaw, parent: Syntax(self))
let syntaxChild = Syntax(syntaxData)
assert(syntaxChild.is(TokenSyntax.self))
}
}
}

extension ArrowExprSyntax: CustomReflectable {
public var customMirror: Mirror {
return Mirror(self, children: [
"asyncKeyword": asyncKeyword.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any,
"throwsToken": throwsToken.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any,
"arrowToken": Syntax(arrowToken).asProtocol(SyntaxProtocol.self),
])
Expand Down
36 changes: 34 additions & 2 deletions Sources/SwiftSyntax/gyb_generated/syntax_nodes/SyntaxNodes.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2606,6 +2606,7 @@ extension ReturnClauseSyntax: CustomReflectable {
public struct FunctionSignatureSyntax: SyntaxProtocol, SyntaxHashable {
enum Cursor: Int {
case input
case asyncKeyword
case throwsOrRethrowsKeyword
case output
}
Expand Down Expand Up @@ -2652,6 +2653,28 @@ public struct FunctionSignatureSyntax: SyntaxProtocol, SyntaxHashable {
return FunctionSignatureSyntax(newData)
}

public var asyncKeyword: TokenSyntax? {
get {
let childData = data.child(at: Cursor.asyncKeyword,
parent: Syntax(self))
if childData == nil { return nil }
return TokenSyntax(childData!)
}
set(value) {
self = withAsyncKeyword(value)
}
}

/// Returns a copy of the receiver with its `asyncKeyword` replaced.
/// - param newChild: The new `asyncKeyword` to replace the node's
/// current `asyncKeyword`, if present.
public func withAsyncKeyword(
_ newChild: TokenSyntax?) -> FunctionSignatureSyntax {
let raw = newChild?.raw
let newData = data.replacingChild(raw, at: Cursor.asyncKeyword)
return FunctionSignatureSyntax(newData)
}

public var throwsOrRethrowsKeyword: TokenSyntax? {
get {
let childData = data.child(at: Cursor.throwsOrRethrowsKeyword,
Expand Down Expand Up @@ -2699,7 +2722,7 @@ public struct FunctionSignatureSyntax: SyntaxProtocol, SyntaxHashable {

public func _validateLayout() {
let rawChildren = Array(RawSyntaxChildren(Syntax(self)))
assert(rawChildren.count == 3)
assert(rawChildren.count == 4)
// Check child #0 child is ParameterClauseSyntax
assert(rawChildren[0].raw != nil)
if let raw = rawChildren[0].raw {
Expand All @@ -2717,12 +2740,20 @@ public struct FunctionSignatureSyntax: SyntaxProtocol, SyntaxHashable {
let syntaxChild = Syntax(syntaxData)
assert(syntaxChild.is(TokenSyntax.self))
}
// Check child #2 child is ReturnClauseSyntax or missing
// Check child #2 child is TokenSyntax or missing
if let raw = rawChildren[2].raw {
let info = rawChildren[2].syntaxInfo
let absoluteRaw = AbsoluteRawSyntax(raw: raw, info: info)
let syntaxData = SyntaxData(absoluteRaw, parent: Syntax(self))
let syntaxChild = Syntax(syntaxData)
assert(syntaxChild.is(TokenSyntax.self))
}
// Check child #3 child is ReturnClauseSyntax or missing
if let raw = rawChildren[3].raw {
let info = rawChildren[3].syntaxInfo
let absoluteRaw = AbsoluteRawSyntax(raw: raw, info: info)
let syntaxData = SyntaxData(absoluteRaw, parent: Syntax(self))
let syntaxChild = Syntax(syntaxData)
assert(syntaxChild.is(ReturnClauseSyntax.self))
}
}
Expand All @@ -2732,6 +2763,7 @@ extension FunctionSignatureSyntax: CustomReflectable {
public var customMirror: Mirror {
return Mirror(self, children: [
"input": Syntax(input).asProtocol(SyntaxProtocol.self),
"asyncKeyword": asyncKeyword.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any,
"throwsOrRethrowsKeyword": throwsOrRethrowsKeyword.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any,
"output": output.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any,
])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1444,6 +1444,7 @@ public struct FunctionTypeSyntax: TypeSyntaxProtocol, SyntaxHashable {
case leftParen
case arguments
case rightParen
case asyncKeyword
case throwsOrRethrowsKeyword
case arrow
case returnType
Expand Down Expand Up @@ -1552,6 +1553,28 @@ public struct FunctionTypeSyntax: TypeSyntaxProtocol, SyntaxHashable {
return FunctionTypeSyntax(newData)
}

public var asyncKeyword: TokenSyntax? {
get {
let childData = data.child(at: Cursor.asyncKeyword,
parent: Syntax(self))
if childData == nil { return nil }
return TokenSyntax(childData!)
}
set(value) {
self = withAsyncKeyword(value)
}
}

/// Returns a copy of the receiver with its `asyncKeyword` replaced.
/// - param newChild: The new `asyncKeyword` to replace the node's
/// current `asyncKeyword`, if present.
public func withAsyncKeyword(
_ newChild: TokenSyntax?) -> FunctionTypeSyntax {
let raw = newChild?.raw
let newData = data.replacingChild(raw, at: Cursor.asyncKeyword)
return FunctionTypeSyntax(newData)
}

public var throwsOrRethrowsKeyword: TokenSyntax? {
get {
let childData = data.child(at: Cursor.throwsOrRethrowsKeyword,
Expand Down Expand Up @@ -1619,7 +1642,7 @@ public struct FunctionTypeSyntax: TypeSyntaxProtocol, SyntaxHashable {

public func _validateLayout() {
let rawChildren = Array(RawSyntaxChildren(Syntax(self)))
assert(rawChildren.count == 6)
assert(rawChildren.count == 7)
// Check child #0 child is TokenSyntax
assert(rawChildren[0].raw != nil)
if let raw = rawChildren[0].raw {
Expand Down Expand Up @@ -1655,22 +1678,30 @@ public struct FunctionTypeSyntax: TypeSyntaxProtocol, SyntaxHashable {
let syntaxChild = Syntax(syntaxData)
assert(syntaxChild.is(TokenSyntax.self))
}
// Check child #4 child is TokenSyntax
assert(rawChildren[4].raw != nil)
// Check child #4 child is TokenSyntax or missing
if let raw = rawChildren[4].raw {
let info = rawChildren[4].syntaxInfo
let absoluteRaw = AbsoluteRawSyntax(raw: raw, info: info)
let syntaxData = SyntaxData(absoluteRaw, parent: Syntax(self))
let syntaxChild = Syntax(syntaxData)
assert(syntaxChild.is(TokenSyntax.self))
}
// Check child #5 child is TypeSyntax
// Check child #5 child is TokenSyntax
assert(rawChildren[5].raw != nil)
if let raw = rawChildren[5].raw {
let info = rawChildren[5].syntaxInfo
let absoluteRaw = AbsoluteRawSyntax(raw: raw, info: info)
let syntaxData = SyntaxData(absoluteRaw, parent: Syntax(self))
let syntaxChild = Syntax(syntaxData)
assert(syntaxChild.is(TokenSyntax.self))
}
// Check child #6 child is TypeSyntax
assert(rawChildren[6].raw != nil)
if let raw = rawChildren[6].raw {
let info = rawChildren[6].syntaxInfo
let absoluteRaw = AbsoluteRawSyntax(raw: raw, info: info)
let syntaxData = SyntaxData(absoluteRaw, parent: Syntax(self))
let syntaxChild = Syntax(syntaxData)
assert(syntaxChild.is(TypeSyntax.self))
}
}
Expand All @@ -1682,6 +1713,7 @@ extension FunctionTypeSyntax: CustomReflectable {
"leftParen": Syntax(leftParen).asProtocol(SyntaxProtocol.self),
"arguments": Syntax(arguments).asProtocol(SyntaxProtocol.self),
"rightParen": Syntax(rightParen).asProtocol(SyntaxProtocol.self),
"asyncKeyword": asyncKeyword.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any,
"throwsOrRethrowsKeyword": throwsOrRethrowsKeyword.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any,
"arrow": Syntax(arrow).asProtocol(SyntaxProtocol.self),
"returnType": Syntax(returnType).asProtocol(SyntaxProtocol.self),
Expand Down