Skip to content

Commit 4febf44

Browse files
committed
And add `boundary_toolchains` test
1 parent 41e383f commit 4febf44

File tree

6 files changed

+108
-12
lines changed

6 files changed

+108
-12
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
use dylint_internal::{
2+
clippy_utils::set_toolchain_channel, find_and_replace, rustup::SanitizeEnvironment,
3+
testing::new_template,
4+
};
5+
use tempfile::tempdir;
6+
use test_log::test;
7+
8+
// smoelius: The channel date is one day later than the `rustc --version` date.
9+
const BOUNDARIES: [(&str, &str); 2] = [("2022-07-14", "2022-07-15"), ("2022-09-08", "2022-09-09")];
10+
11+
#[test]
12+
fn boundary_toolchain() {
13+
for (before, after) in BOUNDARIES {
14+
for date in [before, after] {
15+
let channel = format!("nightly-{}", date);
16+
17+
let tempdir = tempdir().unwrap();
18+
19+
new_template(tempdir.path()).unwrap();
20+
21+
find_and_replace(
22+
&tempdir.path().join("Cargo.toml"),
23+
&[r#"s/\r?\nclippy_utils = [^\r\n]*//"#],
24+
)
25+
.unwrap();
26+
27+
set_toolchain_channel(tempdir.path(), &channel).unwrap();
28+
29+
dylint_internal::cargo::test(&format!("with channel `{}`", channel), false)
30+
.sanitize_environment()
31+
.current_dir(&tempdir)
32+
.success()
33+
.unwrap();
34+
}
35+
}
36+
}

driver/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,9 @@ fn zero_mir_opt_level(config: &mut rustc_interface::Config) {
136136
config.opts.debugging_opts.mir_opt_level.zero();
137137
}
138138

139+
// Relevant PR and merge commit:
140+
// * https://github.com/rust-lang/rust/pull/98975
141+
// * https://github.com/rust-lang/rust/commit/0ed9c64c3e63acac9bd77abce62501696c390450
139142
#[rustversion::since(2022-07-14)]
140143
fn zero_mir_opt_level(config: &mut rustc_interface::Config) {
141144
config.opts.unstable_opts.mir_opt_level = Some(0);

utils/linting/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ repository = "https://github.com/trailofbits/dylint"
99

1010
[dependencies]
1111
paste = "1.0.9"
12+
rustversion = "1.0.9"

utils/linting/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ rustc_session::declare_lint_pass!(Name => [NAME]);
5959
`impl_late_lint!`, etc. are like `declare_late_lint!`, etc. except:
6060

6161
- each calls [`impl_lint_pass!`] instead of `declare_lint_pass!`;
62-
- each requires an additional argument to specify the default value of the lint's [`LintPass`] structure.
62+
- each requires an additional argument to specify the value of the lint's [`LintPass`] structure.
6363

6464
That is, `impl_late_lint!`'s additional argument is what goes here:
6565

utils/linting/src/lib.rs

Lines changed: 66 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ macro_rules! dylint_library {
2323

2424
#[macro_export]
2525
macro_rules! __declare_and_register_lint {
26-
($(#[$attr:meta])* $vis:vis $NAME:ident, $Level:ident, $desc:expr, $register_pass_method:ident, $default:expr) => {
26+
($(#[$attr:meta])* $vis:vis $NAME:ident, $Level:ident, $desc:expr, $register_pass_method:ident, $pass:expr) => {
2727
$crate::dylint_library!();
2828

2929
extern crate rustc_lint;
@@ -32,17 +32,42 @@ macro_rules! __declare_and_register_lint {
3232
#[no_mangle]
3333
pub fn register_lints(_sess: &rustc_session::Session, lint_store: &mut rustc_lint::LintStore) {
3434
lint_store.register_lints(&[$NAME]);
35-
lint_store.$register_pass_method(|| Box::new($default));
35+
lint_store.$register_pass_method($pass);
3636
}
3737

3838
rustc_session::declare_lint!($(#[$attr])* $vis $NAME, $Level, $desc);
3939
};
4040
}
4141

42+
#[rustversion::before(2022-09-08)]
43+
#[macro_export]
44+
macro_rules! __make_late_closure {
45+
($pass:expr) => {
46+
|| Box::new($pass)
47+
};
48+
}
49+
50+
// Relevant PR and merge commit:
51+
// * https://github.com/rust-lang/rust/pull/101501
52+
// * https://github.com/rust-lang/rust/commit/87788097b776f8e3662f76627944230684b671bd
53+
#[rustversion::since(2022-09-08)]
54+
#[macro_export]
55+
macro_rules! __make_late_closure {
56+
($pass:expr) => {
57+
|_| Box::new($pass)
58+
};
59+
}
60+
4261
#[macro_export]
4362
macro_rules! impl_pre_expansion_lint {
44-
($(#[$attr:meta])* $vis:vis $NAME:ident, $Level:ident, $desc:expr, $default:expr) => {
45-
$crate::__declare_and_register_lint!($(#[$attr])* $vis $NAME, $Level, $desc, register_pre_expansion_pass, $default);
63+
($(#[$attr:meta])* $vis:vis $NAME:ident, $Level:ident, $desc:expr, $pass:expr) => {
64+
$crate::__declare_and_register_lint!(
65+
$(#[$attr])* $vis $NAME,
66+
$Level,
67+
$desc,
68+
register_pre_expansion_pass,
69+
|| Box::new($pass)
70+
);
4671
$crate::paste::paste! {
4772
rustc_session::impl_lint_pass!([< $NAME:camel >] => [$NAME]);
4873
}
@@ -51,8 +76,14 @@ macro_rules! impl_pre_expansion_lint {
5176

5277
#[macro_export]
5378
macro_rules! impl_early_lint {
54-
($(#[$attr:meta])* $vis:vis $NAME:ident, $Level:ident, $desc:expr, $default:expr) => {
55-
$crate::__declare_and_register_lint!($(#[$attr])* $vis $NAME, $Level, $desc, register_early_pass, $default);
79+
($(#[$attr:meta])* $vis:vis $NAME:ident, $Level:ident, $desc:expr, $pass:expr) => {
80+
$crate::__declare_and_register_lint!(
81+
$(#[$attr])* $vis $NAME,
82+
$Level,
83+
$desc,
84+
register_early_pass,
85+
|| Box::new($pass)
86+
);
5687
$crate::paste::paste! {
5788
rustc_session::impl_lint_pass!([< $NAME:camel >] => [$NAME]);
5889
}
@@ -61,8 +92,14 @@ macro_rules! impl_early_lint {
6192

6293
#[macro_export]
6394
macro_rules! impl_late_lint {
64-
($(#[$attr:meta])* $vis:vis $NAME:ident, $Level:ident, $desc:expr, $default:expr) => {
65-
$crate::__declare_and_register_lint!($(#[$attr])* $vis $NAME, $Level, $desc, register_late_pass, $default);
95+
($(#[$attr:meta])* $vis:vis $NAME:ident, $Level:ident, $desc:expr, $pass:expr) => {
96+
$crate::__declare_and_register_lint!(
97+
$(#[$attr])* $vis $NAME,
98+
$Level,
99+
$desc,
100+
register_late_pass,
101+
$crate::__make_late_closure!($pass)
102+
);
66103
$crate::paste::paste! {
67104
rustc_session::impl_lint_pass!([< $NAME:camel >] => [$NAME]);
68105
}
@@ -73,7 +110,13 @@ macro_rules! impl_late_lint {
73110
macro_rules! declare_pre_expansion_lint {
74111
($(#[$attr:meta])* $vis:vis $NAME:ident, $Level:ident, $desc:expr) => {
75112
$crate::paste::paste! {
76-
$crate::__declare_and_register_lint!($(#[$attr])* $vis $NAME, $Level, $desc, register_pre_expansion_pass, [< $NAME:camel >]);
113+
$crate::__declare_and_register_lint!(
114+
$(#[$attr])* $vis $NAME,
115+
$Level,
116+
$desc,
117+
register_pre_expansion_pass,
118+
|| Box::new([< $NAME:camel >])
119+
);
77120
rustc_session::declare_lint_pass!([< $NAME:camel >] => [$NAME]);
78121
}
79122
};
@@ -83,7 +126,13 @@ macro_rules! declare_pre_expansion_lint {
83126
macro_rules! declare_early_lint {
84127
($(#[$attr:meta])* $vis:vis $NAME:ident, $Level:ident, $desc:expr) => {
85128
$crate::paste::paste! {
86-
$crate::__declare_and_register_lint!($(#[$attr])* $vis $NAME, $Level, $desc, register_early_pass, [< $NAME:camel >]);
129+
$crate::__declare_and_register_lint!(
130+
$(#[$attr])* $vis $NAME,
131+
$Level,
132+
$desc,
133+
register_early_pass,
134+
|| Box::new([< $NAME:camel >])
135+
);
87136
rustc_session::declare_lint_pass!([< $NAME:camel >] => [$NAME]);
88137
}
89138
};
@@ -93,7 +142,13 @@ macro_rules! declare_early_lint {
93142
macro_rules! declare_late_lint {
94143
($(#[$attr:meta])* $vis:vis $NAME:ident, $Level:ident, $desc:expr) => {
95144
$crate::paste::paste! {
96-
$crate::__declare_and_register_lint!($(#[$attr])* $vis $NAME, $Level, $desc, register_late_pass, [< $NAME:camel >]);
145+
$crate::__declare_and_register_lint!(
146+
$(#[$attr])* $vis $NAME,
147+
$Level,
148+
$desc,
149+
register_late_pass,
150+
$crate::__make_late_closure!([< $NAME:camel >])
151+
);
97152
rustc_session::declare_lint_pass!([< $NAME:camel >] => [$NAME]);
98153
}
99154
};

0 commit comments

Comments
 (0)