Auto merge of #115717 - jsgf:stablize-json-unused-externs, r=oli-obk
Stabilize --json unused-externs(-silent) Implement https://github.com/rust-lang/compiler-team/issues/674 ~~(pending its approval)~~
This commit is contained in:
commit
d493fd148d
@ -2317,13 +2317,6 @@ pub fn build_session_options(early_dcx: &mut EarlyDiagCtxt, matches: &getopts::M
|
||||
|
||||
check_error_format_stability(early_dcx, &unstable_opts, error_format);
|
||||
|
||||
if !unstable_opts.unstable_options && json_unused_externs.is_enabled() {
|
||||
early_dcx.early_fatal(
|
||||
"the `-Z unstable-options` flag must also be passed to enable \
|
||||
the flag `--json=unused-externs`",
|
||||
);
|
||||
}
|
||||
|
||||
let output_types = parse_output_types(early_dcx, &unstable_opts, matches);
|
||||
|
||||
let mut cg = CodegenOptions::build(early_dcx, matches);
|
||||
|
@ -262,6 +262,36 @@ information, even if the diagnostics have been suppressed (such as with an
|
||||
}
|
||||
```
|
||||
|
||||
## Unused Dependency Notifications
|
||||
|
||||
The options `--json=unused-externs` and `--json=unused-externs-silent` in
|
||||
conjunction with the `unused-crate-dependencies` lint will emit JSON structures
|
||||
reporting any crate dependencies (specified with `--extern`) which never had any
|
||||
symbols referenced. These are intended to be consumed by the build system which
|
||||
can then emit diagnostics telling the user to remove the unused dependencies
|
||||
from `Cargo.toml` (or whatever build-system file defines dependencies).
|
||||
|
||||
The JSON structure is:
|
||||
```json
|
||||
{
|
||||
"lint_level": "deny", /* Level of the warning */
|
||||
"unused_names": [
|
||||
"foo" /* Names of unused crates, as specified with --extern foo=libfoo.rlib */
|
||||
],
|
||||
}
|
||||
```
|
||||
|
||||
The warn/deny/forbid lint level (as defined either on the command line or in the
|
||||
source) dictates the `lint_level` in the JSON. With `unused-externs`, a
|
||||
`deny` or `forbid` level diagnostic will also cause `rustc` to exit with a
|
||||
failure exit code.
|
||||
|
||||
`unused-externs-silent` will report the diagnostic the same way, but will not
|
||||
cause `rustc` to exit with failure - it's up to the consumer to flag failure
|
||||
appropriately. (This is needed by Cargo which shares the same dependencies
|
||||
across multiple build targets, so it should only report an unused dependency if
|
||||
its not used by any of the targets.)
|
||||
|
||||
[option-emit]: command-line-arguments.md#option-emit
|
||||
[option-error-format]: command-line-arguments.md#option-error-format
|
||||
[option-json]: command-line-arguments.md#option-json
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
//@ edition:2018
|
||||
//@ check-pass
|
||||
//@ compile-flags: -Dunused-crate-dependencies -Zunstable-options --json unused-externs-silent --error-format=json
|
||||
//@ compile-flags: -Dunused-crate-dependencies --json unused-externs-silent --error-format=json
|
||||
//@ aux-crate:bar=bar.rs
|
||||
|
||||
fn main() {}
|
||||
|
@ -1,7 +1,7 @@
|
||||
// Check for unused crate dep, json event, deny, expect compile failure
|
||||
|
||||
//@ edition:2018
|
||||
//@ compile-flags: -Dunused-crate-dependencies -Zunstable-options --json unused-externs --error-format=json
|
||||
//@ compile-flags: -Dunused-crate-dependencies --json unused-externs --error-format=json
|
||||
//@ aux-crate:bar=bar.rs
|
||||
|
||||
fn main() {}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
//@ edition:2018
|
||||
//@ check-pass
|
||||
//@ compile-flags: -Wunused-crate-dependencies -Zunstable-options --json unused-externs --error-format=json
|
||||
//@ compile-flags: -Wunused-crate-dependencies --json unused-externs --error-format=json
|
||||
//@ aux-crate:bar=bar.rs
|
||||
|
||||
fn main() {}
|
||||
|
Loading…
x
Reference in New Issue
Block a user