diff --git a/src/lints/enum_tuple_variant_field_missing.ron b/src/lints/enum_tuple_variant_field_missing.ron index cf714b65..82ecc687 100644 --- a/src/lints/enum_tuple_variant_field_missing.ron +++ b/src/lints/enum_tuple_variant_field_missing.ron @@ -34,6 +34,8 @@ SemverQuery( end_line @output } } + + field @fold @transform(op: "count") @output(name: "field_count") } } } @@ -72,4 +74,10 @@ SemverQuery( }, error_message: "A field of a tuple variant in a pub enum has been removed.", per_result_error_template: Some("field {{field_name}} of variant {{enum_name}}::{{variant_name}}, previously in file {{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_missing.snap b/test_outputs/query_execution/enum_tuple_variant_field_missing.snap index ce28cb17..25f65c6c 100644 --- a/test_outputs/query_execution/enum_tuple_variant_field_missing.snap +++ b/test_outputs/query_execution/enum_tuple_variant_field_missing.snap @@ -7,6 +7,7 @@ snapshot_kind: text "./test_crates/enum_struct_field_hidden_from_public_api/": [ { "enum_name": String("RemovedHiddenFieldFromVariant"), + "field_count": Uint64(4), "field_name": String("3"), "path": List([ String("enum_struct_field_hidden_from_public_api"), @@ -21,6 +22,7 @@ snapshot_kind: text "./test_crates/enum_tuple_variant_field_missing/": [ { "enum_name": String("PublicEnum"), + "field_count": Uint64(3), "field_name": String("2"), "path": List([ String("enum_tuple_variant_field_missing"), diff --git a/test_outputs/witnesses/enum_tuple_variant_field_missing.snap b/test_outputs/witnesses/enum_tuple_variant_field_missing.snap new file mode 100644 index 00000000..41d97288 --- /dev/null +++ b/test_outputs/witnesses/enum_tuple_variant_field_missing.snap @@ -0,0 +1,23 @@ +--- +source: src/query.rs +assertion_line: 847 +description: "Lint `enum_tuple_variant_field_missing` 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" +--- +[["./test_crates/enum_struct_field_hidden_from_public_api/"]] +filename = 'src/lib.rs' +begin_line = 38 +hint = ''' +match value { + enum_struct_field_hidden_from_public_api::RemovedHiddenFieldFromVariant::VisibleTupleVariantBreaking(_, _, _, witness) => (), + _ => (), +}''' + +[["./test_crates/enum_tuple_variant_field_missing/"]] +filename = 'src/lib.rs' +begin_line = 5 +hint = ''' +match value { + enum_tuple_variant_field_missing::PublicEnum::TupleVariantWithMissingField(_, _, witness) => (), + _ => (), +}'''