rustc_attr_parsing/
lints.rs1use rustc_attr_data_structures::lints::{AttributeLint, AttributeLintKind};
2use rustc_errors::{DiagArgValue, LintEmitter};
3use rustc_hir::HirId;
4
5use crate::session_diagnostics;
6
7pub fn emit_attribute_lint<L: LintEmitter>(lint: &AttributeLint<HirId>, lint_emitter: L) {
8 let AttributeLint { id, span, kind } = lint;
9
10 match kind {
11 &AttributeLintKind::UnusedDuplicate { this, other, warning } => lint_emitter
12 .emit_node_span_lint(
13 rustc_session::lint::builtin::UNUSED_ATTRIBUTES,
14 *id,
15 *span,
16 session_diagnostics::UnusedDuplicate { this, other, warning },
17 ),
18 AttributeLintKind::IllFormedAttributeInput { suggestions } => {
19 lint_emitter.emit_node_span_lint(
20 rustc_session::lint::builtin::ILL_FORMED_ATTRIBUTE_INPUT,
21 *id,
22 *span,
23 session_diagnostics::IllFormedAttributeInput {
24 num_suggestions: suggestions.len(),
25 suggestions: DiagArgValue::StrListSepByAnd(
26 suggestions.into_iter().map(|s| format!("`{s}`").into()).collect(),
27 ),
28 },
29 );
30 }
31 }
32}