File tree Expand file tree Collapse file tree 2 files changed +22
-0
lines changed
Sources/_SwiftSyntaxMacros
Tests/SwiftSyntaxMacrosTest Expand file tree Collapse file tree 2 files changed +22
-0
lines changed Original file line number Diff line number Diff line change @@ -25,12 +25,23 @@ public struct MacroExpansionContext {
25
25
/// name, so the combination of file and module name is unique.
26
26
public let fileName : String
27
27
28
+ /// Counter used to generate names local to the macro.
29
+ var localNameCounter = 0
30
+
28
31
/// Create a new macro evaluation context.
29
32
public init ( moduleName: String , fileName: String ) {
30
33
self . moduleName = moduleName
31
34
self . fileName = fileName
32
35
}
33
36
37
+ /// Generate a unique local name for use in the macro.
38
+ public mutating func createUniqueLocalName( ) -> TokenSyntax {
39
+ let name = " __macro_local_ \( localNameCounter) "
40
+ let token = TokenSyntax ( . identifier( name) , presence: . present)
41
+ localNameCounter += 1
42
+ return token
43
+ }
44
+
34
45
/// Create a new macro evaluation context.
35
46
@available ( * , deprecated, message: " Use init(moduleName:fileName:) " )
36
47
public init (
Original file line number Diff line number Diff line change @@ -152,4 +152,15 @@ final class MacroSystemTests: XCTestCase {
152
152
"""
153
153
)
154
154
}
155
+
156
+ func testContextUniqueLocalNames( ) {
157
+ var context = MacroExpansionContext (
158
+ moduleName: " MyModule " , fileName: " taylor.swift "
159
+ )
160
+
161
+ let t1 = context. createUniqueLocalName ( )
162
+ let t2 = context. createUniqueLocalName ( )
163
+ XCTAssertNotEqual ( t1. description, t2. description)
164
+ XCTAssertEqual ( t1. description, " __macro_local_0 " )
165
+ }
155
166
}
You can’t perform that action at this time.
0 commit comments