diff --git a/src/lints/enum_tuple_variant_field_marked_deprecated.ron b/src/lints/enum_tuple_variant_field_marked_deprecated.ron index 1ded4585..92981c2e 100644 --- a/src/lints/enum_tuple_variant_field_marked_deprecated.ron +++ b/src/lints/enum_tuple_variant_field_marked_deprecated.ron @@ -31,6 +31,8 @@ SemverQuery( public_api_eligible @filter(op: "=", value: ["$true"]) deprecated @filter(op: "!=", value: ["$true"]) } + + field @fold @transform(op: "count") @output(name: "field_count") } } } @@ -79,4 +81,10 @@ SemverQuery( }, error_message: "A field in an enum's tuple variant is now #[deprecated]. Downstream crates will get a compiler warning when accessing this field.", per_result_error_template: Some("field {{enum_name}}::{{variant_name}}.{{field_name}} in {{span_filename}}:{{span_begin_line}}"), + witness: ( + hint_template: r#"match value { + {{ join "::" path }}::{{ variant_name }} ({{#repeat field_count }}{{#if (eq (to_string @index) ../field_name)}}witness{{else}}_{{/if}}{{#unless @last }}, {{/unless}}{{/repeat}}) => (), + _ => (), +}"#, + ), ) diff --git a/test_outputs/query_execution/enum_tuple_variant_field_marked_deprecated.snap b/test_outputs/query_execution/enum_tuple_variant_field_marked_deprecated.snap index 95b83b28..d47a62e2 100644 --- a/test_outputs/query_execution/enum_tuple_variant_field_marked_deprecated.snap +++ b/test_outputs/query_execution/enum_tuple_variant_field_marked_deprecated.snap @@ -6,6 +6,7 @@ expression: "&query_execution_results" "./test_crates/enum_struct_variant_field_marked_deprecated/": [ { "enum_name": String("NormalEnum"), + "field_count": Uint64(2), "field_name": String("0"), "path": List([ String("enum_struct_variant_field_marked_deprecated"), @@ -20,6 +21,7 @@ expression: "&query_execution_results" "./test_crates/enum_tuple_variant_field_marked_deprecated/": [ { "enum_name": String("TupleVariantEnum"), + "field_count": Uint64(3), "field_name": String("0"), "path": List([ String("enum_tuple_variant_field_marked_deprecated"), @@ -32,6 +34,7 @@ expression: "&query_execution_results" }, { "enum_name": String("TupleVariantEnum"), + "field_count": Uint64(3), "field_name": String("1"), "path": List([ String("enum_tuple_variant_field_marked_deprecated"), @@ -44,6 +47,7 @@ expression: "&query_execution_results" }, { "enum_name": String("TupleVariantEnum"), + "field_count": Uint64(3), "field_name": String("1"), "path": List([ String("enum_tuple_variant_field_marked_deprecated"), @@ -56,6 +60,7 @@ expression: "&query_execution_results" }, { "enum_name": String("EnumWithHiddenVariant"), + "field_count": Uint64(2), "field_name": String("0"), "path": List([ String("enum_tuple_variant_field_marked_deprecated"), diff --git a/test_outputs/witnesses/enum_tuple_variant_field_marked_deprecated.snap b/test_outputs/witnesses/enum_tuple_variant_field_marked_deprecated.snap new file mode 100644 index 00000000..65cd55a2 --- /dev/null +++ b/test_outputs/witnesses/enum_tuple_variant_field_marked_deprecated.snap @@ -0,0 +1,50 @@ +--- +source: src/query.rs +description: "Lint `enum_tuple_variant_field_marked_deprecated` did not have the expected witness output.\nSee https://github.com/obi1kenobi/cargo-semver-checks/blob/main/CONTRIBUTING.md#testing-witnesses\nfor more information." +expression: "&actual_witnesses" +snapshot_kind: text +--- +[["./test_crates/enum_struct_variant_field_marked_deprecated/"]] +filename = 'src/lib.rs' +begin_line = 19 +hint = ''' +match value { + enum_struct_variant_field_marked_deprecated::NormalEnum::TupleVariant (witness, _) => (), + _ => (), +}''' + +[["./test_crates/enum_tuple_variant_field_marked_deprecated/"]] +filename = 'src/lib.rs' +begin_line = 7 +hint = ''' +match value { + enum_tuple_variant_field_marked_deprecated::TupleVariantEnum::TupleVariant (witness, _, _) => (), + _ => (), +}''' + +[["./test_crates/enum_tuple_variant_field_marked_deprecated/"]] +filename = 'src/lib.rs' +begin_line = 8 +hint = ''' +match value { + enum_tuple_variant_field_marked_deprecated::TupleVariantEnum::TupleVariant (_, witness, _) => (), + _ => (), +}''' + +[["./test_crates/enum_tuple_variant_field_marked_deprecated/"]] +filename = 'src/lib.rs' +begin_line = 13 +hint = ''' +match value { + enum_tuple_variant_field_marked_deprecated::TupleVariantEnum::AnotherTuple (_, witness, _) => (), + _ => (), +}''' + +[["./test_crates/enum_tuple_variant_field_marked_deprecated/"]] +filename = 'src/lib.rs' +begin_line = 57 +hint = ''' +match value { + enum_tuple_variant_field_marked_deprecated::EnumWithHiddenVariant::NormalTuple (witness, _) => (), + _ => (), +}'''