@@ -22,10 +22,33 @@ mod dylib;
22
22
use proc_macro:: bridge:: client:: TokenStream ;
23
23
use ra_proc_macro:: { ExpansionResult , ExpansionTask , ListMacrosResult , ListMacrosTask } ;
24
24
25
- pub fn expand_task ( _task : & ExpansionTask ) -> Result < ExpansionResult , String > {
26
- unimplemented ! ( )
25
+ pub fn expand_task ( task : & ExpansionTask ) -> Result < ExpansionResult , String > {
26
+ let expander = dylib:: Expander :: new ( & task. lib )
27
+ . expect ( & format ! ( "Cannot expand with provided libraries: ${:?}" , & task. lib) ) ;
28
+
29
+ match expander. expand ( & task. macro_name , & task. macro_body , task. attributes . as_ref ( ) ) {
30
+ Ok ( expansion) => Ok ( ExpansionResult { expansion } ) ,
31
+ Err ( msg) => {
32
+ let reason = format ! (
33
+ "Cannot perform expansion for {}: error {:?}!" ,
34
+ & task. macro_name,
35
+ msg. as_str( )
36
+ ) ;
37
+ Err ( reason)
38
+ }
39
+ }
27
40
}
28
41
29
- pub fn list_macros ( _task : & ListMacrosTask ) -> Result < ListMacrosResult , String > {
30
- unimplemented ! ( )
42
+ pub fn list_macros ( task : & ListMacrosTask ) -> Result < ListMacrosResult , String > {
43
+ let expander = dylib:: Expander :: new ( & task. lib )
44
+ . expect ( & format ! ( "Cannot expand with provided libraries: ${:?}" , & task. lib) ) ;
45
+
46
+ match expander. list_macros ( ) {
47
+ Ok ( macros) => Ok ( ListMacrosResult { macros } ) ,
48
+ Err ( msg) => {
49
+ let reason =
50
+ format ! ( "Cannot perform expansion for {:?}: error {:?}!" , & task. lib, msg. as_str( ) ) ;
51
+ Err ( reason)
52
+ }
53
+ }
31
54
}
0 commit comments