mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-28 12:54:58 +00:00
feat: ignored and disabled macro expansion
This commit is contained in:
parent
5e1b09bb76
commit
6d45afd8d8
8 changed files with 105 additions and 12 deletions
|
@ -273,7 +273,7 @@ impl SourceRootConfig {
|
|||
pub fn load_proc_macro(
|
||||
server: &ProcMacroServer,
|
||||
path: &AbsPath,
|
||||
dummy_replace: &[Box<str>],
|
||||
ignored_macros: &[Box<str>],
|
||||
) -> ProcMacroLoadResult {
|
||||
let res: Result<Vec<_>, String> = (|| {
|
||||
let dylib = MacroDylib::new(path.to_path_buf());
|
||||
|
@ -283,7 +283,7 @@ pub fn load_proc_macro(
|
|||
}
|
||||
Ok(vec
|
||||
.into_iter()
|
||||
.map(|expander| expander_to_proc_macro(expander, dummy_replace))
|
||||
.map(|expander| expander_to_proc_macro(expander, ignored_macros))
|
||||
.collect())
|
||||
})();
|
||||
match res {
|
||||
|
@ -349,7 +349,7 @@ fn load_crate_graph(
|
|||
|
||||
fn expander_to_proc_macro(
|
||||
expander: proc_macro_api::ProcMacro,
|
||||
dummy_replace: &[Box<str>],
|
||||
ignored_macros: &[Box<str>],
|
||||
) -> ProcMacro {
|
||||
let name = From::from(expander.name());
|
||||
let kind = match expander.kind() {
|
||||
|
@ -358,7 +358,7 @@ fn expander_to_proc_macro(
|
|||
proc_macro_api::ProcMacroKind::Attr => ProcMacroKind::Attr,
|
||||
};
|
||||
let expander: sync::Arc<dyn ProcMacroExpander> =
|
||||
if dummy_replace.iter().any(|replace| **replace == name) {
|
||||
if ignored_macros.iter().any(|replace| &**replace == name) {
|
||||
match kind {
|
||||
ProcMacroKind::Attr => sync::Arc::new(IdentityExpander),
|
||||
_ => sync::Arc::new(EmptyExpander),
|
||||
|
@ -407,6 +407,9 @@ impl ProcMacroExpander for IdentityExpander {
|
|||
) -> Result<tt::Subtree<Span>, ProcMacroExpansionError> {
|
||||
Ok(subtree.clone())
|
||||
}
|
||||
fn should_expand(&self) -> bool {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
/// Empty expander, used for proc-macros that are deliberately ignored by the user.
|
||||
|
@ -425,6 +428,9 @@ impl ProcMacroExpander for EmptyExpander {
|
|||
) -> Result<tt::Subtree<Span>, ProcMacroExpansionError> {
|
||||
Ok(tt::Subtree::empty(DelimSpan { open: call_site, close: call_site }))
|
||||
}
|
||||
fn should_expand(&self) -> bool {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue