self.cur,
Some(&specs));
let msg = format!("unknown lint: `{}`", name);
- lint::struct_lint_level(self.sess,
+ let mut db = lint::struct_lint_level(self.sess,
lint,
level,
src,
Some(li.span.into()),
- &msg)
- .emit();
+ &msg);
+ if name.as_str().chars().any(|c| c.is_uppercase()) {
+ let name_lower = name.as_str().to_lowercase();
+ if let CheckLintNameResult::NoLint =
+ store.check_lint_name(&name_lower) {
+ db.emit();
+ } else {
+ db.span_suggestion(
+ li.span,
+ "lowercase the lint name",
+ name_lower
+ ).emit();
+ }
+ } else {
+ db.emit();
+ }
}
}
}
--- /dev/null
+// Copyright 2014–2017 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// this tests the `unknown_lint` lint, especially the suggestions
+
+// the suggestion only appears if a lint with the lowercase name exists
+#[allow(FOO_BAR)]
+// the suggestion appears on all-uppercase names
+#[warn(DEAD_CODE)]
+// the suggestion appears also on mixed-case names
+#[deny(Warnings)]
+fn main() {
+ unimplemented!();
+}
--- /dev/null
+warning: unknown lint: `FOO_BAR`
+ --> $DIR/not_found.rs:14:9
+ |
+14 | #[allow(FOO_BAR)]
+ | ^^^^^^^
+ |
+ = note: #[warn(unknown_lints)] on by default
+
+warning: unknown lint: `DEAD_CODE`
+ --> $DIR/not_found.rs:16:8
+ |
+16 | #[warn(DEAD_CODE)]
+ | ^^^^^^^^^ help: lowercase the lint name: `dead_code`
+
+warning: unknown lint: `Warnings`
+ --> $DIR/not_found.rs:18:8
+ |
+18 | #[deny(Warnings)]
+ | ^^^^^^^^ help: lowercase the lint name: `warnings`
+