Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
And add `boundary_toolchains` test
  • Loading branch information
smoelius committed Oct 2, 2022
1 parent 41e383f commit 06bdab3
Show file tree
Hide file tree
Showing 6 changed files with 108 additions and 12 deletions.
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

36 changes: 36 additions & 0 deletions cargo-dylint/tests/boundary_toolchains.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
use dylint_internal::{
clippy_utils::set_toolchain_channel, find_and_replace, rustup::SanitizeEnvironment,
testing::new_template,
};
use tempfile::tempdir;
use test_log::test;

// smoelius: The channel date is one day later than the `rustc --version` date.
const BOUNDARIES: [(&str, &str); 2] = [("2022-07-14", "2022-07-15"), ("2022-09-08", "2022-09-09")];

#[test]
fn boundary_toolchain() {
for (before, after) in BOUNDARIES {
for date in [before, after] {
let channel = format!("nightly-{}", date);

let tempdir = tempdir().unwrap();

new_template(tempdir.path()).unwrap();

find_and_replace(
&tempdir.path().join("Cargo.toml"),
&[r#"s/\r?\nclippy_utils = [^\r\n]*//"#],
)
.unwrap();

set_toolchain_channel(tempdir.path(), &channel).unwrap();

dylint_internal::cargo::test(&format!("with channel `{}`", channel), false)
.sanitize_environment()
.current_dir(&tempdir)
.success()
.unwrap();
}
}
}
3 changes: 3 additions & 0 deletions driver/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,9 @@ fn zero_mir_opt_level(config: &mut rustc_interface::Config) {
config.opts.debugging_opts.mir_opt_level.zero();
}

// Relevant PR and merge commit:
// * https://github.com/rust-lang/rust/pull/98975
// * https://github.com/rust-lang/rust/commit/0ed9c64c3e63acac9bd77abce62501696c390450
#[rustversion::since(2022-07-14)]
fn zero_mir_opt_level(config: &mut rustc_interface::Config) {
config.opts.unstable_opts.mir_opt_level = Some(0);
Expand Down
1 change: 1 addition & 0 deletions utils/linting/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ repository = "https://github.com/trailofbits/dylint"

[dependencies]
paste = "1.0.9"
rustversion = "1.0.9"
2 changes: 1 addition & 1 deletion utils/linting/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ rustc_session::declare_lint_pass!(Name => [NAME]);
`impl_late_lint!`, etc. are like `declare_late_lint!`, etc. except:

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

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

Expand Down
77 changes: 66 additions & 11 deletions utils/linting/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ macro_rules! dylint_library {

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

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

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

#[rustversion::before(2022-09-08)]
#[macro_export]
macro_rules! __make_late_closure {
($pass:expr) => {
|| Box::new($pass)
};
}

// Relevant PR and merge commit:
// * https://github.com/rust-lang/rust/pull/101501
// * https://github.com/rust-lang/rust/commit/87788097b776f8e3662f76627944230684b671bd
#[rustversion::since(2022-09-08)]
#[macro_export]
macro_rules! __make_late_closure {
($pass:expr) => {
|_| Box::new($pass)
};
}

#[macro_export]
macro_rules! impl_pre_expansion_lint {
($(#[$attr:meta])* $vis:vis $NAME:ident, $Level:ident, $desc:expr, $default:expr) => {
$crate::__declare_and_register_lint!($(#[$attr])* $vis $NAME, $Level, $desc, register_pre_expansion_pass, $default);
($(#[$attr:meta])* $vis:vis $NAME:ident, $Level:ident, $desc:expr, $pass:expr) => {
$crate::__declare_and_register_lint!(
$(#[$attr])* $vis $NAME,
$Level,
$desc,
register_pre_expansion_pass,
|| Box::new($pass)
);
$crate::paste::paste! {
rustc_session::impl_lint_pass!([< $NAME:camel >] => [$NAME]);
}
Expand All @@ -51,8 +76,14 @@ macro_rules! impl_pre_expansion_lint {

#[macro_export]
macro_rules! impl_early_lint {
($(#[$attr:meta])* $vis:vis $NAME:ident, $Level:ident, $desc:expr, $default:expr) => {
$crate::__declare_and_register_lint!($(#[$attr])* $vis $NAME, $Level, $desc, register_early_pass, $default);
($(#[$attr:meta])* $vis:vis $NAME:ident, $Level:ident, $desc:expr, $pass:expr) => {
$crate::__declare_and_register_lint!(
$(#[$attr])* $vis $NAME,
$Level,
$desc,
register_early_pass,
|| Box::new($pass)
);
$crate::paste::paste! {
rustc_session::impl_lint_pass!([< $NAME:camel >] => [$NAME]);
}
Expand All @@ -61,8 +92,14 @@ macro_rules! impl_early_lint {

#[macro_export]
macro_rules! impl_late_lint {
($(#[$attr:meta])* $vis:vis $NAME:ident, $Level:ident, $desc:expr, $default:expr) => {
$crate::__declare_and_register_lint!($(#[$attr])* $vis $NAME, $Level, $desc, register_late_pass, $default);
($(#[$attr:meta])* $vis:vis $NAME:ident, $Level:ident, $desc:expr, $pass:expr) => {
$crate::__declare_and_register_lint!(
$(#[$attr])* $vis $NAME,
$Level,
$desc,
register_late_pass,
$crate::__make_late_closure!($pass)
);
$crate::paste::paste! {
rustc_session::impl_lint_pass!([< $NAME:camel >] => [$NAME]);
}
Expand All @@ -73,7 +110,13 @@ macro_rules! impl_late_lint {
macro_rules! declare_pre_expansion_lint {
($(#[$attr:meta])* $vis:vis $NAME:ident, $Level:ident, $desc:expr) => {
$crate::paste::paste! {
$crate::__declare_and_register_lint!($(#[$attr])* $vis $NAME, $Level, $desc, register_pre_expansion_pass, [< $NAME:camel >]);
$crate::__declare_and_register_lint!(
$(#[$attr])* $vis $NAME,
$Level,
$desc,
register_pre_expansion_pass,
|| Box::new([< $NAME:camel >])
);
rustc_session::declare_lint_pass!([< $NAME:camel >] => [$NAME]);
}
};
Expand All @@ -83,7 +126,13 @@ macro_rules! declare_pre_expansion_lint {
macro_rules! declare_early_lint {
($(#[$attr:meta])* $vis:vis $NAME:ident, $Level:ident, $desc:expr) => {
$crate::paste::paste! {
$crate::__declare_and_register_lint!($(#[$attr])* $vis $NAME, $Level, $desc, register_early_pass, [< $NAME:camel >]);
$crate::__declare_and_register_lint!(
$(#[$attr])* $vis $NAME,
$Level,
$desc,
register_early_pass,
|| Box::new([< $NAME:camel >])
);
rustc_session::declare_lint_pass!([< $NAME:camel >] => [$NAME]);
}
};
Expand All @@ -93,7 +142,13 @@ macro_rules! declare_early_lint {
macro_rules! declare_late_lint {
($(#[$attr:meta])* $vis:vis $NAME:ident, $Level:ident, $desc:expr) => {
$crate::paste::paste! {
$crate::__declare_and_register_lint!($(#[$attr])* $vis $NAME, $Level, $desc, register_late_pass, [< $NAME:camel >]);
$crate::__declare_and_register_lint!(
$(#[$attr])* $vis $NAME,
$Level,
$desc,
register_late_pass,
$crate::__make_late_closure!([< $NAME:camel >])
);
rustc_session::declare_lint_pass!([< $NAME:camel >] => [$NAME]);
}
};
Expand Down

0 comments on commit 06bdab3

Please sign in to comment.