Skip to content

Commit

Permalink
New "module_missing" lint to detect missing, renamed, or non-visible …
Browse files Browse the repository at this point in the history
…modules (#534)

* Update lockfile to latest trustfall-rustdoc-adapter(s)

* Add a new "module_missing" lint

Resolves #482.

* module_missing: Add expected positives for trait_missing*

* fixup! Add a new "module_missing" lint

Tweak error message.

* fixup! Add a new "module_missing" lint

Adjust formatting on test_crates/module_missing

* Update test_crates/module_missing/new/src/lib.rs

---------

Co-authored-by: Predrag Gruevski <[email protected]>
  • Loading branch information
nmathewson and obi1kenobi authored Sep 10, 2023
1 parent c6b15df commit 533cb3a
Show file tree
Hide file tree
Showing 8 changed files with 159 additions and 12 deletions.
24 changes: 12 additions & 12 deletions Cargo.lock

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

46 changes: 46 additions & 0 deletions src/lints/module_missing.ron
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
SemverQuery(
id: "module_missing",
human_readable_name: "pub module removed or renamed",
description: "A module can no longer be imported by its prior path",
required_update: Major,
reference_link: Some("https://doc.rust-lang.org/cargo/reference/semver.html#item-remove"),
query: r#"
{
CrateDiff {
baseline {
item {
... on Module {
visibility_limit @filter(op: "=", value: ["$public"]) @output
name @output
importable_path {
path @output @tag
}
span_: span @optional {
filename @output
begin_line @output
}
}
}
}
current @fold @transform(op: "count") @filter(op: "=", value: ["$zero"]) {
item {
... on Module {
visibility_limit @filter(op: "=", value: ["$public"])
importable_path {
path @filter(op: "=", value: ["%path"])
}
}
}
}
}
}"#,
arguments: {
"public": "public",
"zero": 0,
},
error_message: "A publicly-visible module cannot be imported by its prior path. A `pub use` may have been removed, or the module may have been renamed, removed, or made non-public.",
per_result_error_template: Some("{mod {{join \"::\" path}}, previously in file {{span_filename}}:{{span_begin_line}}"),
)
1 change: 1 addition & 0 deletions src/query.rs
Original file line number Diff line number Diff line change
Expand Up @@ -514,4 +514,5 @@ add_lints!(
pub_module_level_const_missing,
pub_static_missing,
trait_removed_associated_type,
module_missing,
);
7 changes: 7 additions & 0 deletions test_crates/module_missing/new/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[package]
publish = false
name = "module_missing"
version = "0.1.0"
edition = "2021"

[dependencies]
24 changes: 24 additions & 0 deletions test_crates/module_missing/new/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// Removing this, but no warning should happen:
// it isn't public.
//
// mod a {}

mod b {
// Removing this, but no warning should happen:
// it isn't visible.
// pub mod b {}
}

pub mod bb {
// Removing this should cause a warning.
//
// pub mod will_remove {}
}

// Making this private should cause a warning
pub(crate) mod will_make_private {
mod e {}
}

// Adding a module shouldn't cause problems.
pub mod new_module {}
7 changes: 7 additions & 0 deletions test_crates/module_missing/old/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[package]
publish = false
name = "module_missing"
version = "0.1.0"
edition = "2021"

[dependencies]
13 changes: 13 additions & 0 deletions test_crates/module_missing/old/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
mod a {}

mod b {
pub mod b {}
}

pub mod bb {
pub mod will_remove {}
}

pub mod will_make_private {
mod e {}
}
49 changes: 49 additions & 0 deletions test_outputs/module_missing.output.ron
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
{
"./test_crates/module_missing/": [
{
"name": String("will_remove"),
"path": List([
String("module_missing"),
String("bb"),
String("will_remove"),
]),
"span_begin_line": Uint64(8),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},
{
"name": String("will_make_private"),
"path": List([
String("module_missing"),
String("will_make_private"),
]),
"span_begin_line": Uint64(11),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},
],
"./test_crates/trait_missing/": [
{
"name": String("my_pub_mod"),
"path": List([
String("trait_missing"),
String("my_pub_mod"),
]),
"span_begin_line": Uint64(5),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},
],
"./test_crates/trait_missing_with_major_bump/": [
{
"name": String("my_pub_mod"),
"path": List([
String("trait_missing_with_major_bump"),
String("my_pub_mod"),
]),
"span_begin_line": Uint64(5),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},
],
}

0 comments on commit 533cb3a

Please sign in to comment.