Macro-Generated Code
When a developer uses a macro from a 3rd-party crate, it generates code that the developer cannot easily change or fix. Macro-generated code will still be linted, but if that code has any issues the developer cannot do anything to fix it beyond adding an #[allow(...)]
attribute.
Because of this, all bevy_lint
lint passes should skip code generated by an external macro. This can be done with Span::in_external_macro()
:
#![allow(unused)] fn main() { impl<'tcx> LateLintPass<'tcx> for MyLint { fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx Expr<'tcx>) { // Do not lint this expression if it was generated by an external macro. if expr.span.in_external_macro(cx.tcx.sess.source_map()) { return; } // ... } } }
For more information, please see Clippy's docs on macros, the issue about macros, and the PR that first incorporated these checks.