use rustc_errors::{Applicability, Diag, DiagDecorator, DiagMessage};
use rustc_lint::{LateContext, Lint, LintContext};
use rustc_span::Span;
pub fn span_lint_and_help(
cx: &LateContext<'_>,
lint: &'static Lint,
span: Span,
msg: impl Into<DiagMessage>,
_help_span: Option<Span>,
help: impl Into<DiagMessage>,
) {
let msg = msg.into();
let help = help.into();
cx.emit_span_lint(
lint,
span,
DiagDecorator(move |diag: &mut Diag<'_, ()>| {
diag.primary_message(msg.clone());
diag.help(help.clone());
}),
);
}
pub fn span_lint_and_sugg(
cx: &LateContext<'_>,
lint: &'static Lint,
span: Span,
msg: impl Into<DiagMessage>,
help: impl Into<DiagMessage>,
parts: Vec<(Span, String)>,
) {
let msg = msg.into();
let help = help.into();
cx.emit_span_lint(
lint,
span,
DiagDecorator(move |diag: &mut Diag<'_, ()>| {
diag.primary_message(msg.clone());
diag.multipart_suggestion(
help.clone(),
parts.clone(),
Applicability::MachineApplicable,
);
}),
);
}
#[allow(dead_code)]
pub fn span_lint(
cx: &LateContext<'_>,
lint: &'static Lint,
span: Span,
msg: impl Into<DiagMessage>,
) {
let msg = msg.into();
cx.emit_span_lint(
lint,
span,
DiagDecorator(move |diag: &mut Diag<'_, ()>| {
diag.primary_message(msg.clone());
}),
);
}