Skip to content

Commit 0d3bf40

Browse files
authored
Rollup merge of rust-lang#61606 - petrochenkov:legclean, r=pnkfelix
Remove some legacy proc macro flavors Namely - `IdentTT` (`foo! ident { ... }`). Can be replaced with `foo! { ident ... }` or something similar. - `MultiDecorator`. Can be replaced by `MultiModifier` (aka `LegacyAttr` after renaming). - `DeclMacro`. It was a less powerful duplicate of `NormalTT` (aka `LegacyBang` after renaming) and can be replaced by it. Stuff like this slows down any attempts to refactor the expansion infra, so it's desirable to retire it already. I'm not sure whether a lang team decision is necessary, but would be nice to land this sooner because I have some further work in this area scheduled. The documentation commit (rust-lang@a9397fd) describes how the remaining variants are different from each other and shows that there's actually some system behind them. The last commit renames variants of `SyntaxExtension` in more systematic way. - `ProcMacro` -> `Bang` - `NormalTT` -> `LegacyBang` - `AttrProcMacro` -> `Attr` - `MultiModifier` -> `LegacyAttr` - `ProcMacroDerive` -> `Derive` - `BuiltinDerive` -> `LegacyDerive` All the `Legacy*` variants are AST-based, as opposed to "modern" token-based variants.
2 parents 68970f5 + 93eb63c commit 0d3bf40

20 files changed

+224
-695
lines changed

