Auto merge of #11811 - y21:avoid_cx_struct_span_lint, r=Manishearth
disallow calls to `LintContext::struct_span_lint` and `TyCtxt::struct_span_lint_hir` `LintContext::struct_span_lint` and `TyCtxt::struct_span_lint_hir` don't show the link to the clippy documentation, see: #11805 In #11810, the last few calls to those methods were replaced with `span_lint_*`. It seems like we should just disallow them altogether so that no new code tries to use them. The existing `disallowed_methods` lint makes this easy. changelog: none
This commit is contained in:
commit
662ea3f9f4
@ -1 +1,7 @@
|
|||||||
avoid-breaking-exported-api = false
|
avoid-breaking-exported-api = false
|
||||||
|
|
||||||
|
# use the various `span_lint_*` methods instead, which also add a link to the docs
|
||||||
|
disallowed-methods = [
|
||||||
|
"rustc_lint::context::LintContext::struct_span_lint",
|
||||||
|
"rustc_middle::ty::context::TyCtxt::struct_span_lint_hir"
|
||||||
|
]
|
||||||
|
@ -46,6 +46,7 @@ fn docs_link(diag: &mut Diagnostic, lint: &'static Lint) {
|
|||||||
/// | ^^^^^^^^^^^^^^^^^^^^^^^
|
/// | ^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
/// ```
|
/// ```
|
||||||
pub fn span_lint<T: LintContext>(cx: &T, lint: &'static Lint, sp: impl Into<MultiSpan>, msg: &str) {
|
pub fn span_lint<T: LintContext>(cx: &T, lint: &'static Lint, sp: impl Into<MultiSpan>, msg: &str) {
|
||||||
|
#[expect(clippy::disallowed_methods)]
|
||||||
cx.struct_span_lint(lint, sp, msg.to_string(), |diag| {
|
cx.struct_span_lint(lint, sp, msg.to_string(), |diag| {
|
||||||
docs_link(diag, lint);
|
docs_link(diag, lint);
|
||||||
diag
|
diag
|
||||||
@ -80,6 +81,7 @@ pub fn span_lint_and_help<T: LintContext>(
|
|||||||
help_span: Option<Span>,
|
help_span: Option<Span>,
|
||||||
help: &str,
|
help: &str,
|
||||||
) {
|
) {
|
||||||
|
#[expect(clippy::disallowed_methods)]
|
||||||
cx.struct_span_lint(lint, span, msg.to_string(), |diag| {
|
cx.struct_span_lint(lint, span, msg.to_string(), |diag| {
|
||||||
let help = help.to_string();
|
let help = help.to_string();
|
||||||
if let Some(help_span) = help_span {
|
if let Some(help_span) = help_span {
|
||||||
@ -123,6 +125,7 @@ pub fn span_lint_and_note<T: LintContext>(
|
|||||||
note_span: Option<Span>,
|
note_span: Option<Span>,
|
||||||
note: &str,
|
note: &str,
|
||||||
) {
|
) {
|
||||||
|
#[expect(clippy::disallowed_methods)]
|
||||||
cx.struct_span_lint(lint, span, msg.to_string(), |diag| {
|
cx.struct_span_lint(lint, span, msg.to_string(), |diag| {
|
||||||
let note = note.to_string();
|
let note = note.to_string();
|
||||||
if let Some(note_span) = note_span {
|
if let Some(note_span) = note_span {
|
||||||
@ -145,6 +148,7 @@ pub fn span_lint_and_then<C, S, F>(cx: &C, lint: &'static Lint, sp: S, msg: &str
|
|||||||
S: Into<MultiSpan>,
|
S: Into<MultiSpan>,
|
||||||
F: FnOnce(&mut Diagnostic),
|
F: FnOnce(&mut Diagnostic),
|
||||||
{
|
{
|
||||||
|
#[expect(clippy::disallowed_methods)]
|
||||||
cx.struct_span_lint(lint, sp, msg.to_string(), |diag| {
|
cx.struct_span_lint(lint, sp, msg.to_string(), |diag| {
|
||||||
f(diag);
|
f(diag);
|
||||||
docs_link(diag, lint);
|
docs_link(diag, lint);
|
||||||
@ -153,6 +157,7 @@ pub fn span_lint_and_then<C, S, F>(cx: &C, lint: &'static Lint, sp: S, msg: &str
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn span_lint_hir(cx: &LateContext<'_>, lint: &'static Lint, hir_id: HirId, sp: Span, msg: &str) {
|
pub fn span_lint_hir(cx: &LateContext<'_>, lint: &'static Lint, hir_id: HirId, sp: Span, msg: &str) {
|
||||||
|
#[expect(clippy::disallowed_methods)]
|
||||||
cx.tcx.struct_span_lint_hir(lint, hir_id, sp, msg.to_string(), |diag| {
|
cx.tcx.struct_span_lint_hir(lint, hir_id, sp, msg.to_string(), |diag| {
|
||||||
docs_link(diag, lint);
|
docs_link(diag, lint);
|
||||||
diag
|
diag
|
||||||
@ -167,6 +172,7 @@ pub fn span_lint_hir_and_then(
|
|||||||
msg: &str,
|
msg: &str,
|
||||||
f: impl FnOnce(&mut Diagnostic),
|
f: impl FnOnce(&mut Diagnostic),
|
||||||
) {
|
) {
|
||||||
|
#[expect(clippy::disallowed_methods)]
|
||||||
cx.tcx.struct_span_lint_hir(lint, hir_id, sp, msg.to_string(), |diag| {
|
cx.tcx.struct_span_lint_hir(lint, hir_id, sp, msg.to_string(), |diag| {
|
||||||
f(diag);
|
f(diag);
|
||||||
docs_link(diag, lint);
|
docs_link(diag, lint);
|
||||||
|
27
tests/ui-internal/disallow_struct_span_lint.rs
Normal file
27
tests/ui-internal/disallow_struct_span_lint.rs
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#![feature(rustc_private)]
|
||||||
|
|
||||||
|
extern crate rustc_errors;
|
||||||
|
extern crate rustc_hir;
|
||||||
|
extern crate rustc_lint;
|
||||||
|
extern crate rustc_middle;
|
||||||
|
|
||||||
|
use rustc_errors::{DiagnosticMessage, MultiSpan};
|
||||||
|
use rustc_hir::hir_id::HirId;
|
||||||
|
use rustc_lint::{Lint, LintContext};
|
||||||
|
use rustc_middle::ty::TyCtxt;
|
||||||
|
|
||||||
|
pub fn a(cx: impl LintContext, lint: &'static Lint, span: impl Into<MultiSpan>, msg: impl Into<DiagnosticMessage>) {
|
||||||
|
cx.struct_span_lint(lint, span, msg, |b| b);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn b(
|
||||||
|
tcx: TyCtxt<'_>,
|
||||||
|
lint: &'static Lint,
|
||||||
|
hir_id: HirId,
|
||||||
|
span: impl Into<MultiSpan>,
|
||||||
|
msg: impl Into<DiagnosticMessage>,
|
||||||
|
) {
|
||||||
|
tcx.struct_span_lint_hir(lint, hir_id, span, msg, |b| b);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
17
tests/ui-internal/disallow_struct_span_lint.stderr
Normal file
17
tests/ui-internal/disallow_struct_span_lint.stderr
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
error: use of a disallowed method `rustc_lint::context::LintContext::struct_span_lint`
|
||||||
|
--> $DIR/disallow_struct_span_lint.rs:14:5
|
||||||
|
|
|
||||||
|
LL | cx.struct_span_lint(lint, span, msg, |b| b);
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: `-D clippy::disallowed-methods` implied by `-D warnings`
|
||||||
|
= help: to override `-D warnings` add `#[allow(clippy::disallowed_methods)]`
|
||||||
|
|
||||||
|
error: use of a disallowed method `rustc_middle::ty::context::TyCtxt::struct_span_lint_hir`
|
||||||
|
--> $DIR/disallow_struct_span_lint.rs:24:5
|
||||||
|
|
|
||||||
|
LL | tcx.struct_span_lint_hir(lint, hir_id, span, msg, |b| b);
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: aborting due to 2 previous errors
|
||||||
|
|
Loading…
Reference in New Issue
Block a user