@@ -83,10 +83,13 @@ impl LintLevelSets {
83
83
} ) ;
84
84
}
85
85
86
- fn get_lint_level ( & self , lint : & ' static Lint , idx : u32 )
86
+ fn get_lint_level ( & self ,
87
+ lint : & ' static Lint ,
88
+ idx : u32 ,
89
+ aux : Option < & FxHashMap < LintId , ( Level , LintSource ) > > )
87
90
-> ( Level , LintSource )
88
91
{
89
- let ( level, mut src) = self . get_lint_id_level ( LintId :: of ( lint) , idx) ;
92
+ let ( level, mut src) = self . get_lint_id_level ( LintId :: of ( lint) , idx, aux ) ;
90
93
91
94
// If `level` is none then we actually assume the default level for this
92
95
// lint.
@@ -97,7 +100,9 @@ impl LintLevelSets {
97
100
// `allow(warnings)` in scope then we want to respect that instead.
98
101
if level == Level :: Warn {
99
102
let ( warnings_level, warnings_src) =
100
- self . get_lint_id_level ( LintId :: of ( lint:: builtin:: WARNINGS ) , idx) ;
103
+ self . get_lint_id_level ( LintId :: of ( lint:: builtin:: WARNINGS ) ,
104
+ idx,
105
+ aux) ;
101
106
if let Some ( configured_warning_level) = warnings_level {
102
107
if configured_warning_level != Level :: Warn {
103
108
level = configured_warning_level;
@@ -112,9 +117,17 @@ impl LintLevelSets {
112
117
return ( level, src)
113
118
}
114
119
115
- fn get_lint_id_level ( & self , id : LintId , mut idx : u32 )
120
+ fn get_lint_id_level ( & self ,
121
+ id : LintId ,
122
+ mut idx : u32 ,
123
+ aux : Option < & FxHashMap < LintId , ( Level , LintSource ) > > )
116
124
-> ( Option < Level > , LintSource )
117
125
{
126
+ if let Some ( specs) = aux {
127
+ if let Some ( & ( level, src) ) = specs. get ( & id) {
128
+ return ( Some ( level) , src)
129
+ }
130
+ }
118
131
loop {
119
132
match self . list [ idx as usize ] {
120
133
LintSet :: CommandLine { ref specs } => {
@@ -212,21 +225,35 @@ impl<'a> LintLevelsBuilder<'a> {
212
225
specs. insert ( * id, ( level, src) ) ;
213
226
}
214
227
}
228
+
229
+ _ if !self . warn_about_weird_lints => { }
230
+
215
231
CheckLintNameResult :: Warning ( ref msg) => {
216
- if self . warn_about_weird_lints {
217
- self . struct_lint ( builtin:: RENAMED_AND_REMOVED_LINTS ,
218
- Some ( li. span . into ( ) ) ,
219
- msg)
220
- . emit ( ) ;
221
- }
232
+ let lint = builtin:: RENAMED_AND_REMOVED_LINTS ;
233
+ let ( level, src) = self . sets . get_lint_level ( lint,
234
+ self . cur ,
235
+ Some ( & specs) ) ;
236
+ lint:: struct_lint_level ( self . sess ,
237
+ lint,
238
+ level,
239
+ src,
240
+ Some ( li. span . into ( ) ) ,
241
+ msg)
242
+ . emit ( ) ;
222
243
}
223
244
CheckLintNameResult :: NoLint => {
224
- if self . warn_about_weird_lints {
225
- self . struct_lint ( builtin:: UNKNOWN_LINTS ,
226
- Some ( li. span . into ( ) ) ,
227
- & format ! ( "unknown lint: `{}`" , name) )
228
- . emit ( ) ;
229
- }
245
+ let lint = builtin:: UNKNOWN_LINTS ;
246
+ let ( level, src) = self . sets . get_lint_level ( lint,
247
+ self . cur ,
248
+ Some ( & specs) ) ;
249
+ let msg = format ! ( "unknown lint: `{}`" , name) ;
250
+ lint:: struct_lint_level ( self . sess ,
251
+ lint,
252
+ level,
253
+ src,
254
+ Some ( li. span . into ( ) ) ,
255
+ & msg)
256
+ . emit ( ) ;
230
257
}
231
258
}
232
259
}
@@ -236,7 +263,7 @@ impl<'a> LintLevelsBuilder<'a> {
236
263
if level == Level :: Forbid {
237
264
continue
238
265
}
239
- let forbid_src = match self . sets . get_lint_id_level ( * id, self . cur ) {
266
+ let forbid_src = match self . sets . get_lint_id_level ( * id, self . cur , None ) {
240
267
( Some ( Level :: Forbid ) , src) => src,
241
268
_ => continue ,
242
269
} ;
@@ -298,7 +325,7 @@ impl<'a> LintLevelsBuilder<'a> {
298
325
msg : & str )
299
326
-> DiagnosticBuilder < ' a >
300
327
{
301
- let ( level, src) = self . sets . get_lint_level ( lint, self . cur ) ;
328
+ let ( level, src) = self . sets . get_lint_level ( lint, self . cur , None ) ;
302
329
lint:: struct_lint_level ( self . sess , lint, level, src, span, msg)
303
330
}
304
331
@@ -337,7 +364,7 @@ impl LintLevelMap {
337
364
-> Option < ( Level , LintSource ) >
338
365
{
339
366
self . id_to_set . get ( & id) . map ( |idx| {
340
- self . sets . get_lint_level ( lint, * idx)
367
+ self . sets . get_lint_level ( lint, * idx, None )
341
368
} )
342
369
}
343
370
}
0 commit comments