rustc_ast: Do not panic by default when visiting macro calls
This commit is contained in:
parent
0cd1516696
commit
3237b3886c
|
@ -210,11 +210,8 @@ pub trait MutVisitor: Sized {
|
||||||
noop_visit_local(l, self);
|
noop_visit_local(l, self);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_mac(&mut self, _mac: &mut MacCall) {
|
fn visit_mac(&mut self, mac: &mut MacCall) {
|
||||||
panic!("visit_mac disabled by default");
|
noop_visit_mac(mac, self);
|
||||||
// N.B., see note about macros above. If you really want a visitor that
|
|
||||||
// works on macros, use this definition in your trait impl:
|
|
||||||
// mut_visit::noop_visit_mac(_mac, self);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_macro_def(&mut self, def: &mut MacroDef) {
|
fn visit_macro_def(&mut self, def: &mut MacroDef) {
|
||||||
|
|
|
@ -176,13 +176,8 @@ pub trait Visitor<'ast>: Sized {
|
||||||
fn visit_lifetime(&mut self, lifetime: &'ast Lifetime) {
|
fn visit_lifetime(&mut self, lifetime: &'ast Lifetime) {
|
||||||
walk_lifetime(self, lifetime)
|
walk_lifetime(self, lifetime)
|
||||||
}
|
}
|
||||||
fn visit_mac(&mut self, _mac: &'ast MacCall) {
|
fn visit_mac(&mut self, mac: &'ast MacCall) {
|
||||||
panic!("visit_mac disabled by default");
|
walk_mac(self, mac)
|
||||||
// N.B., see note about macros above.
|
|
||||||
// if you really want a visitor that
|
|
||||||
// works on macros, use this
|
|
||||||
// definition in your trait impl:
|
|
||||||
// visit::walk_mac(self, _mac)
|
|
||||||
}
|
}
|
||||||
fn visit_mac_def(&mut self, _mac: &'ast MacroDef, _id: NodeId) {
|
fn visit_mac_def(&mut self, _mac: &'ast MacroDef, _id: NodeId) {
|
||||||
// Nothing to do
|
// Nothing to do
|
||||||
|
|
|
@ -114,9 +114,9 @@ impl<'ast> Visitor<'ast> for NodeCounter {
|
||||||
self.count += 1;
|
self.count += 1;
|
||||||
walk_lifetime(self, lifetime)
|
walk_lifetime(self, lifetime)
|
||||||
}
|
}
|
||||||
fn visit_mac(&mut self, _mac: &MacCall) {
|
fn visit_mac(&mut self, mac: &MacCall) {
|
||||||
self.count += 1;
|
self.count += 1;
|
||||||
walk_mac(self, _mac)
|
walk_mac(self, mac)
|
||||||
}
|
}
|
||||||
fn visit_path(&mut self, path: &Path, _id: NodeId) {
|
fn visit_path(&mut self, path: &Path, _id: NodeId) {
|
||||||
self.count += 1;
|
self.count += 1;
|
||||||
|
|
|
@ -54,10 +54,6 @@ impl<'a> Visitor<'a> for ShowSpanVisitor<'a> {
|
||||||
}
|
}
|
||||||
visit::walk_ty(self, t);
|
visit::walk_ty(self, t);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_mac(&mut self, mac: &'a ast::MacCall) {
|
|
||||||
visit::walk_mac(self, mac);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run(span_diagnostic: &rustc_errors::Handler, mode: &str, krate: &ast::Crate) {
|
pub fn run(span_diagnostic: &rustc_errors::Handler, mode: &str, krate: &ast::Crate) {
|
||||||
|
|
|
@ -344,10 +344,6 @@ impl<'a> Visitor<'a> for CollectProcMacros<'a> {
|
||||||
visit::walk_item(self, item);
|
visit::walk_item(self, item);
|
||||||
self.in_root = prev_in_root;
|
self.in_root = prev_in_root;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_mac(&mut self, mac: &'a ast::MacCall) {
|
|
||||||
visit::walk_mac(self, mac)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Creates a new module which looks like:
|
// Creates a new module which looks like:
|
||||||
|
|
|
@ -130,10 +130,6 @@ impl<'a> MutVisitor for TestHarnessGenerator<'a> {
|
||||||
}
|
}
|
||||||
smallvec![P(item)]
|
smallvec![P(item)]
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_mac(&mut self, _mac: &mut ast::MacCall) {
|
|
||||||
// Do nothing.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Beware, this is duplicated in librustc_passes/entry.rs (with
|
// Beware, this is duplicated in librustc_passes/entry.rs (with
|
||||||
|
@ -201,10 +197,6 @@ impl<'a> MutVisitor for EntryPointCleaner<'a> {
|
||||||
|
|
||||||
smallvec![item]
|
smallvec![item]
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_mac(&mut self, _mac: &mut ast::MacCall) {
|
|
||||||
// Do nothing.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Crawl over the crate, inserting test reexports and the test main function
|
/// Crawl over the crate, inserting test reexports and the test main function
|
||||||
|
|
|
@ -547,11 +547,6 @@ impl<'a> MutVisitor for StripUnconfigured<'a> {
|
||||||
noop_flat_map_assoc_item(configure!(self, item), self)
|
noop_flat_map_assoc_item(configure!(self, item), self)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_mac(&mut self, _mac: &mut ast::MacCall) {
|
|
||||||
// Don't configure interpolated AST (cf. issue #34171).
|
|
||||||
// Interpolated AST will get configured once the surrounding tokens are parsed.
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_pat(&mut self, pat: &mut P<ast::Pat>) {
|
fn visit_pat(&mut self, pat: &mut P<ast::Pat>) {
|
||||||
self.configure_pat(pat);
|
self.configure_pat(pat);
|
||||||
noop_visit_pat(pat, self)
|
noop_visit_pat(pat, self)
|
||||||
|
|
|
@ -850,8 +850,6 @@ impl<'a, 'b> MacroExpander<'a, 'b> {
|
||||||
|
|
||||||
visit::walk_item(self, item);
|
visit::walk_item(self, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_mac(&mut self, _: &'ast ast::MacCall) {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if !self.cx.ecfg.proc_macro_hygiene() {
|
if !self.cx.ecfg.proc_macro_hygiene() {
|
||||||
|
|
|
@ -27,10 +27,6 @@ impl MutVisitor for Marker {
|
||||||
fn visit_span(&mut self, span: &mut Span) {
|
fn visit_span(&mut self, span: &mut Span) {
|
||||||
*span = span.apply_mark(self.0, self.1)
|
*span = span.apply_mark(self.0, self.1)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_mac(&mut self, mac: &mut MacCall) {
|
|
||||||
mut_visit::noop_visit_mac(mac, self)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An iterator over the token trees in a delimited token tree (`{ ... }`) or a sequence (`$(...)`).
|
/// An iterator over the token trees in a delimited token tree (`{ ... }`) or a sequence (`$(...)`).
|
||||||
|
|
|
@ -21,9 +21,6 @@ impl MutVisitor for ToZzIdentMutVisitor {
|
||||||
fn visit_ident(&mut self, ident: &mut Ident) {
|
fn visit_ident(&mut self, ident: &mut Ident) {
|
||||||
*ident = Ident::from_str("zz");
|
*ident = Ident::from_str("zz");
|
||||||
}
|
}
|
||||||
fn visit_mac(&mut self, mac: &mut ast::MacCall) {
|
|
||||||
mut_visit::noop_visit_mac(mac, self)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Maybe add to `expand.rs`.
|
// Maybe add to `expand.rs`.
|
||||||
|
|
|
@ -386,8 +386,4 @@ impl<'a, 'b> MutVisitor for PlaceholderExpander<'a, 'b> {
|
||||||
|item| !matches!(item.kind, ast::ItemKind::MacCall(_) if !self.cx.ecfg.keep_macs),
|
|item| !matches!(item.kind, ast::ItemKind::MacCall(_) if !self.cx.ecfg.keep_macs),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_mac(&mut self, _mac: &mut ast::MacCall) {
|
|
||||||
// Do nothing.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -881,12 +881,6 @@ impl<'a> MutVisitor for ReplaceBodyWithLoop<'a, '_> {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// in general the pretty printer processes unexpanded code, so
|
|
||||||
// we override the default `visit_mac` method which panics.
|
|
||||||
fn visit_mac(&mut self, mac: &mut ast::MacCall) {
|
|
||||||
noop_visit_mac(mac, self)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns a version string such as "rustc 1.46.0 (04488afe3 2020-08-24)"
|
/// Returns a version string such as "rustc 1.46.0 (04488afe3 2020-08-24)"
|
||||||
|
|
|
@ -271,14 +271,8 @@ impl<'a, T: EarlyLintPass> ast_visit::Visitor<'a> for EarlyContextAndPass<'a, T>
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_mac(&mut self, mac: &'a ast::MacCall) {
|
fn visit_mac(&mut self, mac: &'a ast::MacCall) {
|
||||||
// FIXME(#54110): So, this setup isn't really right. I think
|
|
||||||
// that (a) the librustc_ast visitor ought to be doing this as
|
|
||||||
// part of `walk_mac`, and (b) we should be calling
|
|
||||||
// `visit_path`, *but* that would require a `NodeId`, and I
|
|
||||||
// want to get #53686 fixed quickly. -nmatsakis
|
|
||||||
ast_visit::walk_path(self, &mac.path);
|
|
||||||
|
|
||||||
run_early_pass!(self, check_mac, mac);
|
run_early_pass!(self, check_mac, mac);
|
||||||
|
ast_visit::walk_mac(self, mac);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -570,10 +570,6 @@ impl<'a> Parser<'a> {
|
||||||
fn make_all_value_bindings_mutable(pat: &mut P<Pat>) -> bool {
|
fn make_all_value_bindings_mutable(pat: &mut P<Pat>) -> bool {
|
||||||
struct AddMut(bool);
|
struct AddMut(bool);
|
||||||
impl MutVisitor for AddMut {
|
impl MutVisitor for AddMut {
|
||||||
fn visit_mac(&mut self, mac: &mut MacCall) {
|
|
||||||
noop_visit_mac(mac, self);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_pat(&mut self, pat: &mut P<Pat>) {
|
fn visit_pat(&mut self, pat: &mut P<Pat>) {
|
||||||
if let PatKind::Ident(BindingMode::ByValue(m @ Mutability::Not), ..) = &mut pat.kind
|
if let PatKind::Ident(BindingMode::ByValue(m @ Mutability::Not), ..) = &mut pat.kind
|
||||||
{
|
{
|
||||||
|
|
|
@ -338,6 +338,7 @@ impl<'v> ast_visit::Visitor<'v> for StatCollector<'v> {
|
||||||
|
|
||||||
fn visit_mac(&mut self, mac: &'v ast::MacCall) {
|
fn visit_mac(&mut self, mac: &'v ast::MacCall) {
|
||||||
self.record("MacCall", Id::None, mac);
|
self.record("MacCall", Id::None, mac);
|
||||||
|
ast_visit::walk_mac(self, mac)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_path_segment(&mut self, path_span: Span, path_segment: &'v ast::PathSegment) {
|
fn visit_path_segment(&mut self, path_span: Span, path_segment: &'v ast::PathSegment) {
|
||||||
|
|
|
@ -149,9 +149,6 @@ impl<'a, 'tcx, 'b> Visitor<'tcx> for SimilarNamesNameVisitor<'a, 'tcx, 'b> {
|
||||||
_ => walk_pat(self, pat),
|
_ => walk_pat(self, pat),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn visit_mac(&mut self, _mac: &MacCall) {
|
|
||||||
// do not check macs
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
|
@ -356,9 +353,6 @@ impl<'a, 'tcx> Visitor<'tcx> for SimilarNamesLocalVisitor<'a, 'tcx> {
|
||||||
fn visit_item(&mut self, _: &Item) {
|
fn visit_item(&mut self, _: &Item) {
|
||||||
// do not recurse into inner items
|
// do not recurse into inner items
|
||||||
}
|
}
|
||||||
fn visit_mac(&mut self, _mac: &MacCall) {
|
|
||||||
// do not check macs
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl EarlyLintPass for NonExpressiveNames {
|
impl EarlyLintPass for NonExpressiveNames {
|
||||||
|
|
Loading…
Reference in New Issue