@@ -22,10 +22,33 @@ mod dylib;
2222use proc_macro:: bridge:: client:: TokenStream ;
2323use ra_proc_macro:: { ExpansionResult , ExpansionTask , ListMacrosResult , ListMacrosTask } ;
2424
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+ }
2740}
2841
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+ }
3154}
0 commit comments