Skip to content

Commit

Permalink
rustc_session: forbid lints override regardless of position
Browse files Browse the repository at this point in the history
  • Loading branch information
tobithiel committed Apr 8, 2020
1 parent 42abbd8 commit f03db79
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/doc/rustc/src/lints/levels.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 7 additions & 1 deletion src/librustc_session/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
7 changes: 7 additions & 0 deletions src/test/ui-fulldeps/lint-group-forbid-always-trumps-cli.rs
Original file line number Diff line number Diff line change
@@ -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`
}
10 changes: 10 additions & 0 deletions src/test/ui-fulldeps/lint-group-forbid-always-trumps-cli.stderr
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit f03db79

Please sign in to comment.