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

Added lint enum_struct_variant_field_now_doc_hidden #687

Merged
merged 10 commits into from
Mar 8, 2024
71 changes: 71 additions & 0 deletions src/lints/enum_struct_variant_field_now_doc_hidden.ron
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
SemverQuery(
id: "enum_struct_variant_field_now_doc_hidden",
human_readable_name: "pub enum struct variant's field is now #[doc(hidden)]",
description: "An enum's struct variant has a field that is now marked #[doc(hidden)] and is thus no longer part of the public API.",
required_update: Major,
reference_link: Some("https://doc.rust-lang.org/rustdoc/write-documentation/the-doc-attribute.html#hidden"),
query: r#"
{
CrateDiff {
baseline {
item {
... on Enum {
visibility_limit @filter(op: "=", value: ["$public"])
enum_name: name @output @tag

importable_path {
path @output @tag
public_api @filter(op: "=", value: ["$true"])
}

variant {
... on StructVariant {
variant_name: name @output @tag
public_api_eligible @filter(op: "=", value: ["$true"])

field {
field_name: name @output @tag
public_api_eligible @filter(op: "=", value: ["$true"])
}
}
}
}
}
}
current {
item {
... on Enum {
visibility_limit @filter(op: "=", value: ["$public"])
name @filter(op: "=", value: ["%enum_name"])

importable_path {
path @filter(op: "=", value: ["%path"])
}

variant {
... on StructVariant {
name @filter(op: "=", value: ["%variant_name"])
public_api_eligible @filter(op: "=", value: ["$true"])

field {
public_api_eligible @filter(op: "!=", value: ["$true"])
name @filter(op: "=", value: ["%field_name"])
span_: span @optional {
filename @output
begin_line @output
}
}
}
}
}
}
}
}
}"#,
arguments: {
"public": "public",
"true": true,
},
error_message: "A field of a pub enum tuple variant is now marked #[doc(hidden)] and is no longer part of the public API.",
obi1kenobi marked this conversation as resolved.
Show resolved Hide resolved
per_result_error_template: Some("field {{enum_name}}.{{field_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 @@ -469,6 +469,7 @@ macro_rules! add_lints {
}

add_lints!(
enum_struct_variant_field_now_doc_hidden,
enum_tuple_variant_field_now_doc_hidden,
trait_method_now_doc_hidden,
auto_trait_impl_removed,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[package]
publish = false
name = "enum_struct_variant_field_now_doc_hidden"
version = "0.1.0"
edition = "2021"

[dependencies]
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// should not be caught since field was already marked #[doc(hidden)]
pub enum PublicEnum {
StructVariant {
#[doc(hidden)]
x: i64,
y: u8,
},
}
//Basic Test case should be caught
pub enum PublicEnumA {
StructVariant {
#[doc(hidden)]
x: i64,
y: u8,
},
}
// Non Public Enum should not be affected on adding #[doc(hidden)]
enum NonPublicEnum {
StructVariant {
#[doc(hidden)]
x: i32,
y: u8,
},
}
//should not be caught since enum was not a part of public API
#[doc(hidden)]
pub enum PublicEnumB {
StructVariant {
#[doc(hidden)]
x: i32,
y: i64,
},
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[package]
publish = false
name = "enum_struct_variant_field_now_doc_hidden"
version = "0.1.0"
edition = "2021"

[dependencies]
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
pub enum PublicEnum {
StructVariant {
#[doc(hidden)]
x: i64,
y: u8,
},
}
pub enum PublicEnumA {
StructVariant { x: i64, y: u8 },
}
enum NonPublicEnum {
StructVariant { x: i32, y: u8 },
}
#[doc(hidden)]
pub enum PublicEnumB {
StructVariant { x: i32, y: i64 },
}
28 changes: 28 additions & 0 deletions test_outputs/enum_struct_variant_field_now_doc_hidden.output.ron
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"./test_crates/enum_now_doc_hidden/": [
{
"enum_name": String("PublicEnumHiddenStructFieldOnVariant"),
"field_name": String("a"),
"path": List([
String("enum_now_doc_hidden"),
String("PublicEnumHiddenStructFieldOnVariant"),
]),
"span_begin_line": Uint64(78),
"span_filename": String("src/lib.rs"),
"variant_name": String("A"),
},
],
"./test_crates/enum_struct_variant_field_now_doc_hidden/": [
{
"enum_name": String("PublicEnumA"),
"field_name": String("x"),
"path": List([
String("enum_struct_variant_field_now_doc_hidden"),
String("PublicEnumA"),
]),
"span_begin_line": Uint64(13),
"span_filename": String("src/lib.rs"),
"variant_name": String("StructVariant"),
},
],
}
Loading