})
}
+ fn visit_expr_field(&mut self, f: &'a ast::ExprField) {
+ self.with_lint_attrs(f.id, &f.attrs, |cx| {
+ ast_visit::walk_expr_field(cx, f);
+ })
+ }
+
fn visit_stmt(&mut self, s: &'a ast::Stmt) {
// Add the statement's lint attributes to our
// current state when checking the statement itself.
}
fn visit_arm(&mut self, a: &'a ast::Arm) {
- run_early_pass!(self, check_arm, a);
- ast_visit::walk_arm(self, a);
+ self.with_lint_attrs(a.id, &a.attrs, |cx| {
+ run_early_pass!(cx, check_arm, a);
+ ast_visit::walk_arm(cx, a);
+ })
}
fn visit_expr_post(&mut self, e: &'a ast::Expr) {
// All of the buffered lints should have been emitted at this point.
// If not, that means that we somehow buffered a lint for a node id
// that was not lint-checked (perhaps it doesn't exist?). This is a bug.
- for (_id, lints) in buffered.map {
+ for (id, lints) in buffered.map {
for early_lint in lints {
- sess.delay_span_bug(early_lint.span, "failed to process buffered lint here");
+ sess.delay_span_bug(
+ early_lint.span,
+ &format!(
+ "failed to process buffered lint here (dummy = {})",
+ id == ast::DUMMY_NODE_ID
+ ),
+ );
}
}
}