Skip to content

Commit d4c99e3

Browse files
committed
Eliminate the use of the existential SyntaxProtocol
1 parent 9621183 commit d4c99e3

File tree

5 files changed

+22
-20
lines changed

5 files changed

+22
-20
lines changed

Sources/SwiftOperatorPrecedence/OperatorPrecedence+Folding.swift

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@ extension OperatorPrecedence {
2121
private struct PrecedenceBound {
2222
let groupName: PrecedenceGroupName?
2323
let isStrict: Bool
24-
let syntax: SyntaxProtocol?
24+
let syntax: Syntax?
2525
}
2626

2727
/// Determine whether we should consider an operator in the given group
2828
/// based on the specified bound.
2929
private func shouldConsiderOperator(
3030
fromGroup groupName: PrecedenceGroupName?,
3131
in bound: PrecedenceBound,
32-
operatorSyntax: SyntaxProtocol?,
32+
operatorSyntax: Syntax,
3333
errorHandler: OperatorPrecedenceErrorHandler = { throw $0 }
3434
) rethrows -> Bool {
3535
guard let boundGroupName = bound.groupName else {
@@ -60,7 +60,7 @@ extension OperatorPrecedence {
6060
if let binaryExpr = expr.as(BinaryOperatorExprSyntax.self) {
6161
let operatorName = binaryExpr.operatorToken.text
6262
return try lookupOperatorPrecedenceGroupName(
63-
operatorName, referencedFrom: binaryExpr.operatorToken,
63+
operatorName, referencedFrom: Syntax(binaryExpr.operatorToken),
6464
errorHandler: errorHandler
6565
)
6666
}
@@ -176,9 +176,9 @@ extension OperatorPrecedence {
176176
/// Determine the associativity between two precedence groups.
177177
private func associativity(
178178
firstGroup: PrecedenceGroupName?,
179-
firstGroupSyntax: SyntaxProtocol?,
179+
firstGroupSyntax: Syntax?,
180180
secondGroup: PrecedenceGroupName?,
181-
secondGroupSyntax: SyntaxProtocol?,
181+
secondGroupSyntax: Syntax?,
182182
errorHandler: OperatorPrecedenceErrorHandler = { throw $0 }
183183
) rethrows -> Associativity {
184184
guard let firstGroup = firstGroup, let secondGroup = secondGroup else {
@@ -235,7 +235,7 @@ extension OperatorPrecedence {
235235
let opPrecedence = try lookupPrecedence(
236236
of: op, errorHandler: errorHandler)
237237
if try !shouldConsiderOperator(
238-
fromGroup: opPrecedence, in: bound, operatorSyntax: op
238+
fromGroup: opPrecedence, in: bound, operatorSyntax: Syntax(op)
239239
) {
240240
return nil
241241
}
@@ -280,17 +280,17 @@ extension OperatorPrecedence {
280280
// If the second operator's precedence is lower than the
281281
// precedence bound, break out of the loop.
282282
if try !shouldConsiderOperator(
283-
fromGroup: op2Precedence, in: bound, operatorSyntax: op1,
283+
fromGroup: op2Precedence, in: bound, operatorSyntax: Syntax(op1),
284284
errorHandler: errorHandler
285285
) {
286286
break
287287
}
288288

289289
let associativity = try associativity(
290290
firstGroup: op1Precedence,
291-
firstGroupSyntax: op1,
291+
firstGroupSyntax: Syntax(op1),
292292
secondGroup: op2Precedence,
293-
secondGroupSyntax: op2,
293+
secondGroupSyntax: Syntax(op2),
294294
errorHandler: errorHandler
295295
)
296296

@@ -313,7 +313,7 @@ extension OperatorPrecedence {
313313
rhs = try fold(
314314
rhs, rest: &rest,
315315
bound: PrecedenceBound(
316-
groupName: op1Precedence, isStrict: true, syntax: op1
316+
groupName: op1Precedence, isStrict: true, syntax: Syntax(op1)
317317
),
318318
errorHandler: errorHandler
319319
)
@@ -324,7 +324,7 @@ extension OperatorPrecedence {
324324
rhs = try fold(
325325
rhs, rest: &rest,
326326
bound: PrecedenceBound(
327-
groupName: op1Precedence, isStrict: false, syntax: op1
327+
groupName: op1Precedence, isStrict: false, syntax: Syntax(op1)
328328
),
329329
errorHandler: errorHandler
330330
)

Sources/SwiftOperatorPrecedence/OperatorPrecedence.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ extension OperatorPrecedence {
6464
/// Look for the precedence group corresponding to the given operator.
6565
func lookupOperatorPrecedenceGroupName(
6666
_ operatorName: OperatorName,
67-
referencedFrom syntax: SyntaxProtocol?,
67+
referencedFrom syntax: Syntax?,
6868
errorHandler: OperatorPrecedenceErrorHandler = { throw $0 }
6969
) rethrows -> PrecedenceGroupName? {
7070
guard let op = operators[operatorName] else {

Sources/SwiftOperatorPrecedence/OperatorPrecedenceError+Diagnostics.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,9 @@ extension OperatorPrecedenceError : DiagnosticMessage {
6868
}
6969

7070
extension OperatorPrecedenceError {
71-
private func fixupDiagnosticDisplayNode(_ node: SyntaxProtocol?) -> Syntax {
71+
private func fixupDiagnosticDisplayNode<Node: SyntaxProtocol>(
72+
_ node: Node?
73+
) -> Syntax {
7274
if let node = node {
7375
return Syntax(node)
7476
}

Sources/SwiftOperatorPrecedence/OperatorPrecedenceError.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ public enum OperatorPrecedenceError: Error {
1818
case groupAlreadyExists(existing: PrecedenceGroup, new: PrecedenceGroup)
1919

2020
/// The named precedence group is missing from the precedence graph.
21-
case missingGroup(PrecedenceGroupName, referencedFrom: SyntaxProtocol?)
21+
case missingGroup(PrecedenceGroupName, referencedFrom: Syntax?)
2222

2323
/// Error produced when a given operator already exists.
2424
case operatorAlreadyExists(existing: Operator, new: Operator)
2525

2626
/// The named operator is missing from the precedence graph.
27-
case missingOperator(OperatorName, referencedFrom: SyntaxProtocol?)
27+
case missingOperator(OperatorName, referencedFrom: Syntax?)
2828

2929
/// No associativity relationship between operators.
3030
case incomparableOperators(

Sources/SwiftOperatorPrecedence/PrecedenceGraph.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ struct PrecedenceGraph {
6161
/// (fromGroup, fromSyntax) and following precedence groups in the
6262
/// specified direction.
6363
private func searchRelationships(
64-
initialGroupName: PrecedenceGroupName, initialSyntax: SyntaxProtocol?,
64+
initialGroupName: PrecedenceGroupName, initialSyntax: Syntax?,
6565
targetGroupName: PrecedenceGroupName,
6666
direction: PrecedenceRelation.Kind,
6767
errorHandler: OperatorPrecedenceErrorHandler
@@ -70,7 +70,7 @@ struct PrecedenceGraph {
7070
// the graph. This detects cycles and prevents extraneous work.
7171
var groupsSeen: Set<PrecedenceGroupName> = []
7272

73-
var stack: [(PrecedenceGroupName, SyntaxProtocol?)] =
73+
var stack: [(PrecedenceGroupName, Syntax?)] =
7474
[(initialGroupName, initialSyntax)]
7575
while let (currentGroupName, currentGroupSyntax) = stack.popLast() {
7676
guard let currentGroup = lookupGroup(currentGroupName) else {
@@ -94,7 +94,7 @@ struct PrecedenceGraph {
9494
}
9595

9696
if groupsSeen.insert(otherGroupName).inserted {
97-
stack.append((otherGroupName, relation.syntax))
97+
stack.append((otherGroupName, relation.syntax.map { Syntax($0) }))
9898
}
9999
}
100100
}
@@ -114,8 +114,8 @@ struct PrecedenceGraph {
114114
func precedence(
115115
relating startGroupName: PrecedenceGroupName,
116116
to endGroupName: PrecedenceGroupName,
117-
startSyntax: SyntaxProtocol?,
118-
endSyntax: SyntaxProtocol?,
117+
startSyntax: Syntax?,
118+
endSyntax: Syntax?,
119119
errorHandler: OperatorPrecedenceErrorHandler = { throw $0 }
120120
) rethrows -> Precedence {
121121
if startGroupName == endGroupName {

0 commit comments

Comments
 (0)