Skip to content

Commit e5698fa

Browse files
committed
Implement expand_task and list_macros
1 parent f7f121d commit e5698fa

File tree

1 file changed

+27
-4
lines changed
  • crates/ra_proc_macro_srv/src

1 file changed

+27
-4
lines changed

crates/ra_proc_macro_srv/src/lib.rs

+27-4
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,33 @@ mod dylib;
2222
use proc_macro::bridge::client::TokenStream;
2323
use 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

Comments
 (0)