mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-30 22:12:15 +00:00
Rollup merge of #86478 - ehuss:future-incompat-test, r=oli-obk
Add -Zfuture-incompat-test to assist with testing future-incompat reports. This adds a `-Zfuture-incompat-test` cli flag to assist with testing future-incompatible reports. This flag causes all lints to be treated as a future-incompatible lint, and will emit a report for them. This is being added so that Cargo's testsuite can reliably test the reporting infrastructure. Right now, Cargo relies on using array_into_iter as a test subject. Since the breaking "future incompatible" lints are never intended to last forever, this means Cargo's testsuite would always need to keep changing to choose different lints (for example, #86330 proposed dropping that moniker for array_into_iter). With this flag, Cargo's tests can trigger any lint and check for the report.
This commit is contained in:
commit
98130137d9
@ -633,6 +633,7 @@ fn test_debugging_options_tracking_hash() {
|
||||
untracked!(dump_mir_graphviz, true);
|
||||
untracked!(emit_future_incompat_report, true);
|
||||
untracked!(emit_stack_sizes, true);
|
||||
untracked!(future_incompat_test, true);
|
||||
untracked!(hir_stats, true);
|
||||
untracked!(identify_regions, true);
|
||||
untracked!(incremental_ignore_spans, true);
|
||||
|
@ -8,7 +8,7 @@ use rustc_hir::HirId;
|
||||
use rustc_index::vec::IndexVec;
|
||||
use rustc_session::lint::{
|
||||
builtin::{self, FORBIDDEN_LINT_GROUPS},
|
||||
FutureIncompatibilityReason, FutureIncompatibleInfo, Level, Lint, LintId,
|
||||
FutureIncompatibilityReason, Level, Lint, LintId,
|
||||
};
|
||||
use rustc_session::{DiagnosticMessageId, Session};
|
||||
use rustc_span::hygiene::MacroKind;
|
||||
@ -223,12 +223,12 @@ pub fn struct_lint_level<'s, 'd>(
|
||||
let lint_id = LintId::of(lint);
|
||||
let future_incompatible = lint.future_incompatible;
|
||||
|
||||
let has_future_breakage = matches!(
|
||||
future_incompatible,
|
||||
Some(FutureIncompatibleInfo {
|
||||
reason: FutureIncompatibilityReason::FutureReleaseErrorReportNow,
|
||||
..
|
||||
})
|
||||
let has_future_breakage = future_incompatible.map_or(
|
||||
// Default allow lints trigger too often for testing.
|
||||
sess.opts.debugging_opts.future_incompat_test && lint.default_level != Level::Allow,
|
||||
|incompat| {
|
||||
matches!(incompat.reason, FutureIncompatibilityReason::FutureReleaseErrorReportNow)
|
||||
},
|
||||
);
|
||||
|
||||
let mut err = match (level, span) {
|
||||
|
@ -1084,6 +1084,8 @@ options! {
|
||||
"set the optimization fuel quota for a crate"),
|
||||
function_sections: Option<bool> = (None, parse_opt_bool, [TRACKED],
|
||||
"whether each function should go in its own section"),
|
||||
future_incompat_test: bool = (false, parse_bool, [UNTRACKED],
|
||||
"forces all lints to be future incompatible, used for internal testing (default: no)"),
|
||||
gcc_ld: Option<LdImpl> = (None, parse_gcc_ld, [TRACKED], "implementation of ld used by cc"),
|
||||
graphviz_dark_mode: bool = (false, parse_bool, [UNTRACKED],
|
||||
"use dark-themed colors in graphviz output (default: no)"),
|
||||
|
10
src/test/ui/lint/future-incompat-test.rs
Normal file
10
src/test/ui/lint/future-incompat-test.rs
Normal file
@ -0,0 +1,10 @@
|
||||
// compile-flags: -Zfuture-incompat-test -Zemit-future-incompat-report
|
||||
// check-pass
|
||||
|
||||
// The `-Zfuture-incompat-test flag causes any normal warning to be included
|
||||
// in the future-incompatible report. The stderr output here should mention
|
||||
// the future incompatible report (as extracted by compiletest).
|
||||
|
||||
fn main() {
|
||||
let x = 1;
|
||||
}
|
9
src/test/ui/lint/future-incompat-test.stderr
Normal file
9
src/test/ui/lint/future-incompat-test.stderr
Normal file
@ -0,0 +1,9 @@
|
||||
Future incompatibility report: Future breakage diagnostic:
|
||||
warning: unused variable: `x`
|
||||
--> $DIR/future-incompat-test.rs:9:9
|
||||
|
|
||||
LL | let x = 1;
|
||||
| ^ help: if this is intentional, prefix it with an underscore: `_x`
|
||||
|
|
||||
= note: `-A unused-variables` implied by `-A unused`
|
||||
|
@ -81,7 +81,7 @@ LL | tuple_from_req!(Foo);
|
||||
|
||||
warning: 5 warnings emitted
|
||||
|
||||
Future incompatibility report: Future breakage date: None, diagnostic:
|
||||
Future incompatibility report: Future breakage diagnostic:
|
||||
warning: using an old version of `time-macros-impl`
|
||||
--> $DIR/time-macros-impl/src/lib.rs:5:32
|
||||
|
|
||||
@ -99,7 +99,7 @@ LL | impl_macros!(Foo);
|
||||
= note: the `time-macros-impl` crate will stop compiling in futures version of Rust. Please update to the latest version of the `time` crate to avoid breakage
|
||||
= note: this warning originates in the macro `impl_macros` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
Future breakage date: None, diagnostic:
|
||||
Future breakage diagnostic:
|
||||
warning: using an old version of `time-macros-impl`
|
||||
--> $DIR/time-macros-impl-0.1.0/src/lib.rs:5:32
|
||||
|
|
||||
@ -116,7 +116,7 @@ LL | impl_macros!(Foo);
|
||||
= note: the `time-macros-impl` crate will stop compiling in futures version of Rust. Please update to the latest version of the `time` crate to avoid breakage
|
||||
= note: this warning originates in the macro `impl_macros` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
Future breakage date: None, diagnostic:
|
||||
Future breakage diagnostic:
|
||||
warning: using an old version of `js-sys`
|
||||
--> $DIR/js-sys-0.3.17/src/lib.rs:5:32
|
||||
|
|
||||
@ -133,7 +133,7 @@ LL | arrays!(Foo);
|
||||
= note: older versions of the `js-sys` crate will stop compiling in future versions of Rust; please update to `js-sys` v0.3.40 or above
|
||||
= note: this warning originates in the macro `arrays` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
Future breakage date: None, diagnostic:
|
||||
Future breakage diagnostic:
|
||||
warning: using an old version of `actix-web`
|
||||
--> $DIR/actix-web/src/extract.rs:5:34
|
||||
|
|
||||
@ -150,7 +150,7 @@ LL | tuple_from_req!(Foo);
|
||||
= note: the version of `actix-web` you are using might stop compiling in future versions of Rust; please update to the latest version of the `actix-web` crate to avoid breakage
|
||||
= note: this warning originates in the macro `tuple_from_req` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
Future breakage date: None, diagnostic:
|
||||
Future breakage diagnostic:
|
||||
warning: using an old version of `actix-web`
|
||||
--> $DIR/actix-web-2.0.0/src/extract.rs:5:34
|
||||
|
|
||||
|
@ -11,7 +11,7 @@ LL | enum ProceduralMasqueradeDummyType {
|
||||
|
||||
warning: 1 warning emitted
|
||||
|
||||
Future incompatibility report: Future breakage date: None, diagnostic:
|
||||
Future incompatibility report: Future breakage diagnostic:
|
||||
warning: using `procedural-masquerade` crate
|
||||
--> $DIR/issue-73933-procedural-masquerade.rs:8:6
|
||||
|
|
||||
|
@ -43,7 +43,6 @@ struct FutureIncompatReport {
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct FutureBreakageItem {
|
||||
future_breakage_date: Option<String>,
|
||||
diagnostic: Diagnostic,
|
||||
}
|
||||
|
||||
@ -104,9 +103,7 @@ pub fn extract_rendered(output: &str) -> String {
|
||||
.into_iter()
|
||||
.map(|item| {
|
||||
format!(
|
||||
"Future breakage date: {}, diagnostic:\n{}",
|
||||
item.future_breakage_date
|
||||
.unwrap_or_else(|| "None".to_string()),
|
||||
"Future breakage diagnostic:\n{}",
|
||||
item.diagnostic
|
||||
.rendered
|
||||
.unwrap_or_else(|| "Not rendered".to_string())
|
||||
|
Loading…
Reference in New Issue
Block a user