-
-
Notifications
You must be signed in to change notification settings - Fork 78
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
New "module_missing" lint to detect missing, renamed, or non-visible …
…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
1 parent
c6b15df
commit 533cb3a
Showing
8 changed files
with
159 additions
and
12 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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}}"), | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 {} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"), | ||
}, | ||
], | ||
} |