3 //! This module shows spans for all expressions in the crate
4 //! to help with compiler debugging.
19 impl FromStr for Mode {
21 fn from_str(s: &str) -> Result<Mode, ()> {
23 "expr" => Mode::Expression,
24 "pat" => Mode::Pattern,
32 struct ShowSpanVisitor<'a> {
33 span_diagnostic: &'a errors::Handler,
37 impl<'a> Visitor<'a> for ShowSpanVisitor<'a> {
38 fn visit_expr(&mut self, e: &'a ast::Expr) {
39 if let Mode::Expression = self.mode {
40 self.span_diagnostic.span_warn(e.span, "expression");
42 visit::walk_expr(self, e);
45 fn visit_pat(&mut self, p: &'a ast::Pat) {
46 if let Mode::Pattern = self.mode {
47 self.span_diagnostic.span_warn(p.span, "pattern");
49 visit::walk_pat(self, p);
52 fn visit_ty(&mut self, t: &'a ast::Ty) {
53 if let Mode::Type = self.mode {
54 self.span_diagnostic.span_warn(t.span, "type");
56 visit::walk_ty(self, t);
59 fn visit_mac(&mut self, mac: &'a ast::Mac) {
60 visit::walk_mac(self, mac);
64 pub fn run(span_diagnostic: &errors::Handler,
67 let mode = match mode.parse().ok() {
71 let mut v = ShowSpanVisitor {
75 visit::walk_crate(&mut v, krate);