]> git.lizzy.rs Git - rust.git/commitdiff
rustc_session: forbid lints override regardless of position
authorTobias Thiel <tobias011@gmail.com>
Wed, 8 Apr 2020 04:41:54 +0000 (21:41 -0700)
committerTobias Thiel <tobias011@gmail.com>
Wed, 8 Apr 2020 05:05:32 +0000 (22:05 -0700)
src/doc/rustc/src/lints/levels.md
src/librustc_session/config.rs
src/test/ui-fulldeps/lint-group-forbid-always-trumps-cli.rs [new file with mode: 0644]
src/test/ui-fulldeps/lint-group-forbid-always-trumps-cli.stderr [new file with mode: 0644]

index 3cfe2f698f3e01cf9a55afa67d3132d56aad52e1..64cbbbb003585fee465012f1115e831bb775d26c 100644 (file)
@@ -170,7 +170,7 @@ The order of these command line arguments is taken into account. The following a
 $ rustc lib.rs --crate-type=lib -D unused-variables -A unused-variables
 ```
 
-You can make use of this behavior by overriding the level of one specific lint out of a group of lints. The following example denies all the lints in the `unused` group, but explicitly allows the `unused-variables` lint in that group:
+You can make use of this behavior by overriding the level of one specific lint out of a group of lints. The following example denies all the lints in the `unused` group, but explicitly allows the `unused-variables` lint in that group (forbid still trumps everything regardless of ordering):
 
 ```bash
 $ rustc lib.rs --crate-type=lib -D unused -A unused-variables
index 58a03dbe388e65aeafd2af3f5e32171d3ed9f1f5..4e2423bc3b11452ac5be6eaa0abf44db2724fd3b 100644 (file)
@@ -1017,7 +1017,13 @@ pub fn get_cmd_lint_options(
     let mut describe_lints = false;
 
     for &level in &[lint::Allow, lint::Warn, lint::Deny, lint::Forbid] {
-        for (arg_pos, lint_name) in matches.opt_strs_pos(level.as_str()) {
+        for (passed_arg_pos, lint_name) in matches.opt_strs_pos(level.as_str()) {
+            let arg_pos = if let lint::Forbid = level {
+                // forbid is always specified last, so it can't be overridden
+                usize::max_value()
+            } else {
+                passed_arg_pos
+            };
             if lint_name == "help" {
                 describe_lints = true;
             } else {
diff --git a/src/test/ui-fulldeps/lint-group-forbid-always-trumps-cli.rs b/src/test/ui-fulldeps/lint-group-forbid-always-trumps-cli.rs
new file mode 100644 (file)
index 0000000..fc19bc0
--- /dev/null
@@ -0,0 +1,7 @@
+// aux-build:lint-group-plugin-test.rs
+// compile-flags: -F unused -A unused
+
+fn main() {
+    let x = 1;
+    //~^ ERROR unused variable: `x`
+}
diff --git a/src/test/ui-fulldeps/lint-group-forbid-always-trumps-cli.stderr b/src/test/ui-fulldeps/lint-group-forbid-always-trumps-cli.stderr
new file mode 100644 (file)
index 0000000..6bab367
--- /dev/null
@@ -0,0 +1,10 @@
+error: unused variable: `x`
+  --> $DIR/lint-group-forbid-always-trumps-cli.rs:5:9
+   |
+LL |     let x = 1;
+   |         ^ help: if this is intentional, prefix it with an underscore: `_x`
+   |
+   = note: `-F unused-variables` implied by `-F unused`
+
+error: aborting due to previous error
+