@@ -6,7 +6,7 @@ use crate::late::unerased_lint_store;
66use rustc_ast as ast;
77use rustc_ast_pretty:: pprust;
88use rustc_data_structures:: fx:: FxHashMap ;
9- use rustc_errors:: { struct_span_err , Applicability , Diagnostic , LintDiagnosticBuilder , MultiSpan } ;
9+ use rustc_errors:: { Applicability , Diagnostic , LintDiagnosticBuilder , MultiSpan } ;
1010use rustc_hir as hir;
1111use rustc_hir:: { intravisit, HirId } ;
1212use rustc_middle:: hir:: nested_filter;
@@ -26,7 +26,10 @@ use rustc_span::symbol::{sym, Symbol};
2626use rustc_span:: { Span , DUMMY_SP } ;
2727use tracing:: debug;
2828
29- use crate :: errors:: { MalformedAttribute , MalformedAttributeSub , UnknownTool } ;
29+ use crate :: errors:: {
30+ MalformedAttribute , MalformedAttributeSub , OverruledAttribute , OverruledAttributeSub ,
31+ UnknownTool ,
32+ } ;
3033
3134fn lint_levels ( tcx : TyCtxt < ' _ > , ( ) : ( ) ) -> LintLevelMap {
3235 let store = unerased_lint_store ( tcx) ;
@@ -191,16 +194,26 @@ impl<'s> LintLevelsBuilder<'s> {
191194 }
192195 } ;
193196 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+ } ) ;
204217 } else {
205218 self . struct_lint (
206219 FORBIDDEN_LINT_GROUPS ,
0 commit comments