@@ -37,6 +37,7 @@ enum lint {
37
37
while_true,
38
38
path_statement,
39
39
old_vecs,
40
+ unrecognized_warning,
40
41
}
41
42
42
43
// This is pretty unfortunate. We really want some sort of "deriving Enum"
@@ -48,6 +49,7 @@ fn int_to_lint(i: int) -> lint {
48
49
2 { while_true }
49
50
3 { path_statement }
50
51
4 { old_vecs }
52
+ 5 { unrecognized_warning }
51
53
}
52
54
}
53
55
@@ -90,7 +92,12 @@ fn get_lint_dict() -> lint_dict {
90
92
( "old_vecs" ,
91
93
@{ lint: old_vecs,
92
94
desc: "old (deprecated) vectors and strings" ,
93
- default : ignore} )
95
+ default : ignore} ) ,
96
+
97
+ ( "unrecognized_warning" ,
98
+ @{ lint: unrecognized_warning,
99
+ desc: "unrecognized warning attribute" ,
100
+ default : warn} )
94
101
95
102
] ;
96
103
hash_from_strs ( v)
@@ -188,12 +195,13 @@ impl methods for ctxt {
188
195
alt meta. node {
189
196
ast : : meta_word( lintname) {
190
197
alt lookup_lint( self . dict, lintname) {
191
- none {
192
- self. tcx. sess. span_err(
198
+ ( name, none) {
199
+ self . span_lint(
200
+ self . get_level( unrecognized_warning) ,
193
201
meta. span,
194
- #fmt( "unknown warning: '%s'" , lintname ) ) ;
202
+ #fmt( "unknown warning: '%s'" , name ) ) ;
195
203
}
196
- some( ( lint, new_level) ) {
204
+ ( _ , some( ( lint, new_level) ) ) {
197
205
// we do multiple unneeded copies of the map
198
206
// if many attributes are set, but this shouldn't
199
207
// actually be a problem...
@@ -225,7 +233,7 @@ impl methods for ctxt {
225
233
226
234
227
235
fn lookup_lint ( dict : lint_dict , s : str )
228
- -> option < ( lint , level ) > {
236
+ -> ( str , option < ( lint , level ) > ) {
229
237
let s = str:: replace ( s, "-" , "_" ) ;
230
238
let ( name, level) = if s. starts_with ( "no_" ) {
231
239
( s. substr ( 3 u, s. len ( ) - 3 u) , ignore)
@@ -234,10 +242,11 @@ fn lookup_lint(dict: lint_dict, s: str)
234
242
} else {
235
243
( s, warn)
236
244
} ;
237
- alt dict. find ( name) {
238
- none { none }
239
- some( spec) { some ( ( spec. lint , level) ) }
240
- }
245
+ ( name,
246
+ alt dict. find ( name) {
247
+ none { none }
248
+ some( spec) { some ( ( spec. lint , level) ) }
249
+ } )
241
250
}
242
251
243
252
fn check_item ( i : @ast:: item , & & cx: ctxt , v : visit:: vt < ctxt > ) {
@@ -249,6 +258,7 @@ fn check_item(i: @ast::item, &&cx: ctxt, v: visit::vt<ctxt>) {
249
258
while_true { check_item_while_true( cx, level, i) ; }
250
259
path_statement { check_item_path_statement( cx, level, i) ; }
251
260
old_vecs { check_item_old_vecs( cx, level, i) ; }
261
+ unrecognized_warning { /* this is checked elsewhere */ }
252
262
}
253
263
}
254
264
if !cx. is_default {
0 commit comments