@@ -6,7 +6,7 @@ use crate::late::unerased_lint_store;
6
6
use rustc_ast as ast;
7
7
use rustc_ast_pretty:: pprust;
8
8
use rustc_data_structures:: fx:: FxHashMap ;
9
- use rustc_errors:: { struct_span_err , Applicability , Diagnostic , LintDiagnosticBuilder , MultiSpan } ;
9
+ use rustc_errors:: { Applicability , Diagnostic , LintDiagnosticBuilder , MultiSpan } ;
10
10
use rustc_hir as hir;
11
11
use rustc_hir:: { intravisit, HirId } ;
12
12
use rustc_middle:: hir:: nested_filter;
@@ -26,7 +26,10 @@ use rustc_span::symbol::{sym, Symbol};
26
26
use rustc_span:: { Span , DUMMY_SP } ;
27
27
use tracing:: debug;
28
28
29
- use crate :: errors:: { MalformedAttribute , MalformedAttributeSub , UnknownTool } ;
29
+ use crate :: errors:: {
30
+ MalformedAttribute , MalformedAttributeSub , OverruledAttribute , OverruledAttributeSub ,
31
+ UnknownTool ,
32
+ } ;
30
33
31
34
fn lint_levels ( tcx : TyCtxt < ' _ > , ( ) : ( ) ) -> LintLevelMap {
32
35
let store = unerased_lint_store ( tcx) ;
@@ -191,16 +194,26 @@ impl<'s> LintLevelsBuilder<'s> {
191
194
}
192
195
} ;
193
196
if !fcw_warning {
194
- let mut diag_builder = struct_span_err ! (
195
- self . sess,
196
- src. span( ) ,
197
- E0453 ,
198
- "{}({}) incompatible with previous forbid" ,
199
- level. as_str( ) ,
200
- src. name( ) ,
201
- ) ;
202
- decorate_diag ( & mut diag_builder) ;
203
- diag_builder. emit ( ) ;
197
+ self . sess . emit_err ( OverruledAttribute {
198
+ span : src. span ( ) ,
199
+ overruled : src. span ( ) ,
200
+ lint_level : level. as_str ( ) . to_string ( ) ,
201
+ lint_source : src. name ( ) ,
202
+ sub : match old_src {
203
+ LintLevelSource :: Default => {
204
+ OverruledAttributeSub :: DefaultSource { id : id. to_string ( ) }
205
+ }
206
+ LintLevelSource :: Node ( _, forbid_source_span, reason) => {
207
+ OverruledAttributeSub :: NodeSource {
208
+ span : forbid_source_span,
209
+ reason,
210
+ }
211
+ }
212
+ LintLevelSource :: CommandLine ( _, _) => {
213
+ OverruledAttributeSub :: CommandLineSource
214
+ }
215
+ } ,
216
+ } ) ;
204
217
} else {
205
218
self . struct_lint (
206
219
FORBIDDEN_LINT_GROUPS ,
0 commit comments