mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-11-25 05:23:12 +00:00
internal: Lazy eager macros
This commit is contained in:
parent
9973b11218
commit
a02b9b279e
13 changed files with 355 additions and 276 deletions
|
|
@ -113,10 +113,10 @@ impl Expander {
|
|||
call_id: MacroCallId,
|
||||
error: Option<ExpandError>,
|
||||
) -> ExpandResult<Option<InFile<Parse<SyntaxNode>>>> {
|
||||
let file_id = call_id.as_file();
|
||||
let ExpandResult { value, err } = db.parse_or_expand_with_err(file_id);
|
||||
let macro_file = call_id.as_macro_file();
|
||||
let ExpandResult { value, err } = db.parse_macro_expansion(macro_file);
|
||||
|
||||
ExpandResult { value: Some(InFile::new(file_id, value)), err: error.or(err) }
|
||||
ExpandResult { value: Some(InFile::new(macro_file.into(), value.0)), err: error.or(err) }
|
||||
}
|
||||
|
||||
pub fn exit(&mut self, db: &dyn DefDatabase, mut mark: Mark) {
|
||||
|
|
@ -179,8 +179,8 @@ impl Expander {
|
|||
} else if self.recursion_limit.check(self.recursion_depth as usize + 1).is_err() {
|
||||
self.recursion_depth = u32::MAX;
|
||||
cov_mark::hit!(your_stack_belongs_to_me);
|
||||
return ExpandResult::only_err(ExpandError::Other(
|
||||
"reached recursion limit during macro expansion".into(),
|
||||
return ExpandResult::only_err(ExpandError::other(
|
||||
"reached recursion limit during macro expansion",
|
||||
));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ use hir_expand::{
|
|||
builtin_derive_macro::BuiltinDeriveExpander,
|
||||
builtin_fn_macro::{BuiltinFnLikeExpander, EagerExpander},
|
||||
db::ExpandDatabase,
|
||||
eager::expand_eager_macro,
|
||||
eager::expand_eager_macro_input,
|
||||
hygiene::Hygiene,
|
||||
proc_macro::ProcMacroExpander,
|
||||
AstId, ExpandError, ExpandResult, ExpandTo, HirFileId, InFile, MacroCallId, MacroCallKind,
|
||||
|
|
@ -865,7 +865,7 @@ impl AsMacroCall for InFile<&ast::MacroCall> {
|
|||
let path = self.value.path().and_then(|path| path::ModPath::from_src(db, path, &h));
|
||||
|
||||
let Some(path) = path else {
|
||||
return Ok(ExpandResult::only_err(ExpandError::Other("malformed macro invocation".into())));
|
||||
return Ok(ExpandResult::only_err(ExpandError::other("malformed macro invocation")));
|
||||
};
|
||||
|
||||
macro_call_as_call_id_(
|
||||
|
|
@ -913,7 +913,7 @@ fn macro_call_as_call_id_(
|
|||
|
||||
let res = if let MacroDefKind::BuiltInEager(..) = def.kind {
|
||||
let macro_call = InFile::new(call.ast_id.file_id, call.ast_id.to_node(db));
|
||||
expand_eager_macro(db, krate, macro_call, def, &resolver)?
|
||||
expand_eager_macro_input(db, krate, macro_call, def, &resolver)?
|
||||
} else {
|
||||
ExpandResult {
|
||||
value: Some(def.as_lazy_macro(
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ fn main() { env!("TEST_ENV_VAR"); }
|
|||
#[rustc_builtin_macro]
|
||||
macro_rules! env {() => {}}
|
||||
|
||||
fn main() { "__RA_UNIMPLEMENTED__"; }
|
||||
fn main() { "UNRESOLVED_ENV_VAR"; }
|
||||
"##]],
|
||||
);
|
||||
}
|
||||
|
|
@ -442,10 +442,6 @@ macro_rules! surprise {
|
|||
() => { "s" };
|
||||
}
|
||||
|
||||
macro_rules! stuff {
|
||||
($string:expr) => { concat!($string) };
|
||||
}
|
||||
|
||||
fn main() { concat!(surprise!()); }
|
||||
"##,
|
||||
expect![[r##"
|
||||
|
|
@ -456,10 +452,6 @@ macro_rules! surprise {
|
|||
() => { "s" };
|
||||
}
|
||||
|
||||
macro_rules! stuff {
|
||||
($string:expr) => { concat!($string) };
|
||||
}
|
||||
|
||||
fn main() { "s"; }
|
||||
"##]],
|
||||
);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue