File tree Expand file tree Collapse file tree 4 files changed +93
-1
lines changed 
Tests/FoundationMacrosTests Expand file tree Collapse file tree 4 files changed +93
-1
lines changed Original file line number Diff line number Diff line change 1+ //===----------------------------------------------------------------------===//
2+ //
3+ // This source file is part of the Swift.org open source project
4+ //
5+ // Copyright (c) 2025 Apple Inc. and the Swift project authors
6+ // Licensed under Apache License v2.0 with Runtime Library Exception
7+ //
8+ // See https://swift.org/LICENSE.txt for license information
9+ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
10+ //
11+ //===----------------------------------------------------------------------===//
12+ 
13+ import  SwiftSyntax
14+ import  SwiftSyntaxMacros
15+ 
16+ public  struct  BundleMacro :  SwiftSyntaxMacros . ExpressionMacro ,  Sendable  { 
17+     public  static  func  expansion( of node:  some  FreestandingMacroExpansionSyntax ,  in context:  some  MacroExpansionContext )  throws  ->  ExprSyntax  { 
18+         """ 
19+         { 
20+             #if SWIFT_MODULE_RESOURCE_BUNDLE_AVAILABLE 
21+                 return Bundle.module 
22+             #elseif SWIFT_MODULE_RESOURCE_BUNDLE_UNAVAILABLE 
23+                 #error( " No resource bundle is available for this module. If resources are included elsewhere, specify the bundle manually. " ) 
24+             #else 
25+                 return Bundle(_dsoHandle: #dsohandle) ?? .main 
26+             #endif 
27+         }() 
28+          """ 
29+     } 
30+ } 
Original file line number Diff line number Diff line change @@ -63,6 +63,7 @@ target_compile_options(FoundationMacros PRIVATE -parse-as-library)
6363
6464target_sources (FoundationMacros PRIVATE 
6565    FoundationMacros.swift
66+     BundleMacro.swift
6667    PredicateMacro.swift)
6768
6869target_compile_options (FoundationMacros PRIVATE 
Original file line number Diff line number Diff line change @@ -17,7 +17,11 @@ import SwiftCompilerPlugin
1717
1818@main  
1919struct  FoundationMacros :  CompilerPlugin  { 
20-     var  providingMacros :  [ Macro . Type ]  =  [ PredicateMacro . self,  ExpressionMacro . self] 
20+     var  providingMacros :  [ Macro . Type ]  =  [ 
21+         PredicateMacro . self, 
22+         ExpressionMacro . self, 
23+         BundleMacro . self
24+     ] 
2125} 
2226
2327#endif 
Original file line number Diff line number Diff line change 1+ //===----------------------------------------------------------------------===//
2+ //
3+ // This source file is part of the Swift.org open source project
4+ //
5+ // Copyright (c) 2022-2025 Apple Inc. and the Swift project authors
6+ // Licensed under Apache License v2.0 with Runtime Library Exception
7+ //
8+ // See https://swift.org/LICENSE.txt for license information
9+ // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
10+ //
11+ //===----------------------------------------------------------------------===//
12+ 
13+ import  XCTest
14+ import  FoundationMacros
15+ 
16+ final  class  BundleMacroTests :  XCTestCase  { 
17+ 
18+     func  testSimple( )  { 
19+         AssertMacroExpansion ( 
20+             macros:  [ " bundle " :  BundleMacro . self] , 
21+             """ 
22+             #bundle 
23+              """ , 
24+             """ 
25+             { 
26+                 #if SWIFT_MODULE_RESOURCE_BUNDLE_AVAILABLE 
27+                     return Bundle.module 
28+                 #elseif SWIFT_MODULE_RESOURCE_BUNDLE_UNAVAILABLE 
29+                     #error( " No resource bundle is available for this module. If resources are included elsewhere, specify the bundle manually. " ) 
30+                 #else 
31+                     return Bundle(_dsoHandle: #dsohandle) ?? .main 
32+                 #endif 
33+             }() 
34+              """ 
35+         ) 
36+     } 
37+ 
38+     func  testUsingParenthesis( )  { 
39+         AssertMacroExpansion ( 
40+             macros:  [ " bundle " :  BundleMacro . self] , 
41+             """ 
42+             #bundle() 
43+              """ , 
44+             """ 
45+             { 
46+                 #if SWIFT_MODULE_RESOURCE_BUNDLE_AVAILABLE 
47+                     return Bundle.module 
48+                 #elseif SWIFT_MODULE_RESOURCE_BUNDLE_UNAVAILABLE 
49+                     #error( " No resource bundle is available for this module. If resources are included elsewhere, specify the bundle manually. " ) 
50+                 #else 
51+                     return Bundle(_dsoHandle: #dsohandle) ?? .main 
52+                 #endif 
53+             }() 
54+              """ 
55+         ) 
56+     } 
57+ } 
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments