diff options
| author | Lukas Wirth <lukastw97@gmail.com> | 2022-08-03 18:10:15 +0200 |
|---|---|---|
| committer | Lukas Wirth <lukastw97@gmail.com> | 2022-08-03 18:10:15 +0200 |
| commit | a8a6c160be157ee7fe130d2c99521a2f76d3b4be (patch) | |
| tree | 0446aa2c8b1d0ccf20b806fa04966c604a0f9179 | |
| parent | ec3586eab943d7c6c83d211f629a691fc8c14603 (diff) | |
| download | rust-a8a6c160be157ee7fe130d2c99521a2f76d3b4be.tar.gz rust-a8a6c160be157ee7fe130d2c99521a2f76d3b4be.zip | |
Use an empty expander for ignored non-attribute proc-macros
| -rw-r--r-- | crates/rust-analyzer/src/reload.rs | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/crates/rust-analyzer/src/reload.rs b/crates/rust-analyzer/src/reload.rs index eaab275bc68..9a9a9dd4d84 100644 --- a/crates/rust-analyzer/src/reload.rs +++ b/crates/rust-analyzer/src/reload.rs @@ -621,7 +621,10 @@ pub(crate) fn load_proc_macro( }; let expander: Arc<dyn ProcMacroExpander> = if dummy_replace.iter().any(|replace| &**replace == name) { - Arc::new(DummyExpander) + match kind { + ProcMacroKind::Attr => Arc::new(IdentityExpander), + _ => Arc::new(EmptyExpander), + } } else { Arc::new(Expander(expander)) }; @@ -647,11 +650,11 @@ pub(crate) fn load_proc_macro( } } - /// Dummy identity expander, used for proc-macros that are deliberately ignored by the user. + /// Dummy identity expander, used for attribute proc-macros that are deliberately ignored by the user. #[derive(Debug)] - struct DummyExpander; + struct IdentityExpander; - impl ProcMacroExpander for DummyExpander { + impl ProcMacroExpander for IdentityExpander { fn expand( &self, subtree: &tt::Subtree, @@ -661,6 +664,21 @@ pub(crate) fn load_proc_macro( Ok(subtree.clone()) } } + + /// Empty expander, used for proc-macros that are deliberately ignored by the user. + #[derive(Debug)] + struct EmptyExpander; + + impl ProcMacroExpander for EmptyExpander { + fn expand( + &self, + _: &tt::Subtree, + _: Option<&tt::Subtree>, + _: &Env, + ) -> Result<tt::Subtree, ProcMacroExpansionError> { + Ok(tt::Subtree::default()) + } + } } pub(crate) fn should_refresh_for_change(path: &AbsPath, change_kind: ChangeKind) -> bool { |
