There're cases we need to use Visitor::visit and VisitorMut::visit in the same context. Since they're of the same name, compiler would be confused.
For example:
impl Visitor For NoopVisitor { .. }
impl VisitorMut for NoopVisitorMut { .. }
let mut visitor = NoopVisitor {};
let _ = stmt.visit(&mut visitor);
let mut visitor_mut = NoopVisitorMut {};
let _ = stmt.visit(&mut visitor_mut);
Would raise the error:
the trait bound `NoopVisitorMut: sqlparser::ast::Visitor` is not satisfied
the trait `sqlparser::ast::Visitor` is implemented for `NoopVisitor`