diff options
| author | Ishan Jain <contact@ishanjain.me> | 2024-06-12 11:03:04 +0530 |
|---|---|---|
| committer | Ishan Jain <contact@ishanjain.me> | 2024-06-13 10:45:11 +0530 |
| commit | e728026bc5cbbde6a7890c268d38efa55b192069 (patch) | |
| tree | 8c90e8eb99aa3f081fcba9c03396c9eeb3af01d8 | |
| parent | a97aef8466688d0d14fea1c311fa8db24173b5e1 (diff) | |
| download | rust-e728026bc5cbbde6a7890c268d38efa55b192069.tar.gz rust-e728026bc5cbbde6a7890c268d38efa55b192069.zip | |
hir/semantics: Only allow expansion of specific built in macros
| -rw-r--r-- | src/tools/rust-analyzer/crates/hir/src/semantics.rs | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/src/tools/rust-analyzer/crates/hir/src/semantics.rs b/src/tools/rust-analyzer/crates/hir/src/semantics.rs index a38cef2fd5d..51510dd400d 100644 --- a/src/tools/rust-analyzer/crates/hir/src/semantics.rs +++ b/src/tools/rust-analyzer/crates/hir/src/semantics.rs @@ -19,8 +19,12 @@ use hir_def::{ AsMacroCall, DefWithBodyId, FunctionId, MacroId, TraitId, VariantId, }; use hir_expand::{ - attrs::collect_attrs, db::ExpandDatabase, files::InRealFile, name::AsName, InMacroFile, - MacroCallId, MacroFileId, MacroFileIdExt, + attrs::collect_attrs, + builtin_fn_macro::{BuiltinFnLikeExpander, EagerExpander}, + db::ExpandDatabase, + files::InRealFile, + name::AsName, + InMacroFile, MacroCallId, MacroFileId, MacroFileIdExt, }; use itertools::Itertools; use rustc_hash::{FxHashMap, FxHashSet}; @@ -319,6 +323,30 @@ impl<'db> SemanticsImpl<'db> { } else { sa.expand(self.db, macro_call)? }; + let macro_call = self.db.lookup_intern_macro_call(file_id.macro_call_id); + + match macro_call.def.kind { + hir_expand::MacroDefKind::BuiltIn( + _, + BuiltinFnLikeExpander::Cfg + | BuiltinFnLikeExpander::StdPanic + | BuiltinFnLikeExpander::Stringify + | BuiltinFnLikeExpander::CorePanic, + ) + | hir_expand::MacroDefKind::BuiltInEager( + _, + EagerExpander::Env + | EagerExpander::Concat + | EagerExpander::Include + | EagerExpander::OptionEnv + | EagerExpander::IncludeStr + | EagerExpander::ConcatBytes + | EagerExpander::IncludeBytes, + ) => { + // Do nothing and allow matching macros to be expanded + } + _ => return None, + } let node = self.parse_or_expand(file_id.into()); Some(node) |
