pub fn span_lint_hir_and_then(
cx: &LateContext<'_>,
lint: &'static Lint,
hir_id: HirId,
sp: impl Into<MultiSpan>,
msg: impl Into<DiagMessage>,
f: impl FnOnce(&mut Diag<'_, ()>),
)
Expand description
Like span_lint_and_then
, but emits the lint at the node identified by the given HirId
.
This is in contrast to span_lint_and_then
, which always emits the lint at the node that was
last passed to the LintPass::check_*
function.
The HirId
is used for checking lint level attributes and to fulfill lint expectations defined
via the #[expect]
attribute.
For example:
fn f() { /* <node_1> */
#[allow(clippy::some_lint)]
let _x = /* <expr_1> */;
}
If some_lint
does its analysis in LintPass::check_fn
(at <node_1>
) and emits a lint at
<expr_1>
using span_lint
, then allowing the lint at <expr_1>
as attempted in the snippet
will not work!
Even though that is where the warning points at, which would be confusing to users.
Instead, use this function and also pass the HirId
of <expr_1>
, which will let
the compiler check lint level attributes at the place of the expression and
the #[allow]
will work.