src/librustc_metadata/creader.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,7 @@ impl<'a> CrateLoader<'a> {
614614
match decl {
615615
ProcMacro::CustomDerive { trait_name, attributes, client } => {
616616
let attrs = attributes.iter().cloned().map(Symbol::intern).collect::<Vec<_>>();
617-
(trait_name, SyntaxExtension::ProcMacroDerive(
617+
(trait_name, SyntaxExtension::Derive(
618618
Box::new(ProcMacroDerive {
619619
client,
620620
attrs: attrs.clone(),
@@ -624,13 +624,13 @@ impl<'a> CrateLoader<'a> {
624624
))
625625
}
626626
ProcMacro::Attr { name, client } => {
627-
(name, SyntaxExtension::AttrProcMacro(
627+
(name, SyntaxExtension::Attr(
628628
Box::new(AttrProcMacro { client }),
629629
root.edition,
630630
))
631631
}
632632
ProcMacro::Bang { name, client } => {
633-
(name, SyntaxExtension::ProcMacro {
633+
(name, SyntaxExtension::Bang {
634634
expander: Box::new(BangProcMacro { client }),
635635
allow_internal_unstable: None,
636636
edition: root.edition,

src/librustc_metadata/cstore_impl.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ impl cstore::CStore {
430430
use syntax_ext::proc_macro_impl::BangProcMacro;
431431

432432
let client = proc_macro::bridge::client::Client::expand1(proc_macro::quote);
433-
let ext = SyntaxExtension::ProcMacro {
433+
let ext = SyntaxExtension::Bang {
434434
expander: Box::new(BangProcMacro { client }),
435435
allow_internal_unstable: Some(vec![sym::proc_macro_def_site].into()),
436436
edition: data.root.edition,

src/librustc_plugin/registry.rs

Lines changed: 10 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ use rustc::lint::{EarlyLintPassObject, LateLintPassObject, LintId, Lint};
44
use rustc::session::Session;
55
use rustc::util::nodemap::FxHashMap;
66

7-
use syntax::ext::base::{SyntaxExtension, NamedSyntaxExtension, NormalTT, IdentTT};
7+
use syntax::ext::base::{SyntaxExtension, NamedSyntaxExtension};
88
use syntax::ext::base::MacroExpanderFn;
9+
use syntax::ext::hygiene::Transparency;
910
use syntax::symbol::{Symbol, sym};
1011
use syntax::ast;
1112
use syntax::feature_gate::AttributeType;
@@ -84,47 +85,26 @@ impl<'a> Registry<'a> {
8485
/// Register a syntax extension of any kind.
8586
///
8687
/// This is the most general hook into `libsyntax`'s expansion behavior.
87-
pub fn register_syntax_extension(&mut self, name: ast::Name, extension: SyntaxExtension) {
88+
pub fn register_syntax_extension(&mut self, name: ast::Name, mut extension: SyntaxExtension) {
8889
if name == sym::macro_rules {
8990
panic!("user-defined macros may not be named `macro_rules`");
9091
}
91-
self.syntax_exts.push((name, match extension {
92-
NormalTT {
93-
expander,
94-
def_info: _,
95-
allow_internal_unstable,
96-
allow_internal_unsafe,
97-
local_inner_macros,
98-
unstable_feature,
99-
edition,
100-
} => {
101-
let nid = ast::CRATE_NODE_ID;
102-
NormalTT {
103-
expander,
104-
def_info: Some((nid, self.krate_span)),
105-
allow_internal_unstable,
106-
allow_internal_unsafe,
107-
local_inner_macros,
108-
unstable_feature,
109-
edition,
110-
}
111-
}
112-
IdentTT { expander, span: _, allow_internal_unstable } => {
113-
IdentTT { expander, span: Some(self.krate_span), allow_internal_unstable }
114-
}
115-
_ => extension,
116-
}));
92+
if let SyntaxExtension::LegacyBang { def_info: ref mut def_info @ None, .. } = extension {
93+
*def_info = Some((ast::CRATE_NODE_ID, self.krate_span));
94+
}
95+
self.syntax_exts.push((name, extension));
11796
}
11897

11998
/// Register a macro of the usual kind.
12099
///
121100
/// This is a convenience wrapper for `register_syntax_extension`.
122-
/// It builds for you a `NormalTT` that calls `expander`,
101+
/// It builds for you a `SyntaxExtension::LegacyBang` that calls `expander`,
123102
/// and also takes care of interning the macro's name.
124103
pub fn register_macro(&mut self, name: &str, expander: MacroExpanderFn) {
125-
self.register_syntax_extension(Symbol::intern(name), NormalTT {
104+
self.register_syntax_extension(Symbol::intern(name), SyntaxExtension::LegacyBang {
126105
expander: Box::new(expander),
127106
def_info: None,
107+
transparency: Transparency::SemiTransparent,
128108
allow_internal_unstable: None,
129109
allow_internal_unsafe: false,
130110
local_inner_macros: false,

src/librustc_resolve/macros.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -242,8 +242,7 @@ impl<'a> base::Resolver for Resolver<'a> {
242242
fn check_unused_macros(&self) {
243243
for did in self.unused_macros.iter() {
244244
let id_span = match *self.macro_map[did] {
245-
SyntaxExtension::NormalTT { def_info, .. } |
246-
SyntaxExtension::DeclMacro { def_info, .. } => def_info,
245+
SyntaxExtension::LegacyBang { def_info, .. } => def_info,
247246
_ => None,
248247
};
249248
if let Some((id, span)) = id_span {
@@ -587,7 +586,7 @@ impl<'a> Resolver<'a> {
587586
match self.resolve_macro_to_res(derive, MacroKind::Derive,
588587
&parent_scope, true, force) {
589588
Ok((_, ext)) => {
590-
if let SyntaxExtension::ProcMacroDerive(_, helpers, _) = &*ext {
589+
if let SyntaxExtension::Derive(_, helpers, _) = &*ext {
591590
if helpers.contains(&ident.name) {
592591
let binding =
593592
(Res::NonMacroAttr(NonMacroAttrKind::DeriveHelper),

src/librustdoc/clean/inline.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ fn build_macro(cx: &DocContext<'_>, did: DefId, name: ast::Name) -> clean::ItemE
471471
}
472472
LoadedMacro::ProcMacro(ext) => {
473473
let helpers = match &*ext {
474-
&SyntaxExtension::ProcMacroDerive(_, ref syms, ..) => { syms.clean(cx) }
474+
&SyntaxExtension::Derive(_, ref syms, ..) => { syms.clean(cx) }
475475
_ => Vec::new(),
476476
};
477477

src/librustdoc/passes/collect_intra_doc_links.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,7 @@ fn macro_resolve(cx: &DocContext<'_>, path_str: &str) -> Option<Res> {
433433
if let Res::Def(DefKind::Macro(MacroKind::ProcMacroStub), _) = res {
434434
// skip proc-macro stubs, they'll cause `get_macro` to crash
435435
} else {
436-
if let SyntaxExtension::DeclMacro { .. } = *resolver.get_macro(res) {
436+
if let SyntaxExtension::LegacyBang { .. } = *resolver.get_macro(res) {
437437
return Some(res.map_id(|_| panic!("unexpected id")));
438438
}
439439
}

0 commit comments

Comments
 (0)