Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-expand/src/declarative.rs')
-rw-r--r--crates/hir-expand/src/declarative.rs80
1 files changed, 17 insertions, 63 deletions
diff --git a/crates/hir-expand/src/declarative.rs b/crates/hir-expand/src/declarative.rs
index 29408902f1..48851af3fd 100644
--- a/crates/hir-expand/src/declarative.rs
+++ b/crates/hir-expand/src/declarative.rs
@@ -1,7 +1,7 @@
//! Compiled declarative macro expanders (`macro_rules!`` and `macro`)
-use std::sync::OnceLock;
-use base_db::{CrateId, VersionReq};
+use base_db::CrateId;
+use intern::sym;
use mbe::DocCommentDesugarMode;
use span::{Edition, MacroCallId, Span, SyntaxContextId};
use stdx::TupleExt;
@@ -12,7 +12,7 @@ use crate::{
attrs::RawAttrs,
db::ExpandDatabase,
hygiene::{apply_mark, Transparency},
- tt, AstId, ExpandError, ExpandResult, Lookup,
+ tt, AstId, ExpandError, ExpandErrorKind, ExpandResult, Lookup,
};
/// Old-style `macro_rules` or the new macros 2.0
@@ -22,9 +22,6 @@ pub struct DeclarativeMacroExpander {
pub transparency: Transparency,
}
-// FIXME: Remove this once we drop support for 1.76
-static REQUIREMENT: OnceLock<VersionReq> = OnceLock::new();
-
impl DeclarativeMacroExpander {
pub fn expand(
&self,
@@ -34,29 +31,16 @@ impl DeclarativeMacroExpander {
span: Span,
) -> ExpandResult<(tt::Subtree, Option<u32>)> {
let loc = db.lookup_intern_macro_call(call_id);
- let toolchain = db.toolchain(loc.def.krate);
- let new_meta_vars = toolchain.as_ref().map_or(false, |version| {
- REQUIREMENT.get_or_init(|| VersionReq::parse(">=1.76").unwrap()).matches(
- &base_db::Version {
- pre: base_db::Prerelease::EMPTY,
- build: base_db::BuildMetadata::EMPTY,
- major: version.major,
- minor: version.minor,
- patch: version.patch,
- },
- )
- });
match self.mac.err() {
Some(_) => ExpandResult::new(
(tt::Subtree::empty(tt::DelimSpan { open: span, close: span }), None),
- ExpandError::MacroDefinition,
+ ExpandError::new(span, ExpandErrorKind::MacroDefinition),
),
None => self
.mac
.expand(
&tt,
|s| s.ctx = apply_mark(db, s.ctx, call_id, self.transparency),
- new_meta_vars,
span,
loc.def.edition,
)
@@ -66,32 +50,18 @@ impl DeclarativeMacroExpander {
pub fn expand_unhygienic(
&self,
- db: &dyn ExpandDatabase,
tt: tt::Subtree,
- krate: CrateId,
call_site: Span,
def_site_edition: Edition,
) -> ExpandResult<tt::Subtree> {
- let toolchain = db.toolchain(krate);
- let new_meta_vars = toolchain.as_ref().map_or(false, |version| {
- REQUIREMENT.get_or_init(|| VersionReq::parse(">=1.76").unwrap()).matches(
- &base_db::Version {
- pre: base_db::Prerelease::EMPTY,
- build: base_db::BuildMetadata::EMPTY,
- major: version.major,
- minor: version.minor,
- patch: version.patch,
- },
- )
- });
match self.mac.err() {
Some(_) => ExpandResult::new(
tt::Subtree::empty(tt::DelimSpan { open: call_site, close: call_site }),
- ExpandError::MacroDefinition,
+ ExpandError::new(call_site, ExpandErrorKind::MacroDefinition),
),
None => self
.mac
- .expand(&tt, |_| (), new_meta_vars, call_site, def_site_edition)
+ .expand(&tt, |_| (), call_site, def_site_edition)
.map(TupleExt::head)
.map_err(Into::into),
}
@@ -111,35 +81,24 @@ impl DeclarativeMacroExpander {
match &*attrs
.iter()
.find(|it| {
- it.path.as_ident().and_then(|it| it.as_str())
- == Some("rustc_macro_transparency")
+ it.path
+ .as_ident()
+ .map(|it| *it == sym::rustc_macro_transparency.clone())
+ .unwrap_or(false)
})?
.token_tree_value()?
.token_trees
{
- [tt::TokenTree::Leaf(tt::Leaf::Ident(i)), ..] => match &*i.text {
- "transparent" => Some(Transparency::Transparent),
- "semitransparent" => Some(Transparency::SemiTransparent),
- "opaque" => Some(Transparency::Opaque),
+ [tt::TokenTree::Leaf(tt::Leaf::Ident(i)), ..] => match &i.sym {
+ s if *s == sym::transparent => Some(Transparency::Transparent),
+ s if *s == sym::semitransparent => Some(Transparency::SemiTransparent),
+ s if *s == sym::opaque => Some(Transparency::Opaque),
_ => None,
},
_ => None,
}
};
- let toolchain = db.toolchain(def_crate);
- let new_meta_vars = toolchain.as_ref().map_or(false, |version| {
- REQUIREMENT.get_or_init(|| VersionReq::parse(">=1.76").unwrap()).matches(
- &base_db::Version {
- pre: base_db::Prerelease::EMPTY,
- build: base_db::BuildMetadata::EMPTY,
- major: version.major,
- minor: version.minor,
- patch: version.patch,
- },
- )
- });
-
- let edition = |ctx: SyntaxContextId| {
+ let ctx_edition = |ctx: SyntaxContextId| {
let crate_graph = db.crate_graph();
if ctx.is_root() {
crate_graph[def_crate].edition
@@ -162,7 +121,7 @@ impl DeclarativeMacroExpander {
DocCommentDesugarMode::Mbe,
);
- mbe::DeclarativeMacro::parse_macro_rules(&tt, edition, new_meta_vars)
+ mbe::DeclarativeMacro::parse_macro_rules(&tt, ctx_edition)
}
None => mbe::DeclarativeMacro::from_err(mbe::ParseError::Expected(
"expected a token tree".into(),
@@ -190,12 +149,7 @@ impl DeclarativeMacroExpander {
DocCommentDesugarMode::Mbe,
);
- mbe::DeclarativeMacro::parse_macro2(
- args.as_ref(),
- &body,
- edition,
- new_meta_vars,
- )
+ mbe::DeclarativeMacro::parse_macro2(args.as_ref(), &body, ctx_edition)
}
None => mbe::DeclarativeMacro::from_err(mbe::ParseError::Expected(
"expected a token tree".into(),