3 //! This module shows spans for all expressions in the crate
4 //! to help with compiler debugging.
10 use rustc_ast::visit::Visitor;
18 impl FromStr for Mode {
20 fn from_str(s: &str) -> Result<Mode, ()> {
22 "expr" => Mode::Expression,
23 "pat" => Mode::Pattern,
31 struct ShowSpanVisitor<'a> {
32 span_diagnostic: &'a rustc_errors::Handler,
36 impl<'a> Visitor<'a> for ShowSpanVisitor<'a> {
37 fn visit_expr(&mut self, e: &'a ast::Expr) {
38 if let Mode::Expression = self.mode {
39 self.span_diagnostic.span_warn(e.span, "expression");
41 visit::walk_expr(self, e);
44 fn visit_pat(&mut self, p: &'a ast::Pat) {
45 if let Mode::Pattern = self.mode {
46 self.span_diagnostic.span_warn(p.span, "pattern");
48 visit::walk_pat(self, p);
51 fn visit_ty(&mut self, t: &'a ast::Ty) {
52 if let Mode::Type = self.mode {
53 self.span_diagnostic.span_warn(t.span, "type");
55 visit::walk_ty(self, t);
59 pub fn run(span_diagnostic: &rustc_errors::Handler, mode: &str, krate: &ast::Crate) {
60 let Ok(mode) = mode.parse() else {
63 let mut v = ShowSpanVisitor { span_diagnostic, mode };
64 visit::walk_crate(&mut v, krate);