Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add lint for missing pub module-level const #491

Merged
merged 15 commits into from
Jul 14, 2023
Merged
39 changes: 39 additions & 0 deletions src/lints/pub_module_level_const_missing.ron
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
SemverQuery(
id: "pub_module_level_const_missing",
human_readable_name: "pub module-level const is missing",
description: "TODO",
required_update: Major, // TODO
reference_link: Some("https://doc.rust-lang.org/reference/TBD"),
query: r#"
{
CrateDiff {
baseline {
item {
... on Constant {
visibility_limit @filter(op: "=", value: ["$public"]) @output
name @output @tag

span_: span @optional {
filename @output
begin_line @output
}
}
}
}
current {
item @fold @transform(op: "count") @filter(op: "=", value: ["$zero"]) {
... on Constant {
visibility_limit @filter(op: "=", value: ["$public"])
name @filter(op: "=", value: ["%name"])
}
}
}
}
}"#,
arguments: {
"public": "public",
"zero": 0,
},
error_message: "A publicly-visible const in a module is missing or renamed. It may have changed from const to static.",
per_result_error_template: Some("{{name}} 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 @@ -505,4 +505,5 @@ add_lints!(
enum_tuple_variant_field_missing,
enum_tuple_variant_field_added,
trait_removed_supertrait,
pub_module_level_const_missing,
);
7 changes: 7 additions & 0 deletions test_crates/pub_module_level_const_missing/new/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[package]
publish = false
name = "pub_module_level_const_missing"
version = "0.1.0"
edition = "2021"

[dependencies]
32 changes: 32 additions & 0 deletions test_crates/pub_module_level_const_missing/new/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
pub const PUB_CONST_IN_GLOBAL: i32 = 0;
pub const PUB_CONST_IN_GLOBAL_IS_RENAMED: i32 = 0;
pub static PUB_CONST_IN_GLOBAL_WILL_BE_STATIC: i32 = 0;
const PUB_CONST_IN_GLOBAL_WILL_BE_PRIVATE_CONST: i32 = 0;
static PUB_CONST_IN_GLOBAL_WILL_BE_PRIVATE_STATIC: i32 = 0;

mod re_exporter {
pub const SPECIAL_CONST: i32 = 0;
pub static SPECIAL_STATIC: i32 = 0;
}

pub mod my_module {
pub const PUB_CONST_IN_MODULE: i32 = 0;
pub const PUB_CONST_IN_MODULE_IS_RENAMED: i32 = 0;
pub static PUB_CONST_IN_MODULE_WILL_BE_STATIC: i32 = 0;
const PUB_CONST_IN_MODULE_WILL_BE_PRIVATE_CONST: i32 = 0;
static PUB_CONST_IN_MODULE_WILL_BE_PRIVATE_STATIC: i32 = 0;

pub use crate::re_exporter::SPECIAL_CONST as PUB_CONST_IN_MODULE_WILL_RE_EXPORT;
pub use crate::re_exporter::SPECIAL_STATIC as PUB_CONST_IN_MODULE_WILL_RE_EXPORT_STATIC;

pub mod my_module_nested {
pub const PUB_CONST_IN_NESTED_MODULE: i32 = 0;
static PUB_CONST_IN_NESTED_MODULE_WILL_REMOVE_CONST: i32 = 0;
pub const PUB_CONST_IN_NESTED_MODULE_IS_RENAMED: i32 = 0;
pub static PUB_CONST_IN_NESTED_MODULE_WILL_BE_STATIC: i32 = 0;
const PUB_CONST_IN_NESTED_MODULE_WILL_BE_PRIVATE: i32 = 0;

pub use crate::re_exporter::SPECIAL_CONST as PUB_CONST_IN_NESTED_MODULE_WILL_RE_EXPORT;
pub use crate::re_exporter::SPECIAL_STATIC as PUB_CONST_IN_NESTED_MODULE_WILL_RE_EXPORT_STATIC;
}
}
7 changes: 7 additions & 0 deletions test_crates/pub_module_level_const_missing/old/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[package]
publish = false
name = "pub_module_level_const_missing"
version = "0.1.0"
edition = "2021"

[dependencies]
28 changes: 28 additions & 0 deletions test_crates/pub_module_level_const_missing/old/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
pub const PUB_CONST_IN_GLOBAL: i32 = 0;
pub const PUB_CONST_IN_GLOBAL_WILL_REMOVE: i32 = 0;
pub const PUB_CONST_IN_GLOBAL_WILL_RENAME: i32 = 0;
pub const PUB_CONST_IN_GLOBAL_WILL_BE_STATIC: i32 = 0;
pub const PUB_CONST_IN_GLOBAL_WILL_BE_PRIVATE_CONST: i32 = 0;
pub const PUB_CONST_IN_GLOBAL_WILL_BE_PRIVATE_STATIC: i32 = 0;

pub mod my_module {
pub const PUB_CONST_IN_MODULE: i32 = 0;
pub const PUB_CONST_IN_MODULE_WILL_REMOVE: i32 = 0;
pub const PUB_CONST_IN_MODULE_WILL_RENAME: i32 = 0;
pub const PUB_CONST_IN_MODULE_WILL_BE_STATIC: i32 = 0;
pub const PUB_CONST_IN_MODULE_WILL_BE_PRIVATE_CONST: i32 = 0;
pub const PUB_CONST_IN_MODULE_WILL_BE_PRIVATE_STATIC: i32 = 0;
pub const PUB_CONST_IN_MODULE_WILL_RE_EXPORT: i32 = 0;
pub const PUB_CONST_IN_MODULE_WILL_RE_EXPORT_STATIC: i32 = 0;

pub mod my_module_nested {
pub const PUB_CONST_IN_NESTED_MODULE: i32 = 0;
pub const PUB_CONST_IN_NESTED_MODULE_WILL_REMOVE: i32 = 0;
pub const PUB_CONST_IN_NESTED_MODULE_WILL_RENAME: i32 = 0;
pub const PUB_CONST_IN_NESTED_MODULE_WILL_BE_STATIC: i32 = 0;
pub const PUB_CONST_IN_NESTED_MODULE_WILL_BE_PRIVATE_CONST: i32 = 0;
pub const PUB_CONST_IN_NESTED_MODULE_WILL_BE_PRIVATE_STATIC: i32 = 0;
pub const PUB_CONST_IN_NESTED_MODULE_WILL_RE_EXPORT: i32 = 0;
pub const PUB_CONST_IN_NESTED_MODULE_WILL_RE_EXPORT_STATIC: i32 = 0;
}
}
122 changes: 122 additions & 0 deletions test_outputs/pub_module_level_const_missing.output.ron
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
{
"./test_crates/pub_module_level_const_missing/": [
{
"name": String("PUB_CONST_IN_GLOBAL_WILL_REMOVE"),
"span_begin_line": Uint64(2),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},
{
"name": String("PUB_CONST_IN_GLOBAL_WILL_RENAME"),
"span_begin_line": Uint64(3),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},
{
"name": String("PUB_CONST_IN_GLOBAL_WILL_BE_STATIC"),
"span_begin_line": Uint64(4),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},
{
"name": String("PUB_CONST_IN_GLOBAL_WILL_BE_PRIVATE_CONST"),
"span_begin_line": Uint64(5),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},
{
"name": String("PUB_CONST_IN_GLOBAL_WILL_BE_PRIVATE_STATIC"),
"span_begin_line": Uint64(6),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},
{
"name": String("PUB_CONST_IN_MODULE_WILL_REMOVE"),
"span_begin_line": Uint64(10),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},
{
"name": String("PUB_CONST_IN_MODULE_WILL_RENAME"),
"span_begin_line": Uint64(11),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},
{
"name": String("PUB_CONST_IN_MODULE_WILL_BE_STATIC"),
"span_begin_line": Uint64(12),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},
{
"name": String("PUB_CONST_IN_MODULE_WILL_BE_PRIVATE_CONST"),
"span_begin_line": Uint64(13),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},
{
"name": String("PUB_CONST_IN_MODULE_WILL_BE_PRIVATE_STATIC"),
"span_begin_line": Uint64(14),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},
/*
// Commenting out this for now; see PR491 for details
{
"name": String("PUB_CONST_IN_MODULE_WILL_RE_EXPORT"),
"span_begin_line": Uint64(15),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},*/
{
"name": String("PUB_CONST_IN_MODULE_WILL_RE_EXPORT_STATIC"),
"span_begin_line": Uint64(16),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},
{
"name": String("PUB_CONST_IN_NESTED_MODULE_WILL_REMOVE"),
"span_begin_line": Uint64(20),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},
{
"name": String("PUB_CONST_IN_NESTED_MODULE_WILL_RENAME"),
"span_begin_line": Uint64(21),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},
{
"name": String("PUB_CONST_IN_NESTED_MODULE_WILL_BE_STATIC"),
"span_begin_line": Uint64(22),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},
{
"name": String("PUB_CONST_IN_NESTED_MODULE_WILL_BE_PRIVATE_CONST"),
"span_begin_line": Uint64(23),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},
{
"name": String("PUB_CONST_IN_NESTED_MODULE_WILL_BE_PRIVATE_STATIC"),
"span_begin_line": Uint64(24),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},
/*
// Commenting out this for now; see PR491 for details
{
"name": String("PUB_CONST_IN_NESTED_MODULE_WILL_RE_EXPORT"),
"span_begin_line": Uint64(25),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},*/
{
"name": String("PUB_CONST_IN_NESTED_MODULE_WILL_RE_EXPORT_STATIC"),
"span_begin_line": Uint64(26),
"span_filename": String("src/lib.rs"),
"visibility_limit": String("public"),
},
],
}