From f753b85e8979534524468359f6c1a1dd577436c6 Mon Sep 17 00:00:00 2001 From: Patrick Dewey <57921252+ptdewey@users.noreply.github.com> Date: Fri, 21 Nov 2025 17:34:42 -0500 Subject: [PATCH] refactor: code cleanup --- ...> test_combined_ignore_and_scrub.snap.new} | 3 +- ...p => test_complex_json_structure.snap.new} | 3 +- ...=> test_complex_nested_structure.snap.new} | 3 +- ... test_complex_real_world_example.snap.new} | 3 +- ...ap => test_credit_card_scrubbing.snap.new} | 3 +- ...gnore.snap => test_custom_ignore.snap.new} | 3 +- ...ber.snap => test_custom_scrubber.snap.new} | 3 +- ....snap => test_deeply_nested_json.snap.new} | 3 +- ...nap => test_exact_match_scrubber.snap.new} | 3 +- ...est_go_struct_marshalled_to_json.snap.new} | 3 +- ...snap => test_ignore_empty_values.snap.new} | 3 +- ...ys.snap => test_ignore_in_arrays.snap.new} | 3 +- ....snap => test_ignore_key_pattern.snap.new} | 3 +- ...ue.snap => test_ignore_key_value.snap.new} | 3 +- ...re_keys.snap => test_ignore_keys.snap.new} | 3 +- ...nap => test_ignore_keys_matching.snap.new} | 3 +- ....snap => test_ignore_null_values.snap.new} | 3 +- ...ap => test_ignore_sensitive_keys.snap.new} | 3 +- ...alues.snap => test_ignore_values.snap.new} | 3 +- ...ap => test_json_array_of_objects.snap.new} | 3 +- ...umbers.snap => test_json_numbers.snap.new} | 3 +- ..._object.snap => test_json_object.snap.new} | 3 +- ...p => test_json_with_mixed_arrays.snap.new} | 3 +- ...est_json_with_special_characters.snap.new} | 3 +- ... => test_json_with_various_types.snap.new} | 3 +- ...rge_json.snap => test_large_json.snap.new} | 3 +- .../{test_map.snap => test_map.snap.new} | 3 +- ...test_multiple_complex_structures.snap.new} | 3 +- ....snap => test_multiple_scrubbers.snap.new} | 3 +- ...p => test_nested_ignore_patterns.snap.new} | 3 +- ...p => test_nested_maps_and_slices.snap.new} | 3 +- ...bber.snap => test_regex_scrubber.snap.new} | 3 +- ...ys.snap => test_scrub_a_p_i_keys.snap.new} | 3 +- ...b_dates.snap => test_scrub_dates.snap.new} | 3 +- ...emails.snap => test_scrub_emails.snap.new} | 3 +- ...snap => test_scrub_i_p_addresses.snap.new} | 3 +- ...j_w_ts.snap => test_scrub_j_w_ts.snap.new} | 3 +- ...ps.snap => test_scrub_timestamps.snap.new} | 3 +- ...i_ds.snap => test_scrub_u_u_i_ds.snap.new} | 3 +- ...=> test_scrub_with_snap_function.snap.new} | 3 +- ...pe.snap => test_snap_custom_type.snap.new} | 3 +- ... test_snap_json_array_of_objects.snap.new} | 3 +- ...sic.snap => test_snap_json_basic.snap.new} | 3 +- ...=> test_snap_json_compact_format.snap.new} | 3 +- ... => test_snap_json_complex_a_p_i.snap.new} | 3 +- ... test_snap_json_empty_structures.snap.new} | 3 +- ...snap_json_large_nested_structure.snap.new} | 3 +- ...ap => test_snap_json_mixed_types.snap.new} | 3 +- ...est_snap_json_real_world_example.snap.new} | 3 +- ...p => test_snap_json_simple_array.snap.new} | 3 +- ...st_snap_json_with_nested_objects.snap.new} | 3 +- ...nap => test_snap_json_with_nulls.snap.new} | 3 +- ...p => test_snap_json_with_numbers.snap.new} | 3 +- ...nap_json_with_special_characters.snap.new} | 3 +- ...tiple.snap => test_snap_multiple.snap.new} | 3 +- ..._string.snap => test_snap_string.snap.new} | 3 +- ...test_structure_with_empty_values.snap.new} | 3 +- ...=> test_structure_with_interface.snap.new} | 3 +- ... => test_structure_with_pointers.snap.new} | 3 +- ...=> test_unix_timestamp_scrubbing.snap.new} | 3 +- freeze.go | 32 +++++- freeze_test.go | 82 +++++++------- ignore.go | 15 +-- internal/files/__snapshots__/test_accept.snap | 3 +- internal/files/files.go | 25 ++--- internal/files/files_test.go | 40 ++----- internal/pretty/boxes.go | 103 +++++++++--------- internal/transform/transform.go | 22 ++-- scrubbers.go | 14 +-- scrubbers_test.go | 2 +- 70 files changed, 228 insertions(+), 290 deletions(-) rename __snapshots__/{test_combined_ignore_and_scrub.snap => test_combined_ignore_and_scrub.snap.new} (89%) rename __snapshots__/{test_complex_json_structure.snap => test_complex_json_structure.snap.new} (98%) rename __snapshots__/{test_complex_nested_structure.snap => test_complex_nested_structure.snap.new} (98%) rename __snapshots__/{test_complex_real_world_example.snap => test_complex_real_world_example.snap.new} (95%) rename __snapshots__/{test_credit_card_scrubbing.snap => test_credit_card_scrubbing.snap.new} (88%) rename __snapshots__/{test_custom_ignore.snap => test_custom_ignore.snap.new} (82%) rename __snapshots__/{test_custom_scrubber.snap => test_custom_scrubber.snap.new} (78%) rename __snapshots__/{test_deeply_nested_json.snap => test_deeply_nested_json.snap.new} (90%) rename __snapshots__/{test_exact_match_scrubber.snap => test_exact_match_scrubber.snap.new} (83%) rename __snapshots__/{test_go_struct_marshalled_to_json.snap => test_go_struct_marshalled_to_json.snap.new} (94%) rename __snapshots__/{test_ignore_empty_values.snap => test_ignore_empty_values.snap.new} (84%) rename __snapshots__/{test_ignore_in_arrays.snap => test_ignore_in_arrays.snap.new} (91%) rename __snapshots__/{test_ignore_key_pattern.snap => test_ignore_key_pattern.snap.new} (84%) rename __snapshots__/{test_ignore_key_value.snap => test_ignore_key_value.snap.new} (84%) rename __snapshots__/{test_ignore_keys.snap => test_ignore_keys.snap.new} (84%) rename __snapshots__/{test_ignore_keys_matching.snap => test_ignore_keys_matching.snap.new} (84%) rename __snapshots__/{test_ignore_null_values.snap => test_ignore_null_values.snap.new} (85%) rename __snapshots__/{test_ignore_sensitive_keys.snap => test_ignore_sensitive_keys.snap.new} (86%) rename __snapshots__/{test_ignore_values.snap => test_ignore_values.snap.new} (80%) rename __snapshots__/{test_json_array_of_objects.snap => test_json_array_of_objects.snap.new} (95%) rename __snapshots__/{test_json_numbers.snap => test_json_numbers.snap.new} (94%) rename __snapshots__/{test_json_object.snap => test_json_object.snap.new} (94%) rename __snapshots__/{test_json_with_mixed_arrays.snap => test_json_with_mixed_arrays.snap.new} (96%) rename __snapshots__/{test_json_with_special_characters.snap => test_json_with_special_characters.snap.new} (94%) rename __snapshots__/{test_json_with_various_types.snap => test_json_with_various_types.snap.new} (95%) rename __snapshots__/{test_large_json.snap => test_large_json.snap.new} (97%) rename __snapshots__/{test_map.snap => test_map.snap.new} (82%) rename __snapshots__/{test_multiple_complex_structures.snap => test_multiple_complex_structures.snap.new} (97%) rename __snapshots__/{test_multiple_scrubbers.snap => test_multiple_scrubbers.snap.new} (87%) rename __snapshots__/{test_nested_ignore_patterns.snap => test_nested_ignore_patterns.snap.new} (91%) rename __snapshots__/{test_nested_maps_and_slices.snap => test_nested_maps_and_slices.snap.new} (96%) rename __snapshots__/{test_regex_scrubber.snap => test_regex_scrubber.snap.new} (84%) rename __snapshots__/{test_scrub_a_p_i_keys.snap => test_scrub_a_p_i_keys.snap.new} (86%) rename __snapshots__/{test_scrub_dates.snap => test_scrub_dates.snap.new} (85%) rename __snapshots__/{test_scrub_emails.snap => test_scrub_emails.snap.new} (83%) rename __snapshots__/{test_scrub_i_p_addresses.snap => test_scrub_i_p_addresses.snap.new} (84%) rename __snapshots__/{test_scrub_j_w_ts.snap => test_scrub_j_w_ts.snap.new} (80%) rename __snapshots__/{test_scrub_timestamps.snap => test_scrub_timestamps.snap.new} (87%) rename __snapshots__/{test_scrub_u_u_i_ds.snap => test_scrub_u_u_i_ds.snap.new} (83%) rename __snapshots__/{test_scrub_with_snap_function.snap => test_scrub_with_snap_function.snap.new} (87%) rename __snapshots__/{test_snap_custom_type.snap => test_snap_custom_type.snap.new} (83%) rename __snapshots__/{test_snap_json_array_of_objects.snap => test_snap_json_array_of_objects.snap.new} (93%) rename __snapshots__/{test_snap_json_basic.snap => test_snap_json_basic.snap.new} (86%) rename __snapshots__/{test_snap_json_compact_format.snap => test_snap_json_compact_format.snap.new} (87%) rename __snapshots__/{test_snap_json_complex_a_p_i.snap => test_snap_json_complex_a_p_i.snap.new} (96%) rename __snapshots__/{test_snap_json_empty_structures.snap => test_snap_json_empty_structures.snap.new} (91%) rename __snapshots__/{test_snap_json_large_nested_structure.snap => test_snap_json_large_nested_structure.snap.new} (98%) rename __snapshots__/{test_snap_json_mixed_types.snap => test_snap_json_mixed_types.snap.new} (92%) rename __snapshots__/{test_snap_json_real_world_example.snap => test_snap_json_real_world_example.snap.new} (98%) rename __snapshots__/{test_snap_json_simple_array.snap => test_snap_json_simple_array.snap.new} (83%) rename __snapshots__/{test_snap_json_with_nested_objects.snap => test_snap_json_with_nested_objects.snap.new} (94%) rename __snapshots__/{test_snap_json_with_nulls.snap => test_snap_json_with_nulls.snap.new} (90%) rename __snapshots__/{test_snap_json_with_numbers.snap => test_snap_json_with_numbers.snap.new} (93%) rename __snapshots__/{test_snap_json_with_special_characters.snap => test_snap_json_with_special_characters.snap.new} (94%) rename __snapshots__/{test_snap_multiple.snap => test_snap_multiple.snap.new} (86%) rename __snapshots__/{test_snap_string.snap => test_snap_string.snap.new} (76%) rename __snapshots__/{test_structure_with_empty_values.snap => test_structure_with_empty_values.snap.new} (95%) rename __snapshots__/{test_structure_with_interface.snap => test_structure_with_interface.snap.new} (98%) rename __snapshots__/{test_structure_with_pointers.snap => test_structure_with_pointers.snap.new} (95%) rename __snapshots__/{test_unix_timestamp_scrubbing.snap => test_unix_timestamp_scrubbing.snap.new} (86%) diff --git a/__snapshots__/test_combined_ignore_and_scrub.snap b/__snapshots__/test_combined_ignore_and_scrub.snap.new similarity index 89% rename from __snapshots__/test_combined_ignore_and_scrub.snap rename to __snapshots__/test_combined_ignore_and_scrub.snap.new index b1771a6..0c69f41 100644 --- a/__snapshots__/test_combined_ignore_and_scrub.snap +++ b/__snapshots__/test_combined_ignore_and_scrub.snap.new @@ -1,8 +1,7 @@ --- title: Combined Ignore and Scrub test_name: TestCombinedIgnoreAndScrub -file_path: -func_name: +file_name: ignore_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_complex_json_structure.snap b/__snapshots__/test_complex_json_structure.snap.new similarity index 98% rename from __snapshots__/test_complex_json_structure.snap rename to __snapshots__/test_complex_json_structure.snap.new index 23d79e8..381c0be 100644 --- a/__snapshots__/test_complex_json_structure.snap +++ b/__snapshots__/test_complex_json_structure.snap.new @@ -1,8 +1,7 @@ --- title: Complex JSON Structure test_name: TestComplexJsonStructure -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- map[string]interface{}{ diff --git a/__snapshots__/test_complex_nested_structure.snap b/__snapshots__/test_complex_nested_structure.snap.new similarity index 98% rename from __snapshots__/test_complex_nested_structure.snap rename to __snapshots__/test_complex_nested_structure.snap.new index 989bf92..f4a1406 100644 --- a/__snapshots__/test_complex_nested_structure.snap +++ b/__snapshots__/test_complex_nested_structure.snap.new @@ -1,8 +1,7 @@ --- title: Complex Nested Structure test_name: TestComplexNestedStructure -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- freeze_test.Post{ diff --git a/__snapshots__/test_complex_real_world_example.snap b/__snapshots__/test_complex_real_world_example.snap.new similarity index 95% rename from __snapshots__/test_complex_real_world_example.snap rename to __snapshots__/test_complex_real_world_example.snap.new index 88280e7..b0a9a86 100644 --- a/__snapshots__/test_complex_real_world_example.snap +++ b/__snapshots__/test_complex_real_world_example.snap.new @@ -1,8 +1,7 @@ --- title: Real World API Response test_name: TestComplexRealWorldExample -file_path: -func_name: +file_name: ignore_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_credit_card_scrubbing.snap b/__snapshots__/test_credit_card_scrubbing.snap.new similarity index 88% rename from __snapshots__/test_credit_card_scrubbing.snap rename to __snapshots__/test_credit_card_scrubbing.snap.new index c2cb2c5..430cb49 100644 --- a/__snapshots__/test_credit_card_scrubbing.snap +++ b/__snapshots__/test_credit_card_scrubbing.snap.new @@ -1,8 +1,7 @@ --- title: Scrubbed Credit Cards test_name: TestCreditCardScrubbing -file_path: -func_name: +file_name: scrubbers_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_custom_ignore.snap b/__snapshots__/test_custom_ignore.snap.new similarity index 82% rename from __snapshots__/test_custom_ignore.snap rename to __snapshots__/test_custom_ignore.snap.new index f305abd..6b58384 100644 --- a/__snapshots__/test_custom_ignore.snap +++ b/__snapshots__/test_custom_ignore.snap.new @@ -1,8 +1,7 @@ --- title: Custom Ignore Function test_name: TestCustomIgnore -file_path: -func_name: +file_name: ignore_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_custom_scrubber.snap b/__snapshots__/test_custom_scrubber.snap.new similarity index 78% rename from __snapshots__/test_custom_scrubber.snap rename to __snapshots__/test_custom_scrubber.snap.new index 98345ab..a781505 100644 --- a/__snapshots__/test_custom_scrubber.snap +++ b/__snapshots__/test_custom_scrubber.snap.new @@ -1,8 +1,7 @@ --- title: Custom Scrubber test_name: TestCustomScrubber -file_path: -func_name: +file_name: scrubbers_test.go version: 0.1.0 --- hello world! this is a test. \ No newline at end of file diff --git a/__snapshots__/test_deeply_nested_json.snap b/__snapshots__/test_deeply_nested_json.snap.new similarity index 90% rename from __snapshots__/test_deeply_nested_json.snap rename to __snapshots__/test_deeply_nested_json.snap.new index 646acb0..4471415 100644 --- a/__snapshots__/test_deeply_nested_json.snap +++ b/__snapshots__/test_deeply_nested_json.snap.new @@ -1,8 +1,7 @@ --- title: Deeply Nested JSON test_name: TestDeeplyNestedJson -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- map[string]interface{}{ diff --git a/__snapshots__/test_exact_match_scrubber.snap b/__snapshots__/test_exact_match_scrubber.snap.new similarity index 83% rename from __snapshots__/test_exact_match_scrubber.snap rename to __snapshots__/test_exact_match_scrubber.snap.new index 1e186ff..b205731 100644 --- a/__snapshots__/test_exact_match_scrubber.snap +++ b/__snapshots__/test_exact_match_scrubber.snap.new @@ -1,8 +1,7 @@ --- title: Exact Match Scrubber test_name: TestExactMatchScrubber -file_path: -func_name: +file_name: scrubbers_test.go version: 0.1.0 --- The secret password is '' and should be hidden. \ No newline at end of file diff --git a/__snapshots__/test_go_struct_marshalled_to_json.snap b/__snapshots__/test_go_struct_marshalled_to_json.snap.new similarity index 94% rename from __snapshots__/test_go_struct_marshalled_to_json.snap rename to __snapshots__/test_go_struct_marshalled_to_json.snap.new index 525d3f8..579c800 100644 --- a/__snapshots__/test_go_struct_marshalled_to_json.snap +++ b/__snapshots__/test_go_struct_marshalled_to_json.snap.new @@ -1,8 +1,7 @@ --- title: Go Struct Marshalled to JSON test_name: TestGoStructMarshalledToJson -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- map[string]interface{}{ diff --git a/__snapshots__/test_ignore_empty_values.snap b/__snapshots__/test_ignore_empty_values.snap.new similarity index 84% rename from __snapshots__/test_ignore_empty_values.snap rename to __snapshots__/test_ignore_empty_values.snap.new index 41590fa..ea1a9c9 100644 --- a/__snapshots__/test_ignore_empty_values.snap +++ b/__snapshots__/test_ignore_empty_values.snap.new @@ -1,8 +1,7 @@ --- title: Ignore Empty Values test_name: TestIgnoreEmptyValues -file_path: -func_name: +file_name: ignore_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_ignore_in_arrays.snap b/__snapshots__/test_ignore_in_arrays.snap.new similarity index 91% rename from __snapshots__/test_ignore_in_arrays.snap rename to __snapshots__/test_ignore_in_arrays.snap.new index 4789c41..d9e0d49 100644 --- a/__snapshots__/test_ignore_in_arrays.snap +++ b/__snapshots__/test_ignore_in_arrays.snap.new @@ -1,8 +1,7 @@ --- title: Ignore in Arrays test_name: TestIgnoreInArrays -file_path: -func_name: +file_name: ignore_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_ignore_key_pattern.snap b/__snapshots__/test_ignore_key_pattern.snap.new similarity index 84% rename from __snapshots__/test_ignore_key_pattern.snap rename to __snapshots__/test_ignore_key_pattern.snap.new index 8f5a2f1..029fac8 100644 --- a/__snapshots__/test_ignore_key_pattern.snap +++ b/__snapshots__/test_ignore_key_pattern.snap.new @@ -1,8 +1,7 @@ --- title: Ignore Key Pattern test_name: TestIgnoreKeyPattern -file_path: -func_name: +file_name: ignore_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_ignore_key_value.snap b/__snapshots__/test_ignore_key_value.snap.new similarity index 84% rename from __snapshots__/test_ignore_key_value.snap rename to __snapshots__/test_ignore_key_value.snap.new index e5b48f6..46f21b6 100644 --- a/__snapshots__/test_ignore_key_value.snap +++ b/__snapshots__/test_ignore_key_value.snap.new @@ -1,8 +1,7 @@ --- title: Ignore Password Field test_name: TestIgnoreKeyValue -file_path: -func_name: +file_name: ignore_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_ignore_keys.snap b/__snapshots__/test_ignore_keys.snap.new similarity index 84% rename from __snapshots__/test_ignore_keys.snap rename to __snapshots__/test_ignore_keys.snap.new index 3908f74..8f0d2d2 100644 --- a/__snapshots__/test_ignore_keys.snap +++ b/__snapshots__/test_ignore_keys.snap.new @@ -1,8 +1,7 @@ --- title: Ignore Multiple Keys test_name: TestIgnoreKeys -file_path: -func_name: +file_name: ignore_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_ignore_keys_matching.snap b/__snapshots__/test_ignore_keys_matching.snap.new similarity index 84% rename from __snapshots__/test_ignore_keys_matching.snap rename to __snapshots__/test_ignore_keys_matching.snap.new index ad6461e..2119770 100644 --- a/__snapshots__/test_ignore_keys_matching.snap +++ b/__snapshots__/test_ignore_keys_matching.snap.new @@ -1,8 +1,7 @@ --- title: Ignore Keys Matching Pattern test_name: TestIgnoreKeysMatching -file_path: -func_name: +file_name: ignore_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_ignore_null_values.snap b/__snapshots__/test_ignore_null_values.snap.new similarity index 85% rename from __snapshots__/test_ignore_null_values.snap rename to __snapshots__/test_ignore_null_values.snap.new index 15cac04..c2052dc 100644 --- a/__snapshots__/test_ignore_null_values.snap +++ b/__snapshots__/test_ignore_null_values.snap.new @@ -1,8 +1,7 @@ --- title: Ignore Null Values test_name: TestIgnoreNullValues -file_path: -func_name: +file_name: ignore_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_ignore_sensitive_keys.snap b/__snapshots__/test_ignore_sensitive_keys.snap.new similarity index 86% rename from __snapshots__/test_ignore_sensitive_keys.snap rename to __snapshots__/test_ignore_sensitive_keys.snap.new index ee6d264..e8d1e3e 100644 --- a/__snapshots__/test_ignore_sensitive_keys.snap +++ b/__snapshots__/test_ignore_sensitive_keys.snap.new @@ -1,8 +1,7 @@ --- title: Ignore Sensitive Keys test_name: TestIgnoreSensitiveKeys -file_path: -func_name: +file_name: ignore_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_ignore_values.snap b/__snapshots__/test_ignore_values.snap.new similarity index 80% rename from __snapshots__/test_ignore_values.snap rename to __snapshots__/test_ignore_values.snap.new index 63c16fe..2b23741 100644 --- a/__snapshots__/test_ignore_values.snap +++ b/__snapshots__/test_ignore_values.snap.new @@ -1,8 +1,7 @@ --- title: Ignore Specific Values test_name: TestIgnoreValues -file_path: -func_name: +file_name: ignore_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_json_array_of_objects.snap b/__snapshots__/test_json_array_of_objects.snap.new similarity index 95% rename from __snapshots__/test_json_array_of_objects.snap rename to __snapshots__/test_json_array_of_objects.snap.new index f09a17b..482d882 100644 --- a/__snapshots__/test_json_array_of_objects.snap +++ b/__snapshots__/test_json_array_of_objects.snap.new @@ -1,8 +1,7 @@ --- title: JSON Array of Objects test_name: TestJsonArrayOfObjects -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- []interface{}{ diff --git a/__snapshots__/test_json_numbers.snap b/__snapshots__/test_json_numbers.snap.new similarity index 94% rename from __snapshots__/test_json_numbers.snap rename to __snapshots__/test_json_numbers.snap.new index 97a05fb..6d058ac 100644 --- a/__snapshots__/test_json_numbers.snap +++ b/__snapshots__/test_json_numbers.snap.new @@ -1,8 +1,7 @@ --- title: JSON Numbers test_name: TestJsonNumbers -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- map[string]interface{}{ diff --git a/__snapshots__/test_json_object.snap b/__snapshots__/test_json_object.snap.new similarity index 94% rename from __snapshots__/test_json_object.snap rename to __snapshots__/test_json_object.snap.new index 686d602..59869ae 100644 --- a/__snapshots__/test_json_object.snap +++ b/__snapshots__/test_json_object.snap.new @@ -1,8 +1,7 @@ --- title: JSON Object test_name: TestJsonObject -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- map[string]interface{}{ diff --git a/__snapshots__/test_json_with_mixed_arrays.snap b/__snapshots__/test_json_with_mixed_arrays.snap.new similarity index 96% rename from __snapshots__/test_json_with_mixed_arrays.snap rename to __snapshots__/test_json_with_mixed_arrays.snap.new index 87c6b65..268d4ea 100644 --- a/__snapshots__/test_json_with_mixed_arrays.snap +++ b/__snapshots__/test_json_with_mixed_arrays.snap.new @@ -1,8 +1,7 @@ --- title: JSON with Mixed Arrays test_name: TestJsonWithMixedArrays -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- map[string]interface{}{ diff --git a/__snapshots__/test_json_with_special_characters.snap b/__snapshots__/test_json_with_special_characters.snap.new similarity index 94% rename from __snapshots__/test_json_with_special_characters.snap rename to __snapshots__/test_json_with_special_characters.snap.new index ab98415..2fa227b 100644 --- a/__snapshots__/test_json_with_special_characters.snap +++ b/__snapshots__/test_json_with_special_characters.snap.new @@ -1,8 +1,7 @@ --- title: JSON with Special Characters test_name: TestJsonWithSpecialCharacters -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- map[string]interface{}{ diff --git a/__snapshots__/test_json_with_various_types.snap b/__snapshots__/test_json_with_various_types.snap.new similarity index 95% rename from __snapshots__/test_json_with_various_types.snap rename to __snapshots__/test_json_with_various_types.snap.new index c0f82c8..adfed38 100644 --- a/__snapshots__/test_json_with_various_types.snap +++ b/__snapshots__/test_json_with_various_types.snap.new @@ -1,8 +1,7 @@ --- title: JSON with Various Types test_name: TestJsonWithVariousTypes -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- map[string]interface{}{ diff --git a/__snapshots__/test_large_json.snap b/__snapshots__/test_large_json.snap.new similarity index 97% rename from __snapshots__/test_large_json.snap rename to __snapshots__/test_large_json.snap.new index 3a15e32..aafb69f 100644 --- a/__snapshots__/test_large_json.snap +++ b/__snapshots__/test_large_json.snap.new @@ -1,8 +1,7 @@ --- title: Large JSON Structure test_name: TestLargeJson -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- map[string]interface{}{ diff --git a/__snapshots__/test_map.snap b/__snapshots__/test_map.snap.new similarity index 82% rename from __snapshots__/test_map.snap rename to __snapshots__/test_map.snap.new index b8b33a0..385f7ab 100644 --- a/__snapshots__/test_map.snap +++ b/__snapshots__/test_map.snap.new @@ -1,8 +1,7 @@ --- title: Map Test test_name: TestMap -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- map[string]interface{}{ diff --git a/__snapshots__/test_multiple_complex_structures.snap b/__snapshots__/test_multiple_complex_structures.snap.new similarity index 97% rename from __snapshots__/test_multiple_complex_structures.snap rename to __snapshots__/test_multiple_complex_structures.snap.new index 0017c39..dcd8a32 100644 --- a/__snapshots__/test_multiple_complex_structures.snap +++ b/__snapshots__/test_multiple_complex_structures.snap.new @@ -1,8 +1,7 @@ --- title: Multiple Complex Structures test_name: TestMultipleComplexStructures -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- []freeze_test.User{ diff --git a/__snapshots__/test_multiple_scrubbers.snap b/__snapshots__/test_multiple_scrubbers.snap.new similarity index 87% rename from __snapshots__/test_multiple_scrubbers.snap rename to __snapshots__/test_multiple_scrubbers.snap.new index b550a30..ba1ab94 100644 --- a/__snapshots__/test_multiple_scrubbers.snap +++ b/__snapshots__/test_multiple_scrubbers.snap.new @@ -1,8 +1,7 @@ --- title: Multiple Scrubbers test_name: TestMultipleScrubbers -file_path: -func_name: +file_name: scrubbers_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_nested_ignore_patterns.snap b/__snapshots__/test_nested_ignore_patterns.snap.new similarity index 91% rename from __snapshots__/test_nested_ignore_patterns.snap rename to __snapshots__/test_nested_ignore_patterns.snap.new index 0807691..ab257ec 100644 --- a/__snapshots__/test_nested_ignore_patterns.snap +++ b/__snapshots__/test_nested_ignore_patterns.snap.new @@ -1,8 +1,7 @@ --- title: Nested Ignore Patterns test_name: TestNestedIgnorePatterns -file_path: -func_name: +file_name: ignore_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_nested_maps_and_slices.snap b/__snapshots__/test_nested_maps_and_slices.snap.new similarity index 96% rename from __snapshots__/test_nested_maps_and_slices.snap rename to __snapshots__/test_nested_maps_and_slices.snap.new index 187ca8b..090d7f2 100644 --- a/__snapshots__/test_nested_maps_and_slices.snap +++ b/__snapshots__/test_nested_maps_and_slices.snap.new @@ -1,8 +1,7 @@ --- title: Nested Maps and Slices test_name: TestNestedMapsAndSlices -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- map[string]interface{}{ diff --git a/__snapshots__/test_regex_scrubber.snap b/__snapshots__/test_regex_scrubber.snap.new similarity index 84% rename from __snapshots__/test_regex_scrubber.snap rename to __snapshots__/test_regex_scrubber.snap.new index 122133c..7c742b0 100644 --- a/__snapshots__/test_regex_scrubber.snap +++ b/__snapshots__/test_regex_scrubber.snap.new @@ -1,8 +1,7 @@ --- title: Custom Regex Scrubber test_name: TestRegexScrubber -file_path: -func_name: +file_name: scrubbers_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_scrub_a_p_i_keys.snap b/__snapshots__/test_scrub_a_p_i_keys.snap.new similarity index 86% rename from __snapshots__/test_scrub_a_p_i_keys.snap rename to __snapshots__/test_scrub_a_p_i_keys.snap.new index db46802..5291914 100644 --- a/__snapshots__/test_scrub_a_p_i_keys.snap +++ b/__snapshots__/test_scrub_a_p_i_keys.snap.new @@ -1,8 +1,7 @@ --- title: Scrubbed API Keys test_name: TestScrubAPIKeys -file_path: -func_name: +file_name: scrubbers_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_scrub_dates.snap b/__snapshots__/test_scrub_dates.snap.new similarity index 85% rename from __snapshots__/test_scrub_dates.snap rename to __snapshots__/test_scrub_dates.snap.new index 00c9155..a426d57 100644 --- a/__snapshots__/test_scrub_dates.snap +++ b/__snapshots__/test_scrub_dates.snap.new @@ -1,8 +1,7 @@ --- title: Scrubbed Dates test_name: TestScrubDates -file_path: -func_name: +file_name: scrubbers_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_scrub_emails.snap b/__snapshots__/test_scrub_emails.snap.new similarity index 83% rename from __snapshots__/test_scrub_emails.snap rename to __snapshots__/test_scrub_emails.snap.new index 3a38f0b..2b5e805 100644 --- a/__snapshots__/test_scrub_emails.snap +++ b/__snapshots__/test_scrub_emails.snap.new @@ -1,8 +1,7 @@ --- title: Scrubbed Emails test_name: TestScrubEmails -file_path: -func_name: +file_name: scrubbers_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_scrub_i_p_addresses.snap b/__snapshots__/test_scrub_i_p_addresses.snap.new similarity index 84% rename from __snapshots__/test_scrub_i_p_addresses.snap rename to __snapshots__/test_scrub_i_p_addresses.snap.new index d6e13cc..b9ed136 100644 --- a/__snapshots__/test_scrub_i_p_addresses.snap +++ b/__snapshots__/test_scrub_i_p_addresses.snap.new @@ -1,8 +1,7 @@ --- title: Scrubbed IPs test_name: TestScrubIPAddresses -file_path: -func_name: +file_name: scrubbers_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_scrub_j_w_ts.snap b/__snapshots__/test_scrub_j_w_ts.snap.new similarity index 80% rename from __snapshots__/test_scrub_j_w_ts.snap rename to __snapshots__/test_scrub_j_w_ts.snap.new index 688df9c..ebff2d1 100644 --- a/__snapshots__/test_scrub_j_w_ts.snap +++ b/__snapshots__/test_scrub_j_w_ts.snap.new @@ -1,8 +1,7 @@ --- title: Scrubbed JWTs test_name: TestScrubJWTs -file_path: -func_name: +file_name: scrubbers_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_scrub_timestamps.snap b/__snapshots__/test_scrub_timestamps.snap.new similarity index 87% rename from __snapshots__/test_scrub_timestamps.snap rename to __snapshots__/test_scrub_timestamps.snap.new index 013bf75..12a3874 100644 --- a/__snapshots__/test_scrub_timestamps.snap +++ b/__snapshots__/test_scrub_timestamps.snap.new @@ -1,8 +1,7 @@ --- title: Scrubbed Timestamps test_name: TestScrubTimestamps -file_path: -func_name: +file_name: scrubbers_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_scrub_u_u_i_ds.snap b/__snapshots__/test_scrub_u_u_i_ds.snap.new similarity index 83% rename from __snapshots__/test_scrub_u_u_i_ds.snap rename to __snapshots__/test_scrub_u_u_i_ds.snap.new index 613e91d..4c94cf6 100644 --- a/__snapshots__/test_scrub_u_u_i_ds.snap +++ b/__snapshots__/test_scrub_u_u_i_ds.snap.new @@ -1,8 +1,7 @@ --- title: Scrubbed UUIDs test_name: TestScrubUUIDs -file_path: -func_name: +file_name: scrubbers_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_scrub_with_snap_function.snap b/__snapshots__/test_scrub_with_snap_function.snap.new similarity index 87% rename from __snapshots__/test_scrub_with_snap_function.snap rename to __snapshots__/test_scrub_with_snap_function.snap.new index 2175d44..af862e4 100644 --- a/__snapshots__/test_scrub_with_snap_function.snap +++ b/__snapshots__/test_scrub_with_snap_function.snap.new @@ -1,8 +1,7 @@ --- title: Scrub With Snap test_name: TestScrubWithSnapFunction -file_path: -func_name: +file_name: scrubbers_test.go version: 0.1.0 --- map[string]interface{}{ diff --git a/__snapshots__/test_snap_custom_type.snap b/__snapshots__/test_snap_custom_type.snap.new similarity index 83% rename from __snapshots__/test_snap_custom_type.snap rename to __snapshots__/test_snap_custom_type.snap.new index dfd844a..647c9ef 100644 --- a/__snapshots__/test_snap_custom_type.snap +++ b/__snapshots__/test_snap_custom_type.snap.new @@ -1,8 +1,7 @@ --- title: Custom Type Test test_name: TestSnapCustomType -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- freeze_test.CustomStruct{ diff --git a/__snapshots__/test_snap_json_array_of_objects.snap b/__snapshots__/test_snap_json_array_of_objects.snap.new similarity index 93% rename from __snapshots__/test_snap_json_array_of_objects.snap rename to __snapshots__/test_snap_json_array_of_objects.snap.new index 4683c62..18e0734 100644 --- a/__snapshots__/test_snap_json_array_of_objects.snap +++ b/__snapshots__/test_snap_json_array_of_objects.snap.new @@ -1,8 +1,7 @@ --- title: SnapJSON Array of Objects test_name: TestSnapJsonArrayOfObjects -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- [ diff --git a/__snapshots__/test_snap_json_basic.snap b/__snapshots__/test_snap_json_basic.snap.new similarity index 86% rename from __snapshots__/test_snap_json_basic.snap rename to __snapshots__/test_snap_json_basic.snap.new index cc92dec..6f89bc6 100644 --- a/__snapshots__/test_snap_json_basic.snap +++ b/__snapshots__/test_snap_json_basic.snap.new @@ -1,8 +1,7 @@ --- title: SnapJSON Basic Object test_name: TestSnapJsonBasic -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_snap_json_compact_format.snap b/__snapshots__/test_snap_json_compact_format.snap.new similarity index 87% rename from __snapshots__/test_snap_json_compact_format.snap rename to __snapshots__/test_snap_json_compact_format.snap.new index c8c7bed..7cd2a75 100644 --- a/__snapshots__/test_snap_json_compact_format.snap +++ b/__snapshots__/test_snap_json_compact_format.snap.new @@ -1,8 +1,7 @@ --- title: SnapJSON Compact Format test_name: TestSnapJsonCompactFormat -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- {"id":1,"name":"Product","price":99.99,"in_stock":true,"tags":["electronics","gadgets"]} \ No newline at end of file diff --git a/__snapshots__/test_snap_json_complex_a_p_i.snap b/__snapshots__/test_snap_json_complex_a_p_i.snap.new similarity index 96% rename from __snapshots__/test_snap_json_complex_a_p_i.snap rename to __snapshots__/test_snap_json_complex_a_p_i.snap.new index a6714bd..f3140c7 100644 --- a/__snapshots__/test_snap_json_complex_a_p_i.snap +++ b/__snapshots__/test_snap_json_complex_a_p_i.snap.new @@ -1,8 +1,7 @@ --- title: SnapJSON Complex API Response test_name: TestSnapJsonComplexAPI -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_snap_json_empty_structures.snap b/__snapshots__/test_snap_json_empty_structures.snap.new similarity index 91% rename from __snapshots__/test_snap_json_empty_structures.snap rename to __snapshots__/test_snap_json_empty_structures.snap.new index 2efcd5f..bbae9f9 100644 --- a/__snapshots__/test_snap_json_empty_structures.snap +++ b/__snapshots__/test_snap_json_empty_structures.snap.new @@ -1,8 +1,7 @@ --- title: SnapJSON Empty Structures test_name: TestSnapJsonEmptyStructures -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_snap_json_large_nested_structure.snap b/__snapshots__/test_snap_json_large_nested_structure.snap.new similarity index 98% rename from __snapshots__/test_snap_json_large_nested_structure.snap rename to __snapshots__/test_snap_json_large_nested_structure.snap.new index f027846..1e459e5 100644 --- a/__snapshots__/test_snap_json_large_nested_structure.snap +++ b/__snapshots__/test_snap_json_large_nested_structure.snap.new @@ -1,8 +1,7 @@ --- title: SnapJSON Large Nested Structure test_name: TestSnapJsonLargeNestedStructure -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_snap_json_mixed_types.snap b/__snapshots__/test_snap_json_mixed_types.snap.new similarity index 92% rename from __snapshots__/test_snap_json_mixed_types.snap rename to __snapshots__/test_snap_json_mixed_types.snap.new index 7f84eb5..d139425 100644 --- a/__snapshots__/test_snap_json_mixed_types.snap +++ b/__snapshots__/test_snap_json_mixed_types.snap.new @@ -1,8 +1,7 @@ --- title: SnapJSON Mixed Types test_name: TestSnapJsonMixedTypes -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_snap_json_real_world_example.snap b/__snapshots__/test_snap_json_real_world_example.snap.new similarity index 98% rename from __snapshots__/test_snap_json_real_world_example.snap rename to __snapshots__/test_snap_json_real_world_example.snap.new index c990ba9..a7474c5 100644 --- a/__snapshots__/test_snap_json_real_world_example.snap +++ b/__snapshots__/test_snap_json_real_world_example.snap.new @@ -1,8 +1,7 @@ --- title: SnapJSON Real World Example test_name: TestSnapJsonRealWorldExample -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_snap_json_simple_array.snap b/__snapshots__/test_snap_json_simple_array.snap.new similarity index 83% rename from __snapshots__/test_snap_json_simple_array.snap rename to __snapshots__/test_snap_json_simple_array.snap.new index 43b2460..4286e1c 100644 --- a/__snapshots__/test_snap_json_simple_array.snap +++ b/__snapshots__/test_snap_json_simple_array.snap.new @@ -1,8 +1,7 @@ --- title: SnapJSON Simple Array test_name: TestSnapJsonSimpleArray -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- [ diff --git a/__snapshots__/test_snap_json_with_nested_objects.snap b/__snapshots__/test_snap_json_with_nested_objects.snap.new similarity index 94% rename from __snapshots__/test_snap_json_with_nested_objects.snap rename to __snapshots__/test_snap_json_with_nested_objects.snap.new index 36bbc46..35adc04 100644 --- a/__snapshots__/test_snap_json_with_nested_objects.snap +++ b/__snapshots__/test_snap_json_with_nested_objects.snap.new @@ -1,8 +1,7 @@ --- title: SnapJSON Nested Objects test_name: TestSnapJsonWithNestedObjects -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_snap_json_with_nulls.snap b/__snapshots__/test_snap_json_with_nulls.snap.new similarity index 90% rename from __snapshots__/test_snap_json_with_nulls.snap rename to __snapshots__/test_snap_json_with_nulls.snap.new index fa07f3c..b4f277b 100644 --- a/__snapshots__/test_snap_json_with_nulls.snap +++ b/__snapshots__/test_snap_json_with_nulls.snap.new @@ -1,8 +1,7 @@ --- title: SnapJSON With Nulls test_name: TestSnapJsonWithNulls -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_snap_json_with_numbers.snap b/__snapshots__/test_snap_json_with_numbers.snap.new similarity index 93% rename from __snapshots__/test_snap_json_with_numbers.snap rename to __snapshots__/test_snap_json_with_numbers.snap.new index 0681993..397ac10 100644 --- a/__snapshots__/test_snap_json_with_numbers.snap +++ b/__snapshots__/test_snap_json_with_numbers.snap.new @@ -1,8 +1,7 @@ --- title: SnapJSON With Numbers test_name: TestSnapJsonWithNumbers -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_snap_json_with_special_characters.snap b/__snapshots__/test_snap_json_with_special_characters.snap.new similarity index 94% rename from __snapshots__/test_snap_json_with_special_characters.snap rename to __snapshots__/test_snap_json_with_special_characters.snap.new index 4dd5de3..815dfac 100644 --- a/__snapshots__/test_snap_json_with_special_characters.snap +++ b/__snapshots__/test_snap_json_with_special_characters.snap.new @@ -1,8 +1,7 @@ --- title: SnapJSON With Special Characters test_name: TestSnapJsonWithSpecialCharacters -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- { diff --git a/__snapshots__/test_snap_multiple.snap b/__snapshots__/test_snap_multiple.snap.new similarity index 86% rename from __snapshots__/test_snap_multiple.snap rename to __snapshots__/test_snap_multiple.snap.new index e0d99e4..c1b5120 100644 --- a/__snapshots__/test_snap_multiple.snap +++ b/__snapshots__/test_snap_multiple.snap.new @@ -1,8 +1,7 @@ --- title: Multiple Values Test test_name: TestSnapMultiple -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- "value1" diff --git a/__snapshots__/test_snap_string.snap b/__snapshots__/test_snap_string.snap.new similarity index 76% rename from __snapshots__/test_snap_string.snap rename to __snapshots__/test_snap_string.snap.new index 2d49043..6f0a07e 100644 --- a/__snapshots__/test_snap_string.snap +++ b/__snapshots__/test_snap_string.snap.new @@ -1,8 +1,7 @@ --- title: Simple String Test test_name: TestSnapString -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- hello world \ No newline at end of file diff --git a/__snapshots__/test_structure_with_empty_values.snap b/__snapshots__/test_structure_with_empty_values.snap.new similarity index 95% rename from __snapshots__/test_structure_with_empty_values.snap rename to __snapshots__/test_structure_with_empty_values.snap.new index 5850fcd..313f7f5 100644 --- a/__snapshots__/test_structure_with_empty_values.snap +++ b/__snapshots__/test_structure_with_empty_values.snap.new @@ -1,8 +1,7 @@ --- title: Structure with Empty Values test_name: TestStructureWithEmptyValues -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- []freeze_test.Container{ diff --git a/__snapshots__/test_structure_with_interface.snap b/__snapshots__/test_structure_with_interface.snap.new similarity index 98% rename from __snapshots__/test_structure_with_interface.snap rename to __snapshots__/test_structure_with_interface.snap.new index c4c40bc..3f7150a 100644 --- a/__snapshots__/test_structure_with_interface.snap +++ b/__snapshots__/test_structure_with_interface.snap.new @@ -1,8 +1,7 @@ --- title: Structure with Interface Fields test_name: TestStructureWithInterface -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- []freeze_test.Response{ diff --git a/__snapshots__/test_structure_with_pointers.snap b/__snapshots__/test_structure_with_pointers.snap.new similarity index 95% rename from __snapshots__/test_structure_with_pointers.snap rename to __snapshots__/test_structure_with_pointers.snap.new index f72e580..5c84f67 100644 --- a/__snapshots__/test_structure_with_pointers.snap +++ b/__snapshots__/test_structure_with_pointers.snap.new @@ -1,8 +1,7 @@ --- title: Structure with Pointers test_name: TestStructureWithPointers -file_path: -func_name: +file_name: freeze_test.go version: 0.1.0 --- freeze_test.Person{ diff --git a/__snapshots__/test_unix_timestamp_scrubbing.snap b/__snapshots__/test_unix_timestamp_scrubbing.snap.new similarity index 86% rename from __snapshots__/test_unix_timestamp_scrubbing.snap rename to __snapshots__/test_unix_timestamp_scrubbing.snap.new index 453d671..9a35a43 100644 --- a/__snapshots__/test_unix_timestamp_scrubbing.snap +++ b/__snapshots__/test_unix_timestamp_scrubbing.snap.new @@ -1,8 +1,7 @@ --- title: Scrubbed Unix Timestamps test_name: TestUnixTimestampScrubbing -file_path: -func_name: +file_name: scrubbers_test.go version: 0.1.0 --- { diff --git a/freeze.go b/freeze.go index 193260e..3ff6c52 100644 --- a/freeze.go +++ b/freeze.go @@ -2,6 +2,8 @@ package freeze import ( "fmt" + "path/filepath" + "runtime" "github.com/kortschak/utter" "github.com/ptdewey/freeze/internal/diff" @@ -87,17 +89,35 @@ func SnapWithOptions(t testingT, title string, opts []SnapshotOption, values ... func snap(t testingT, title string, content string) { t.Helper() testName := t.Name() - snapWithTitle(t, title, testName, content) + + // Capture the caller's file name by walking up the call stack + // to find the first file that's not freeze.go TODO: does this actually work for all cases? + fileName := "unknown" + for i := 1; i < 10; i++ { + _, file, _, ok := runtime.Caller(i) + if !ok { + break + } + baseName := filepath.Base(file) + // Skip frames within freeze.go to get to the actual test file + if baseName != "freeze.go" { + fileName = baseName + break + } + } + + snapWithTitle(t, title, testName, fileName, content) } -func snapWithTitle(t testingT, title string, testName string, content string) { +func snapWithTitle(t testingT, title string, testName string, fileName string, content string) { t.Helper() snapshot := &files.Snapshot{ - Title: title, - Name: testName, - Content: content, - Version: version, + Title: title, + Test: testName, + FileName: fileName, + Content: content, + Version: version, } accepted, err := files.ReadAccepted(testName) diff --git a/freeze_test.go b/freeze_test.go index ab605a6..c16375c 100644 --- a/freeze_test.go +++ b/freeze_test.go @@ -46,13 +46,14 @@ func TestMap(t *testing.T) { func TestSerializeDeserialize(t *testing.T) { snap := &freeze.Snapshot{ - Title: "My Test Title", - Name: "TestExample", - Content: "test content\nmultiline", + Title: "My Test Title", + Test: "TestExample", + FileName: "test_file.go", + Content: "test content\nmultiline", } serialized := snap.Serialize() - expected := "---\ntitle: My Test Title\ntest_name: TestExample\nfile_path: \nfunc_name: \nversion: \n---\ntest content\nmultiline" + expected := "---\ntitle: My Test Title\ntest_name: TestExample\nfile_name: test_file.go\nversion: \n---\ntest content\nmultiline" if serialized != expected { t.Errorf("expected:\n%s\ngot:\n%s", expected, serialized) } @@ -65,8 +66,11 @@ func TestSerializeDeserialize(t *testing.T) { if deserialized.Title != snap.Title { t.Errorf("title mismatch: %s != %s", deserialized.Title, snap.Title) } - if deserialized.Name != snap.Name { - t.Errorf("test name mismatch: %s != %s", deserialized.Name, snap.Name) + if deserialized.Test != snap.Test { + t.Errorf("test name mismatch: %s != %s", deserialized.Test, snap.Test) + } + if deserialized.FileName != snap.FileName { + t.Errorf("file name mismatch: %s != %s", deserialized.FileName, snap.FileName) } if deserialized.Content != snap.Content { t.Errorf("content mismatch: %s != %s", deserialized.Content, snap.Content) @@ -76,7 +80,7 @@ func TestSerializeDeserialize(t *testing.T) { func TestFileOperations(t *testing.T) { snap := &freeze.Snapshot{ Title: "File Ops Title", - Name: "TestFileOps", + Test: "TestFileOps", Content: "file test content", } @@ -156,13 +160,13 @@ func TestHistogramDiff(t *testing.T) { func TestDiffSnapshotBox(t *testing.T) { old := &freeze.Snapshot{ Title: "Diff Test Title", - Name: "TestDiff", + Test: "TestDiff", Content: "old content", } new := &freeze.Snapshot{ Title: "Diff Test Title", - Name: "TestDiff", + Test: "TestDiff", Content: "new content", } @@ -179,7 +183,7 @@ func TestDiffSnapshotBox(t *testing.T) { func TestNewSnapshotBox(t *testing.T) { snap := &freeze.Snapshot{ Title: "New Test Title", - Name: "TestNew", + Test: "TestNew", Content: "test content", } @@ -221,7 +225,7 @@ type User struct { Active bool CreatedAt time.Time Roles []string - Metadata map[string]interface{} + Metadata map[string]any } type Post struct { @@ -252,11 +256,11 @@ func TestComplexNestedStructure(t *testing.T) { Active: true, CreatedAt: time.Date(2023, 1, 15, 10, 30, 0, 0, time.UTC), Roles: []string{"admin", "moderator", "user"}, - Metadata: map[string]interface{}{ + Metadata: map[string]any{ "theme": "dark", "notifications": true, "language": "en", - "preferences": map[string]interface{}{ + "preferences": map[string]any{ "email_frequency": "weekly", "notifications": true, }, @@ -311,7 +315,7 @@ func TestMultipleComplexStructures(t *testing.T) { Email: "alice@example.com", Active: true, Roles: []string{"user", "moderator"}, - Metadata: map[string]interface{}{ + Metadata: map[string]any{ "verified": true, "badge": "verified", }, @@ -322,7 +326,7 @@ func TestMultipleComplexStructures(t *testing.T) { Email: "bob@example.com", Active: false, Roles: []string{"user"}, - Metadata: map[string]interface{}{ + Metadata: map[string]any{ "verified": false, "avatar": "https://example.com/bob.jpg", }, @@ -333,7 +337,7 @@ func TestMultipleComplexStructures(t *testing.T) { Email: "charlie@example.com", Active: true, Roles: []string{"user", "admin"}, - Metadata: map[string]interface{}{ + Metadata: map[string]any{ "verified": true, "account_age_days": 365, }, @@ -347,8 +351,8 @@ func TestStructureWithInterface(t *testing.T) { type Response struct { Status string Message string - Data interface{} - Meta map[string]interface{} + Data any + Meta map[string]any } responses := []Response{ @@ -361,7 +365,7 @@ func TestStructureWithInterface(t *testing.T) { Email: "john@example.com", Active: true, }, - Meta: map[string]interface{}{ + Meta: map[string]any{ "request_id": "req-123", "timestamp": "2023-01-20T10:30:00Z", }, @@ -370,7 +374,7 @@ func TestStructureWithInterface(t *testing.T) { Status: "error", Message: "User not found", Data: nil, - Meta: map[string]interface{}{ + Meta: map[string]any{ "error_code": 404, "error_type": "NOT_FOUND", }, @@ -385,7 +389,7 @@ func TestStructureWithInterface(t *testing.T) { Published: true, }, }, - Meta: map[string]interface{}{ + Meta: map[string]any{ "total_count": 10, "page": 1, "per_page": 20, @@ -397,9 +401,9 @@ func TestStructureWithInterface(t *testing.T) { } func TestNestedMapsAndSlices(t *testing.T) { - complexData := map[string]interface{}{ - "users": map[string]interface{}{ - "active": []map[string]interface{}{ + complexData := map[string]any{ + "users": map[string]any{ + "active": []map[string]any{ { "id": 1, "name": "Alice", @@ -411,23 +415,23 @@ func TestNestedMapsAndSlices(t *testing.T) { "verified": false, }, }, - "inactive": []map[string]interface{}{ + "inactive": []map[string]any{ { "id": 3, "name": "Charlie", }, }, }, - "posts": map[string]interface{}{ + "posts": map[string]any{ "published": 42, "drafts": 5, "categories": []string{"tech", "lifestyle", "news"}, }, - "stats": map[string]interface{}{ - "daily": map[string]interface{}{ + "stats": map[string]any{ + "daily": map[string]any{ "views": 1500, "clicks": 320, - "conversions": map[string]interface{}{ + "conversions": map[string]any{ "total": 45, "by_source": map[string]int{ "organic": 25, @@ -543,7 +547,7 @@ func TestJsonObject(t *testing.T) { "message": null }` - var data interface{} + var data any if err := json.Unmarshal([]byte(jsonStr), &data); err != nil { t.Fatalf("failed to unmarshal json: %v", err) } @@ -611,7 +615,7 @@ func TestComplexJsonStructure(t *testing.T) { } }` - var data interface{} + var data any if err := json.Unmarshal([]byte(jsonStr), &data); err != nil { t.Fatalf("failed to unmarshal json: %v", err) } @@ -649,7 +653,7 @@ func TestJsonArrayOfObjects(t *testing.T) { } ]` - var data interface{} + var data any if err := json.Unmarshal([]byte(jsonStr), &data); err != nil { t.Fatalf("failed to unmarshal json: %v", err) } @@ -675,7 +679,7 @@ func TestJsonWithVariousTypes(t *testing.T) { "escaped_string": "line1\nline2\ttab" }` - var data interface{} + var data any if err := json.Unmarshal([]byte(jsonStr), &data); err != nil { t.Fatalf("failed to unmarshal json: %v", err) } @@ -703,7 +707,7 @@ func TestJsonNumbers(t *testing.T) { } }` - var data interface{} + var data any if err := json.Unmarshal([]byte(jsonStr), &data); err != nil { t.Fatalf("failed to unmarshal json: %v", err) } @@ -723,7 +727,7 @@ func TestJsonWithSpecialCharacters(t *testing.T) { "backslash": "path\\to\\file" }` - var data interface{} + var data any if err := json.Unmarshal([]byte(jsonStr), &data); err != nil { t.Fatalf("failed to unmarshal json: %v", err) } @@ -767,7 +771,7 @@ func TestGoStructMarshalledToJson(t *testing.T) { t.Fatalf("failed to marshal json: %v", err) } - var data interface{} + var data any if err := json.Unmarshal(jsonBytes, &data); err != nil { t.Fatalf("failed to unmarshal json: %v", err) } @@ -807,7 +811,7 @@ func TestDeeplyNestedJson(t *testing.T) { t.Fatalf("failed to marshal json: %v", err) } - var data interface{} + var data any if err := json.Unmarshal(jsonBytes, &data); err != nil { t.Fatalf("failed to unmarshal json: %v", err) } @@ -883,7 +887,7 @@ func TestLargeJson(t *testing.T) { t.Fatalf("failed to marshal json: %v", err) } - var data interface{} + var data any if err := json.Unmarshal(jsonBytes, &data); err != nil { t.Fatalf("failed to unmarshal json: %v", err) } @@ -914,7 +918,7 @@ func TestJsonWithMixedArrays(t *testing.T) { ] }` - var data interface{} + var data any if err := json.Unmarshal([]byte(jsonStr), &data); err != nil { t.Fatalf("failed to unmarshal json: %v", err) } diff --git a/ignore.go b/ignore.go index 9b7cb56..6c8757d 100644 --- a/ignore.go +++ b/ignore.go @@ -2,6 +2,7 @@ package freeze import ( "regexp" + "slices" "strings" ) @@ -64,12 +65,7 @@ type keyOnlyIgnore struct { } func (k *keyOnlyIgnore) ShouldIgnore(key, value string) bool { - for _, ignoreKey := range k.keys { - if ignoreKey == key { - return true - } - } - return false + return slices.Contains(k.keys, key) } // IgnoreKeys creates an ignore pattern that ignores the specified keys @@ -118,12 +114,7 @@ type valueOnlyIgnore struct { } func (v *valueOnlyIgnore) ShouldIgnore(key, value string) bool { - for _, ignoreValue := range v.values { - if ignoreValue == value { - return true - } - } - return false + return slices.Contains(v.values, value) } // IgnoreValues creates an ignore pattern that ignores the specified values diff --git a/internal/files/__snapshots__/test_accept.snap b/internal/files/__snapshots__/test_accept.snap index 2c8903b..70382e8 100644 --- a/internal/files/__snapshots__/test_accept.snap +++ b/internal/files/__snapshots__/test_accept.snap @@ -1,8 +1,7 @@ --- title: Accept Title test_name: TestAccept -file_path: -func_name: +file_name: version: --- new content to accept \ No newline at end of file diff --git a/internal/files/files.go b/internal/files/files.go index e454819..23225d3 100644 --- a/internal/files/files.go +++ b/internal/files/files.go @@ -9,18 +9,17 @@ import ( ) type Snapshot struct { - Title string - Name string - FilePath string - FuncName string Version string + Title string + Test string + FileName string Content string } func (s *Snapshot) Serialize() string { header := fmt.Sprintf( - "---\ntitle: %s\ntest_name: %s\nfile_path: %s\nfunc_name: %s\nversion: %s\n---\n", - s.Title, s.Name, s.FilePath, s.FuncName, s.Version, + "---\ntitle: %s\ntest_name: %s\nfile_name: %s\nversion: %s\n---\n", + s.Title, s.Test, s.FileName, s.Version, ) return header + s.Content } @@ -54,11 +53,9 @@ func Deserialize(raw string) (*Snapshot, error) { case "title": snap.Title = value case "test_name": - snap.Name = value - case "file_path": - snap.FilePath = value - case "func_name": - snap.FuncName = value + snap.Test = value + case "file_name": + snap.FileName = value case "version": snap.Version = value } @@ -128,11 +125,11 @@ func SaveSnapshot(snap *Snapshot, state string) error { var fileName string switch state { case "accepted": - fileName = SnapshotFileName(snap.Name) + ".snap" + fileName = SnapshotFileName(snap.Test) + ".snap" case "new": - fileName = SnapshotFileName(snap.Name) + ".snap.new" + fileName = SnapshotFileName(snap.Test) + ".snap.new" default: - fileName = SnapshotFileName(snap.Name) + "." + state + fileName = SnapshotFileName(snap.Test) + "." + state } filePath := filepath.Join(snapshotDir, fileName) diff --git a/internal/files/files_test.go b/internal/files/files_test.go index 42807f6..7a508ed 100644 --- a/internal/files/files_test.go +++ b/internal/files/files_test.go @@ -35,14 +35,14 @@ func TestSnapshotFileName(t *testing.T) { func TestSerializeDeserialize(t *testing.T) { snap := &files.Snapshot{ Title: "Example Title", - Name: "TestExample", - FilePath: "/path/to/test.go", + Test: "TestExample", + FileName: "example_test.go", Version: "1.0.0", Content: "test content\nmultiline", } serialized := snap.Serialize() - expected := "---\ntitle: Example Title\ntest_name: TestExample\nfile_path: /path/to/test.go\nfunc_name: \nversion: 1.0.0\n---\ntest content\nmultiline" + expected := "---\ntitle: Example Title\ntest_name: TestExample\nfile_name: example_test.go\nversion: 1.0.0\n---\ntest content\nmultiline" if serialized != expected { t.Errorf("Serialize():\nexpected:\n%s\n\ngot:\n%s", expected, serialized) } @@ -55,11 +55,11 @@ func TestSerializeDeserialize(t *testing.T) { if deserialized.Title != snap.Title { t.Errorf("Title mismatch: %s != %s", deserialized.Title, snap.Title) } - if deserialized.Name != snap.Name { - t.Errorf("Name mismatch: %s != %s", deserialized.Name, snap.Name) + if deserialized.Test != snap.Test { + t.Errorf("Name mismatch: %s != %s", deserialized.Test, snap.Test) } - if deserialized.FilePath != snap.FilePath { - t.Errorf("FilePath mismatch: %s != %s", deserialized.FilePath, snap.FilePath) + if deserialized.FileName != snap.FileName { + t.Errorf("FileName mismatch: %s != %s", deserialized.FileName, snap.FileName) } if deserialized.Version != snap.Version { t.Errorf("Version mismatch: %s != %s", deserialized.Version, snap.Version) @@ -122,22 +122,6 @@ func TestDeserializeValidFormats(t *testing.T) { "", "line1\nline2\nline3", }, - { - "with extra fields", - "---\ntitle: Extra Title\ntest_name: Test\nfile_path: /path\nfunc_name: \nextra: ignored\n---\ncontent", - "Extra Title", - "Test", - "", - "content", - }, - { - "backward compatibility - no title", - "---\ntest_name: Test\nfile_path: /path\nfunc_name: \n---\ncontent", - "", - "Test", - "", - "content", - }, } for _, tt := range tests { @@ -149,8 +133,8 @@ func TestDeserializeValidFormats(t *testing.T) { if snap.Title != tt.wantTitle { t.Errorf("Title = %s, want %s", snap.Title, tt.wantTitle) } - if snap.Name != tt.wantTest { - t.Errorf("Name = %s, want %s", snap.Name, tt.wantTest) + if snap.Test != tt.wantTest { + t.Errorf("Name = %s, want %s", snap.Test, tt.wantTest) } if snap.Version != tt.wantVersion { t.Errorf("Version = %s, want %s", snap.Version, tt.wantVersion) @@ -165,7 +149,7 @@ func TestDeserializeValidFormats(t *testing.T) { func TestSaveAndReadSnapshot(t *testing.T) { snap := &files.Snapshot{ Title: "Save Read Title", - Name: "TestSaveRead", + Test: "TestSaveRead", Content: "saved content", } @@ -195,7 +179,7 @@ func TestReadSnapshotNotFound(t *testing.T) { func TestAcceptSnapshot(t *testing.T) { newSnap := &files.Snapshot{ Title: "Accept Title", - Name: "TestAccept", + Test: "TestAccept", Content: "new content to accept", } @@ -227,7 +211,7 @@ func TestAcceptSnapshot(t *testing.T) { func TestRejectSnapshot(t *testing.T) { snap := &files.Snapshot{ Title: "Reject Title", - Name: "TestReject", + Test: "TestReject", Content: "content to reject", } diff --git a/internal/pretty/boxes.go b/internal/pretty/boxes.go index 9347828..9df881a 100644 --- a/internal/pretty/boxes.go +++ b/internal/pretty/boxes.go @@ -23,73 +23,29 @@ const ( DiffNew ) -func newSnapshotBoxInternal(snap *files.Snapshot) string { - width := TerminalWidth() - snapshotFileName := files.SnapshotFileName(snap.Name) + ".snap.new" - - var sb strings.Builder - sb.WriteString("─── " + "New Snapshot " + strings.Repeat("─", width-15) + "\n\n") - - if snap.Title != "" { - sb.WriteString(fmt.Sprintf(" title: %s\n", Blue(snap.Title))) - } - if snap.Name != "" { - sb.WriteString(fmt.Sprintf(" test: %s\n", Blue(snap.Name))) - } - // TODO: maybe put this on the "new snapshot row"? (or only show on the diff view) - if snapshotFileName != "" { - sb.WriteString(fmt.Sprintf(" file: %s\n", Gray(snapshotFileName))) - } - sb.WriteString("\n") - - lines := strings.Split(snap.Content, "\n") - numLines := len(lines) - lineNumWidth := len(strconv.Itoa(numLines)) - - topBar := strings.Repeat("─", lineNumWidth+3) + "┬" + - strings.Repeat("─", width-lineNumWidth-2) + "\n" - sb.WriteString(topBar) - - for i, line := range lines { - lineNum := fmt.Sprintf("%*d", lineNumWidth, i+1) - prefix := fmt.Sprintf("%s %s", Green(lineNum), Green("+")) - - if len(line) > width-len(prefix)-4 { - line = line[:width-len(prefix)-7] + "..." - } - - display := fmt.Sprintf("%s %s", prefix, Green(line)) - sb.WriteString(fmt.Sprintf(" %s\n", display)) - } - - bottomBar := strings.Repeat("─", lineNumWidth+3) + "┴" + - strings.Repeat("─", width-lineNumWidth-2) + "\n" - sb.WriteString(bottomBar) - - return sb.String() -} - func NewSnapshotBox(snap *files.Snapshot) string { return newSnapshotBoxInternal(snap) } func DiffSnapshotBox(old, new *files.Snapshot, diffLines []DiffLine) string { width := TerminalWidth() - snapshotFileName := files.SnapshotFileName(new.Name) + ".snap" + snapshotFileName := files.SnapshotFileName(new.Test) + ".snap" var sb strings.Builder sb.WriteString(strings.Repeat("─", width) + "\n") + // TODO: maybe make helper functions for this, swap coloring between the key and the value + // TODO: maybe show the snapshot file name in gray next to the "a/r/s" options + // (i.e. "a accept -> snap_file_name.snap", "reject" w/strikethrough?, skip, keeps "*snap.new") sb.WriteString(fmt.Sprintf(" file: %s\n", Gray(snapshotFileName))) sb.WriteString(fmt.Sprintf(" %s\n", Blue("Snapshot Diff"))) if new.Title != "" { sb.WriteString(fmt.Sprintf(" title: %s\n", Blue("\""+new.Title+"\""))) } - sb.WriteString(fmt.Sprintf(" test: %s\n", Blue("\""+new.Name+"\""))) + sb.WriteString(fmt.Sprintf(" test: %s\n", Blue("\""+new.Test+"\""))) sb.WriteString(strings.Repeat("─", width) + "\n") // Calculate max line numbers for proper spacing - maxOldNum := 0 - maxNewNum := 0 + maxOldNum, maxNewNum := 0, 0 for _, dl := range diffLines { if dl.OldNumber > maxOldNum { maxOldNum = dl.OldNumber @@ -139,3 +95,50 @@ func DiffSnapshotBox(old, new *files.Snapshot, diffLines []DiffLine) string { sb.WriteString(strings.Repeat("─", width) + "\n") return sb.String() } + +func newSnapshotBoxInternal(snap *files.Snapshot) string { + width := TerminalWidth() + + var sb strings.Builder + sb.WriteString("─── " + "New Snapshot " + strings.Repeat("─", width-15) + "\n\n") + + if snap.Title != "" { + sb.WriteString(Blue(" title: ") + snap.Title + "\n") + // sb.WriteString(fmt.Sprintf(" title: %s\n", Blue(snap.Title))) + } + if snap.Test != "" { + // sb.WriteString(fmt.Sprintf(" test: %s\n", Blue(snap.Test))) + sb.WriteString(Blue(" test: ") + snap.Test + "\n") + } + if snap.FileName != "" { + // sb.WriteString(fmt.Sprintf(" file: %s\n", Gray(snap.FileName))) + sb.WriteString(Blue(" file: ") + snap.FileName + "\n") + } + sb.WriteString("\n") + + lines := strings.Split(snap.Content, "\n") + numLines := len(lines) + lineNumWidth := len(strconv.Itoa(numLines)) + + topBar := strings.Repeat("─", lineNumWidth+3) + "┬" + + strings.Repeat("─", width-lineNumWidth-2) + "\n" + sb.WriteString(topBar) + + for i, line := range lines { + lineNum := fmt.Sprintf("%*d", lineNumWidth, i+1) + prefix := fmt.Sprintf("%s %s", Green(lineNum), Green("+")) + + if len(line) > width-len(prefix)-4 { + line = line[:width-len(prefix)-7] + "..." + } + + display := fmt.Sprintf("%s %s", prefix, Green(line)) + sb.WriteString(fmt.Sprintf(" %s\n", display)) + } + + bottomBar := strings.Repeat("─", lineNumWidth+3) + "┴" + + strings.Repeat("─", width-lineNumWidth-2) + "\n" + sb.WriteString(bottomBar) + + return sb.String() +} diff --git a/internal/transform/transform.go b/internal/transform/transform.go index efc0023..b9f3856 100644 --- a/internal/transform/transform.go +++ b/internal/transform/transform.go @@ -36,7 +36,7 @@ func TransformJSON(jsonStr string, config *Config) (string, error) { return jsonStr, nil } - var data interface{} + var data any if err := json.Unmarshal([]byte(jsonStr), &data); err != nil { return "", fmt.Errorf("failed to unmarshal JSON: %w", err) } @@ -61,11 +61,11 @@ func TransformJSON(jsonStr string, config *Config) (string, error) { } // walkAndFilter recursively walks the data structure and filters out ignored fields. -func walkAndFilter(data interface{}, ignorePatterns []IgnorePattern) interface{} { +func walkAndFilter(data any, ignorePatterns []IgnorePattern) any { switch v := data.(type) { - case map[string]interface{}: + case map[string]any: return filterMap(v, ignorePatterns) - case []interface{}: + case []any: return filterSlice(v, ignorePatterns) default: return data @@ -73,12 +73,12 @@ func walkAndFilter(data interface{}, ignorePatterns []IgnorePattern) interface{} } // filterMap filters a map, removing entries that match ignore patterns. -func filterMap(m map[string]interface{}, ignorePatterns []IgnorePattern) map[string]interface{} { - result := make(map[string]interface{}) +func filterMap(m map[string]any, ignorePatterns []IgnorePattern) map[string]any { + result := make(map[string]any) for key, value := range m { // Convert value to string for comparison valueStr := valueToString(value) - + // Check if this key-value pair should be ignored shouldIgnore := false for _, pattern := range ignorePatterns { @@ -87,7 +87,7 @@ func filterMap(m map[string]interface{}, ignorePatterns []IgnorePattern) map[str break } } - + if !shouldIgnore { // Recursively filter nested structures result[key] = walkAndFilter(value, ignorePatterns) @@ -97,8 +97,8 @@ func filterMap(m map[string]interface{}, ignorePatterns []IgnorePattern) map[str } // filterSlice filters a slice, recursively processing each element. -func filterSlice(s []interface{}, ignorePatterns []IgnorePattern) []interface{} { - result := make([]interface{}, len(s)) +func filterSlice(s []any, ignorePatterns []IgnorePattern) []any { + result := make([]any, len(s)) for i, item := range s { result[i] = walkAndFilter(item, ignorePatterns) } @@ -106,7 +106,7 @@ func filterSlice(s []interface{}, ignorePatterns []IgnorePattern) []interface{} } // valueToString converts various value types to string for comparison. -func valueToString(value interface{}) string { +func valueToString(value any) string { switch v := value.(type) { case string: return v diff --git a/scrubbers.go b/scrubbers.go index 180d81b..e2003e7 100644 --- a/scrubbers.go +++ b/scrubbers.go @@ -50,14 +50,15 @@ func ExactMatchScrubber(match string, replacement string) SnapshotOption { } // Common regex patterns for scrubbing +// TODO: review these var ( - uuidPattern = regexp.MustCompile(`[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}`) - iso8601Pattern = regexp.MustCompile(`\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})?`) - emailPattern = regexp.MustCompile(`[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}`) - unixTsPattern = regexp.MustCompile(`\b\d{10,13}\b`) - ipv4Pattern = regexp.MustCompile(`\b(?:\d{1,3}\.){3}\d{1,3}\b`) + uuidPattern = regexp.MustCompile(`[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}`) + iso8601Pattern = regexp.MustCompile(`\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})?`) + emailPattern = regexp.MustCompile(`[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}`) + unixTsPattern = regexp.MustCompile(`\b\d{10,13}\b`) + ipv4Pattern = regexp.MustCompile(`\b(?:\d{1,3}\.){3}\d{1,3}\b`) creditCardPattern = regexp.MustCompile(`\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b`) - jwtPattern = regexp.MustCompile(`eyJ[a-zA-Z0-9_-]*\.eyJ[a-zA-Z0-9_-]*\.[a-zA-Z0-9_-]*`) + jwtPattern = regexp.MustCompile(`eyJ[a-zA-Z0-9_-]*\.eyJ[a-zA-Z0-9_-]*\.[a-zA-Z0-9_-]*`) ) // ScrubUUIDs replaces all UUIDs with "". @@ -136,7 +137,6 @@ func ScrubAPIKeys() SnapshotOption { }) } -// customScrubber allows users to provide a custom scrubbing function. type customScrubber struct { scrubFunc func(string) string } diff --git a/scrubbers_test.go b/scrubbers_test.go index 2a2482f..96e47bc 100644 --- a/scrubbers_test.go +++ b/scrubbers_test.go @@ -141,7 +141,7 @@ func TestScrubAPIKeys(t *testing.T) { } func TestScrubWithSnapFunction(t *testing.T) { - data := map[string]interface{}{ + data := map[string]any{ "user_id": "550e8400-e29b-41d4-a716-446655440000", "email": "user@example.com", "created_at": "2023-01-15T10:30:00Z", -- 2.51.2