Skip to content

Commit 7e9caf2

Browse files
committed
Add convenience apis for common binary operators
1 parent a0ada01 commit 7e9caf2

File tree

2 files changed

+223
-0
lines changed

2 files changed

+223
-0
lines changed

Sources/SwiftSyntax/SyntaxFactory.swift.gyb

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,126 @@ public enum SyntaxFactory {
196196
trailingTrivia: trailingTrivia)
197197
}
198198

199+
public static func makeNonEqualityOperator(leadingTrivia: Trivia = [],
200+
trailingTrivia: Trivia = []) -> TokenSyntax {
201+
return makeToken(.spacedBinaryOperator("!="),
202+
presence: .present,
203+
leadingTrivia: leadingTrivia,
204+
trailingTrivia: trailingTrivia)
205+
}
206+
207+
public static func makeAdditionOperator(leadingTrivia: Trivia = [],
208+
trailingTrivia: Trivia = []) -> TokenSyntax {
209+
return makeToken(.spacedBinaryOperator("+"),
210+
presence: .present,
211+
leadingTrivia: leadingTrivia,
212+
trailingTrivia: trailingTrivia)
213+
}
214+
215+
public static func makeSubtractionOperator(leadingTrivia: Trivia = [],
216+
trailingTrivia: Trivia = []) -> TokenSyntax {
217+
return makeToken(.spacedBinaryOperator("-"),
218+
presence: .present,
219+
leadingTrivia: leadingTrivia,
220+
trailingTrivia: trailingTrivia)
221+
}
222+
223+
public static func makeMultiplicationOperator(leadingTrivia: Trivia = [],
224+
trailingTrivia: Trivia = []) -> TokenSyntax {
225+
return makeToken(.spacedBinaryOperator("*"),
226+
presence: .present,
227+
leadingTrivia: leadingTrivia,
228+
trailingTrivia: trailingTrivia)
229+
}
230+
231+
public static func makeDivisionOperator(leadingTrivia: Trivia = [],
232+
trailingTrivia: Trivia = []) -> TokenSyntax {
233+
return makeToken(.spacedBinaryOperator("/"),
234+
presence: .present,
235+
leadingTrivia: leadingTrivia,
236+
trailingTrivia: trailingTrivia)
237+
}
238+
239+
public static func makeRemainderOperator(leadingTrivia: Trivia = [],
240+
trailingTrivia: Trivia = []) -> TokenSyntax {
241+
return makeToken(.spacedBinaryOperator("%"),
242+
presence: .present,
243+
leadingTrivia: leadingTrivia,
244+
trailingTrivia: trailingTrivia)
245+
}
246+
247+
public static func makeAdditionAssignmentOperator(leadingTrivia: Trivia = [],
248+
trailingTrivia: Trivia = []) -> TokenSyntax {
249+
return makeToken(.spacedBinaryOperator("+="),
250+
presence: .present,
251+
leadingTrivia: leadingTrivia,
252+
trailingTrivia: trailingTrivia)
253+
}
254+
255+
public static func makeSubtractionAssignmentOperator(leadingTrivia: Trivia = [],
256+
trailingTrivia: Trivia = []) -> TokenSyntax {
257+
return makeToken(.spacedBinaryOperator("-="),
258+
presence: .present,
259+
leadingTrivia: leadingTrivia,
260+
trailingTrivia: trailingTrivia)
261+
}
262+
263+
public static func makeMultiplicationAssignmentOperator(leadingTrivia: Trivia = [],
264+
trailingTrivia: Trivia = []) -> TokenSyntax {
265+
return makeToken(.spacedBinaryOperator("*="),
266+
presence: .present,
267+
leadingTrivia: leadingTrivia,
268+
trailingTrivia: trailingTrivia)
269+
}
270+
271+
public static func makeDivisionAssignmentOperator(leadingTrivia: Trivia = [],
272+
trailingTrivia: Trivia = []) -> TokenSyntax {
273+
return makeToken(.spacedBinaryOperator("/="),
274+
presence: .present,
275+
leadingTrivia: leadingTrivia,
276+
trailingTrivia: trailingTrivia)
277+
}
278+
279+
public static func makeRemainderAssignmentOperator(leadingTrivia: Trivia = [],
280+
trailingTrivia: Trivia = []) -> TokenSyntax {
281+
return makeToken(.spacedBinaryOperator("%="),
282+
presence: .present,
283+
leadingTrivia: leadingTrivia,
284+
trailingTrivia: trailingTrivia)
285+
}
286+
287+
public static func makeLessThanOperator(leadingTrivia: Trivia = [],
288+
trailingTrivia: Trivia = []) -> TokenSyntax {
289+
return makeToken(.spacedBinaryOperator("<"),
290+
presence: .present,
291+
leadingTrivia: leadingTrivia,
292+
trailingTrivia: trailingTrivia)
293+
}
294+
295+
public static func makeGreaterThanOperator(leadingTrivia: Trivia = [],
296+
trailingTrivia: Trivia = []) -> TokenSyntax {
297+
return makeToken(.spacedBinaryOperator(">"),
298+
presence: .present,
299+
leadingTrivia: leadingTrivia,
300+
trailingTrivia: trailingTrivia)
301+
}
302+
303+
public static func makeLessThanOrEqualToOperator(leadingTrivia: Trivia = [],
304+
trailingTrivia: Trivia = []) -> TokenSyntax {
305+
return makeToken(.spacedBinaryOperator("<="),
306+
presence: .present,
307+
leadingTrivia: leadingTrivia,
308+
trailingTrivia: trailingTrivia)
309+
}
310+
311+
public static func makeGreaterThanOrEqualToOperator(leadingTrivia: Trivia = [],
312+
trailingTrivia: Trivia = []) -> TokenSyntax {
313+
return makeToken(.spacedBinaryOperator(">="),
314+
presence: .present,
315+
leadingTrivia: leadingTrivia,
316+
trailingTrivia: trailingTrivia)
317+
}
318+
199319
public static func makeStringLiteralExpr(_ text: String,
200320
leadingTrivia: Trivia = [],
201321
trailingTrivia: Trivia = []) -> StringLiteralExprSyntax {

Tests/SwiftSyntaxTest/SyntaxFactory.swift

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,19 @@ fileprivate func cannedStructDecl() -> StructDeclSyntax {
1616
}
1717
}
1818

