File tree Expand file tree Collapse file tree 1 file changed +50
-0
lines changed
Tests/SwiftSyntaxMacroExpansionTest Expand file tree Collapse file tree 1 file changed +50
-0
lines changed Original file line number Diff line number Diff line change @@ -276,4 +276,54 @@ final class PeerMacroTests: XCTestCase {
276
276
indentationWidth: indentationWidth
277
277
)
278
278
}
279
+
280
+ func testCanDetectAdjacentAttributesInContext( ) {
281
+ enum FoundObjCAttribute : String , Error , CustomDebugStringConvertible {
282
+ case noMethod
283
+ case noAttribute
284
+ case notFound
285
+ case found
286
+ var debugDescription : String { rawValue }
287
+ }
288
+
289
+ struct FindObjCAttribute : PeerMacro {
290
+ static func expansion(
291
+ of node: AttributeSyntax ,
292
+ providingPeersOf declaration: some DeclSyntaxProtocol ,
293
+ in context: some MacroExpansionContext
294
+ ) throws -> [ DeclSyntax ] {
295
+ guard let methodDecl = declaration. as ( FunctionDeclSyntax . self) else {
296
+ throw FoundObjCAttribute . noMethod
297
+ }
298
+
299
+ guard let attribute = methodDecl. attributes. first ( where: {
300
+ $0. as ( AttributeSyntax . self) ? . attributeName == " objc "
301
+ } ) else {
302
+ throw FoundObjCAttribute . noAttribute
303
+ }
304
+
305
+ guard context. location ( of: attribute) != nil else {
306
+ throw FoundObjCAttribute . notFound
307
+ }
308
+
309
+ return [ ]
310
+ }
311
+ }
312
+ assertMacroExpansion (
313
+ """
314
+ @objc class Foo {
315
+ @objc @findObjCAttribute
316
+ func memberFunction() {}
317
+ }
318
+ """ ,
319
+ expandedSource: """
320
+ @objc class Foo {
321
+ @objc
322
+ func memberFunction() {}
323
+ }
324
+ """ ,
325
+ diagnostics: [ ] ,
326
+ macros: [ " findObjCAttribute " : FindObjCAttribute . self] ,
327
+ )
328
+ }
279
329
}
You can’t perform that action at this time.
0 commit comments