Skip to content

Commit

Permalink
Add ExpandAttribute handler
Browse files Browse the repository at this point in the history
commit-id:ab75be72
  • Loading branch information
Draggu committed Oct 24, 2024
1 parent 6853b12 commit a4ec28e
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 1 deletion.
29 changes: 29 additions & 0 deletions scarb/src/ops/proc_macro_server/methods/expand_attribute.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
use crate::{
compiler::plugin::proc_macro::{ExpansionKind, ProcMacroHost},
ops::proc_macro_server::json_rpc::Handler,
};
use anyhow::Result;
use proc_macro_server_api::methods::{expand::ExpandAttribute, ProcMacroResult};
use std::sync::Arc;

impl Handler for ExpandAttribute {
fn handle(proc_macros: Arc<ProcMacroHost>, params: Self::Params) -> Result<Self::Response> {
let instance = proc_macros
.macros()
.into_iter()
.find(|e| {
e.get_expansions()
.iter()
.filter(|expansion| expansion.kind == ExpansionKind::Attr)
.any(|expansion| expansion.name == params.attr)
})
.unwrap();

let result = instance.generate_code(params.attr.into(), params.args, params.item);

Ok(ProcMacroResult {
token_stream: result.token_stream,
diagnostics: result.diagnostics,
})
}
}
1 change: 1 addition & 0 deletions scarb/src/ops/proc_macro_server/methods/mod.rs
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
pub mod defined_macros;
pub mod expand_attribute;
8 changes: 7 additions & 1 deletion scarb/src/ops/proc_macro_server/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@ use crate::compiler::plugin::proc_macro::ProcMacroHost;
use anyhow::{anyhow, Result};
use connection::Connection;
use json_rpc::{ErrResponse, Handler};
use proc_macro_server_api::{methods::defined_macros::DefinedMacros, Method, RpcResponse};
use proc_macro_server_api::{
methods::{defined_macros::DefinedMacros, expand::ExpandAttribute},
Method, RpcResponse,
};
use serde_json::Value;
use std::sync::Arc;

Expand All @@ -27,6 +30,9 @@ pub fn start_proc_macro_server(proc_macros: ProcMacroHost) -> Result<()> {
DefinedMacros::METHOD => {
run_handler::<DefinedMacros>(proc_macros.clone(), request.value)
}
ExpandAttribute::METHOD => {
run_handler::<ExpandAttribute>(proc_macros.clone(), request.value)
}
_ => Err(anyhow!("method not found")),
};

Expand Down

0 comments on commit a4ec28e

Please sign in to comment.