19+
fileprivate func infixOperationExprList(with operatorToken: TokenSyntax) -> ExprListSyntax {
20+
let first = IntegerLiteralExprSyntax {
21+
$0.useDigits(SyntaxFactory.makeIntegerLiteral("1", trailingTrivia: .spaces(1)))
22+
}
23+
let op = BinaryOperatorExprSyntax {
24+
$0.useOperatorToken(operatorToken.withTrailingTrivia(.spaces(1)))
25+
}
26+
let second = IntegerLiteralExprSyntax {
27+
$0.useDigits(SyntaxFactory.makeIntegerLiteral("1"))
28+
}
29+
return SyntaxFactory.makeExprList([first, op, second])
30+
}
31+
1932
public class SyntaxFactoryAPITestCase: XCTestCase {
2033

2134
public static let allTests = [
@@ -24,6 +37,21 @@ public class SyntaxFactoryAPITestCase: XCTestCase {
2437
("testFunctionCallSyntaxBuilder", testFunctionCallSyntaxBuilder),
2538
("testWithOptionalChild", testWithOptionalChild),
2639
("testUnknownSyntax", testUnknownSyntax),
40+
("testMakeNonEqualityOperator", testMakeNonEqualityOperator),
41+
("testMakeAdditionOperator", testMakeAdditionOperator),
42+
("testMakeSubtractionOperator", testMakeSubtractionOperator),
43+
("testMakeMultiplicationOperator", testMakeMultiplicationOperator),
44+
("testMakeDivisionOperator", testMakeDivisionOperator),
45+
("testMakeRemainderOperator", testMakeRemainderOperator),
46+
("testMakeAdditionAssignmentOperator", testMakeAdditionAssignmentOperator),
47+
("testMakeSubtractionAssignmentOperator", testMakeSubtractionAssignmentOperator),
48+
("testMakeMultiplicationAssignmentOperator", testMakeMultiplicationAssignmentOperator),
49+
("testMakeDivisionAssignmentOperator", testMakeDivisionAssignmentOperator),
50+
("testMakeRemainderAssignmentOperator", testMakeRemainderAssignmentOperator),
51+
("testMakeLessThanOperator", testMakeLessThanOperator),
52+
("testMakeGreaterThanOperator", testMakeGreaterThanOperator),
53+
("testMakeLessThanOrEqualToOperator", testMakeLessThanOrEqualToOperator),
54+
("testMakeGreaterThanOrEqualToOperator", testMakeGreaterThanOrEqualToOperator),
2755
]
2856

2957
public func testGenerated() {
@@ -160,4 +188,79 @@ public class SyntaxFactoryAPITestCase: XCTestCase {
160188
XCTAssertNoThrow(try SyntaxVerifier.verify(expr))
161189
XCTAssertThrowsError(try SyntaxVerifier.verify(unknown))
162190
}
191+
192+
public func testMakeNonEqualityOperator() {
193+
let exprList = infixOperationExprList(with: SyntaxFactory.makeNonEqualityOperator())
194+
XCTAssertEqual("\(exprList)", "1 != 1")
195+
}
196+
197+
public func testMakeAdditionOperator() {
198+
let exprList = infixOperationExprList(with: SyntaxFactory.makeAdditionOperator())
199+
XCTAssertEqual("\(exprList)", "1 + 1")
200+
}
201+
202+
public func testMakeSubtractionOperator() {
203+
let exprList = infixOperationExprList(with: SyntaxFactory.makeSubtractionOperator())
204+
XCTAssertEqual("\(exprList)", "1 - 1")
205+
}
206+
207+
public func testMakeMultiplicationOperator() {
208+
let exprList = infixOperationExprList(with: SyntaxFactory.makeMultiplicationOperator())
209+
XCTAssertEqual("\(exprList)", "1 * 1")
210+
}
211+
212+
public func testMakeDivisionOperator() {
213+
let exprList = infixOperationExprList(with: SyntaxFactory.makeDivisionOperator())
214+
XCTAssertEqual("\(exprList)", "1 / 1")
215+
}
216+
217+
public func testMakeRemainderOperator() {
218+
let exprList = infixOperationExprList(with: SyntaxFactory.makeRemainderOperator())
219+
XCTAssertEqual("\(exprList)", "1 % 1")
220+
}
221+
222+
public func testMakeAdditionAssignmentOperator() {
223+
let exprList = infixOperationExprList(with: SyntaxFactory.makeAdditionAssignmentOperator())
224+
XCTAssertEqual("\(exprList)", "1 += 1")
225+
}
226+
227+
public func testMakeSubtractionAssignmentOperator() {
228+
let exprList = infixOperationExprList(with: SyntaxFactory.makeSubtractionAssignmentOperator())
229+
XCTAssertEqual("\(exprList)", "1 -= 1")
230+
}
231+
232+
public func testMakeMultiplicationAssignmentOperator() {
233+
let exprList = infixOperationExprList(with: SyntaxFactory.makeMultiplicationAssignmentOperator())
234+
XCTAssertEqual("\(exprList)", "1 *= 1")
235+
}
236+
237+
public func testMakeDivisionAssignmentOperator() {
238+
let exprList = infixOperationExprList(with: SyntaxFactory.makeDivisionAssignmentOperator())
239+
XCTAssertEqual("\(exprList)", "1 /= 1")
240+
}
241+
242+
public func testMakeRemainderAssignmentOperator() {
243+
let exprList = infixOperationExprList(with: SyntaxFactory.makeRemainderAssignmentOperator())
244+
XCTAssertEqual("\(exprList)", "1 %= 1")
245+
}
246+
247+
public func testMakeLessThanOperator() {
248+
let exprList = infixOperationExprList(with: SyntaxFactory.makeLessThanOperator())
249+
XCTAssertEqual("\(exprList)", "1 < 1")
250+
}
251+
252+
public func testMakeGreaterThanOperator() {
253+
let exprList = infixOperationExprList(with: SyntaxFactory.makeGreaterThanOperator())
254+
XCTAssertEqual("\(exprList)", "1 > 1")
255+
}
256+
257+
public func testMakeLessThanOrEqualToOperator() {
258+
let exprList = infixOperationExprList(with: SyntaxFactory.makeLessThanOrEqualToOperator())
259+
XCTAssertEqual("\(exprList)", "1 <= 1")
260+
}
261+
262+
public func testMakeGreaterThanOrEqualToOperator() {
263+
let exprList = infixOperationExprList(with: SyntaxFactory.makeGreaterThanOrEqualToOperator())
264+
XCTAssertEqual("\(exprList)", "1 >= 1")
265+
}
163266
}

0 commit comments

Comments
 (0)