Skip to content

Commit e102660

Browse files
committed
Rename OperatorPrecedence to OperatorTable and improve its documentation.
1 parent 99eacab commit e102660

File tree

5 files changed

+34
-29
lines changed

5 files changed

+34
-29
lines changed

Sources/SwiftOperatorPrecedence/OperatorPrecedence+Defaults.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
import SwiftSyntax
1313

1414
/// Prefabricated operator precedence graphs.
15-
extension OperatorPrecedence {
15+
extension OperatorTable {
1616
/// Operator precedence graph for the logical operators '&&' and '||', for
1717
/// example as it is used in `#if` processing.
18-
public static var logicalOperators: OperatorPrecedence {
18+
public static var logicalOperators: OperatorTable {
1919
let precedenceGroups: [PrecedenceGroup] = [
2020
PrecedenceGroup(name: "LogicalConjunctionPrecedence",
2121
associativity: .left, assignment: false,
@@ -32,7 +32,7 @@ extension OperatorPrecedence {
3232
precedenceGroup: "LogicalDisjunctionPrecedence")
3333
]
3434

35-
return try! OperatorPrecedence(
35+
return try! OperatorTable(
3636
precedenceGroups: precedenceGroups, operators: operators)
3737
}
3838

@@ -44,7 +44,7 @@ extension OperatorPrecedence {
4444
/// without requiring access to the standard library source code. However,
4545
/// because it does not incorporate user-defined operators, it will only
4646
/// ever be useful for a quick approximation.
47-
public static var standardOperators: OperatorPrecedence {
47+
public static var standardOperators: OperatorTable {
4848
let precedenceGroups: [PrecedenceGroup] = [
4949
PrecedenceGroup(
5050
name: "AssignmentPrecedence",
@@ -400,7 +400,7 @@ extension OperatorPrecedence {
400400
)
401401
]
402402

403-
return try! OperatorPrecedence(
403+
return try! OperatorTable(
404404
precedenceGroups: precedenceGroups, operators: operators)
405405
}
406406
}

Sources/SwiftOperatorPrecedence/OperatorPrecedence+Folding.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ extension ExprSyntax {
1717
self.is(UnresolvedIsExprSyntax.self) || self.is(UnresolvedAsExprSyntax.self)
1818
}
1919
}
20-
extension OperatorPrecedence {
20+
extension OperatorTable {
2121
private struct PrecedenceBound {
2222
let groupName: PrecedenceGroupName?
2323
let isStrict: Bool
@@ -395,11 +395,11 @@ extension OperatorPrecedence {
395395
/// also throw.
396396
var firstFatalError: OperatorPrecedenceError? = nil
397397

398-
let opPrecedence: OperatorPrecedence
398+
let opPrecedence: OperatorTable
399399
let errorHandler: OperatorPrecedenceErrorHandler
400400

401401
init(
402-
opPrecedence: OperatorPrecedence,
402+
opPrecedence: OperatorTable,
403403
errorHandler: @escaping OperatorPrecedenceErrorHandler
404404
) {
405405
self.opPrecedence = opPrecedence

Sources/SwiftOperatorPrecedence/OperatorPrecedence+Semantics.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,18 +82,18 @@ extension Operator {
8282
}
8383
}
8484

85-
extension OperatorPrecedence {
85+
extension OperatorTable {
8686
/// Integrate the operator and precedence group declarations from the given
8787
/// source file into the operator precedence tables.
8888
public mutating func addSourceFile(
8989
_ sourceFile: SourceFileSyntax,
9090
errorHandler: OperatorPrecedenceErrorHandler = { throw $0 }
9191
) rethrows {
9292
class OperatorAndGroupVisitor : SyntaxAnyVisitor {
93-
var opPrecedence: OperatorPrecedence
93+
var opPrecedence: OperatorTable
9494
var errors: [OperatorPrecedenceError] = []
9595

96-
init(opPrecedence: OperatorPrecedence) {
96+
init(opPrecedence: OperatorTable) {
9797
self.opPrecedence = opPrecedence
9898
super.init(viewMode: .fixedUp)
9999
}

Sources/SwiftOperatorPrecedence/OperatorPrecedence.swift renamed to Sources/SwiftOperatorPrecedence/OperatorTable.swift

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,15 @@
1111
//===----------------------------------------------------------------------===//
1212
import SwiftSyntax
1313

14-
/// Maintains information about operators and their relative precedence,
15-
/// providing the core operations for "folding" sequence expression syntax into
16-
/// a structured expression syntax tree.
17-
public struct OperatorPrecedence {
14+
/// Maintains and validates information about all operators in a Swift program.
15+
///
16+
/// The operator table keep track of the various operator and precedence group
17+
/// declarations within a program. Its core operations involve processing the
18+
/// operator and precedence group declarations from a source tree into a
19+
/// semantic representation, validating the correctness of those declarations,
20+
/// and "folding" sequence expression syntax into a structured expression
21+
/// syntax tree.
22+
public struct OperatorTable {
1823
var precedenceGraph: PrecedenceGraph = .init()
1924
var operators: [OperatorName : Operator] = [:]
2025

@@ -60,7 +65,7 @@ public struct OperatorPrecedence {
6065
}
6166
}
6267

63-
extension OperatorPrecedence {
68+
extension OperatorTable {
6469
/// Look for the precedence group corresponding to the given operator.
6570
func lookupOperatorPrecedenceGroupName(
6671
_ operatorName: OperatorName,

Tests/SwiftOperatorPrecedenceTest/OperatorPrecedence.swift renamed to Tests/SwiftOperatorPrecedenceTest/OperatorTable.swift

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,15 @@ class ExplicitParenFolder : SyntaxRewriter {
4848
return ExprSyntax(node)
4949
}
5050

51-
return OperatorPrecedence.makeBinaryOperationExpr(
51+
return OperatorTable.makeBinaryOperationExpr(
5252
lhs: visit(Syntax(leftOperand)).as(ExprSyntax.self)!,
5353
op: visit(Syntax(middleExpr)).as(ExprSyntax.self)!,
5454
rhs: visit(Syntax(rightOperand)).as(ExprSyntax.self)!
5555
)
5656
}
5757
}
5858

59-
extension OperatorPrecedence {
59+
extension OperatorTable {
6060
/// Assert that parsing and folding the given "unfolded" source code
6161
/// produces the same syntax tree as the fully-parenthesized version of
6262
/// the same source.
@@ -90,7 +90,7 @@ extension OperatorPrecedence {
9090

9191
public class OperatorPrecedenceTests: XCTestCase {
9292
func testLogicalExprsSingle() throws {
93-
let opPrecedence = OperatorPrecedence.logicalOperators
93+
let opPrecedence = OperatorTable.logicalOperators
9494
let parsed = try Parser.parse(source: "x && y || w && v || z")
9595
let sequenceExpr =
9696
parsed.statements.first!.item.as(SequenceExprSyntax.self)!
@@ -100,13 +100,13 @@ public class OperatorPrecedenceTests: XCTestCase {
100100
}
101101

102102
func testLogicalExprs() throws {
103-
let opPrecedence = OperatorPrecedence.logicalOperators
103+
let opPrecedence = OperatorTable.logicalOperators
104104
try opPrecedence.assertExpectedFold("x && y || w", "((x && y) || w)")
105105
try opPrecedence.assertExpectedFold("x || y && w", "(x || (y && w))")
106106
}
107107

108108
func testSwiftExprs() throws {
109-
let opPrecedence = OperatorPrecedence.standardOperators
109+
let opPrecedence = OperatorTable.standardOperators
110110
let parsed = try Parser.parse(source: "(x + y > 17) && x && y || w && v || z")
111111
let sequenceExpr =
112112
parsed.statements.first!.item.as(SequenceExprSyntax.self)!
@@ -116,27 +116,27 @@ public class OperatorPrecedenceTests: XCTestCase {
116116
}
117117

118118
func testNestedSwiftExprs() throws {
119-
let opPrecedence = OperatorPrecedence.standardOperators
119+
let opPrecedence = OperatorTable.standardOperators
120120
let parsed = try Parser.parse(source: "(x + y > 17) && x && y || w && v || z")
121121
let foldedAll = try opPrecedence.foldAll(parsed)
122122
XCTAssertEqual("\(foldedAll)", "(x + y > 17) && x && y || w && v || z")
123123
XCTAssertFalse(foldedAll.containsExprSequence)
124124
}
125125

126126
func testAssignExprs() throws {
127-
let opPrecedence = OperatorPrecedence.standardOperators
127+
let opPrecedence = OperatorTable.standardOperators
128128
try opPrecedence.assertExpectedFold("a = b + c", "(a = (b + c))")
129129
try opPrecedence.assertExpectedFold("a = b = c", "(a = (b = c))")
130130
}
131131

132132
func testCastExprs() throws {
133-
let opPrecedence = OperatorPrecedence.standardOperators
133+
let opPrecedence = OperatorTable.standardOperators
134134
try opPrecedence.assertExpectedFold("a is (b)", "(a is (b))")
135135
try opPrecedence.assertExpectedFold("a as c == nil", "((a as c) == nil)")
136136
}
137137

138138
func testArrowExpr() throws {
139-
let opPrecedence = OperatorPrecedence.standardOperators
139+
let opPrecedence = OperatorTable.standardOperators
140140
try opPrecedence.assertExpectedFold(
141141
"a = b -> c -> d",
142142
"(a = (b -> (c -> d)))"
@@ -165,7 +165,7 @@ public class OperatorPrecedenceTests: XCTestCase {
165165
"""
166166

167167
let parsedOperatorPrecedence = try Parser.parse(source: logicalOperatorSources)
168-
var opPrecedence = OperatorPrecedence()
168+
var opPrecedence = OperatorTable()
169169
try opPrecedence.addSourceFile(parsedOperatorPrecedence)
170170

171171
let parsed = try Parser.parse(source: "x && y || w && v || z")
@@ -195,7 +195,7 @@ public class OperatorPrecedenceTests: XCTestCase {
195195

196196
let parsedOperatorPrecedence = try Parser.parse(source: sources)
197197

198-
var opPrecedence = OperatorPrecedence()
198+
var opPrecedence = OperatorTable()
199199
var errors: [OperatorPrecedenceError] = []
200200
opPrecedence.addSourceFile(parsedOperatorPrecedence) { error in
201201
errors.append(error)
@@ -244,7 +244,7 @@ public class OperatorPrecedenceTests: XCTestCase {
244244
infix operator ++: D
245245
""")
246246

247-
var opPrecedence = OperatorPrecedence()
247+
var opPrecedence = OperatorTable()
248248
try opPrecedence.addSourceFile(parsedOperatorPrecedence)
249249

250250
do {
@@ -331,7 +331,7 @@ public class OperatorPrecedenceTests: XCTestCase {
331331
}
332332

333333
func testTernaryExpr() throws {
334-
let opPrecedence = OperatorPrecedence.standardOperators
334+
let opPrecedence = OperatorTable.standardOperators
335335
try opPrecedence.assertExpectedFold(
336336
"b + c ? y : z ? z2 : z3",
337337
"((b + c) ? y : (z ? z2 : z3))")

0 commit comments

Comments
 (0)