diff --git a/bin/tests/data/repeated_keys.nix b/bin/tests/data/repeated_keys.nix deleted file mode 100644 index c051fa7..0000000 --- a/bin/tests/data/repeated_keys.nix +++ /dev/null @@ -1,29 +0,0 @@ -[ - # fine - { - foo.bar = 1; - } - - # do not raise on rec - rec { - foo.x = foo.y; - foo.y = 2; - foo.z = 3; - } - - # exactly 3 occurrences - { - foo.bar = 1; - foo.bar."hello" = 1; - foo.again = 1; - } - - # more than 3, omit the extra - { - foo.baz.bar1 = 1; - foo.baz.bar2 = 2; - foo.baz.bar3 = 3; - foo.baz.bar4 = 4; - foo.baz.bar5 = 5; - } -] diff --git a/bin/tests/main.rs b/bin/tests/main.rs index b80f8b9..3a06bb1 100644 --- a/bin/tests/main.rs +++ b/bin/tests/main.rs @@ -44,6 +44,5 @@ fn test_cli(test_name: &str, file_path: &str, args: &[&str]) { } test_lint! { - repeated_keys, empty_list_concat } diff --git a/bin/tests/repeated_keys.rs b/bin/tests/repeated_keys.rs new file mode 100644 index 0000000..ec2427a --- /dev/null +++ b/bin/tests/repeated_keys.rs @@ -0,0 +1,42 @@ +mod _utils; + +use indoc::indoc; + +use macros::generate_tests; + +generate_tests! { + rule: useless_has_attr, + expressions: [ + // fine + "{ foo.bar = 1; }", + + // do not raise on rec + indoc! {" + rec { + foo.x = foo.y; + foo.y = 2; + foo.z = 3; + } + "}, + + // exactly 3 occurrences + indoc! {r#" + { + foo.bar = 1; + foo.bar."hello" = 1; + foo.again = 1; + } + "#}, + + // more than 3, omit the extra + indoc! {" + { + foo.baz.bar1 = 1; + foo.baz.bar2 = 2; + foo.baz.bar3 = 3; + foo.baz.bar4 = 4; + foo.baz.bar5 = 5; + } + "}, + ], +} diff --git a/bin/tests/snapshots/main__repeated_keys_fix.snap b/bin/tests/snapshots/main__repeated_keys_fix.snap deleted file mode 100644 index af691ae..0000000 --- a/bin/tests/snapshots/main__repeated_keys_fix.snap +++ /dev/null @@ -1,5 +0,0 @@ ---- -source: bin/tests/main.rs -expression: "&stdout" ---- - diff --git a/bin/tests/snapshots/main__repeated_keys_lint.snap b/bin/tests/snapshots/main__repeated_keys_lint.snap deleted file mode 100644 index 41d7aaf..0000000 --- a/bin/tests/snapshots/main__repeated_keys_lint.snap +++ /dev/null @@ -1,30 +0,0 @@ ---- -source: bin/tests/main.rs -expression: "&stdout" ---- -[W20] Warning: Avoid repeated keys in attribute sets - ╭─[tests/data/repeated_keys.nix:16:5] - │ - 16 │ foo.bar = 1; - · ───┬─── - · ╰───── The key foo is first assigned here ... - 17 │ foo.bar."hello" = 1; - · ───────┬─────── - · ╰───────── ... repeated here ... - 18 │ foo.again = 1; - · ────┬──── - · ╰────── ... and here. Try foo = { bar=...; bar."hello"=...; again=...; } instead. -────╯ -[W20] Warning: Avoid repeated keys in attribute sets - ╭─[tests/data/repeated_keys.nix:23:5] - │ - 23 │ foo.baz.bar1 = 1; - · ──────┬───── - · ╰─────── The key foo is first assigned here ... - 24 │ foo.baz.bar2 = 2; - · ──────┬───── - · ╰─────── ... repeated here ... - 25 │ foo.baz.bar3 = 3; - · ──────┬───── - · ╰─────── ... and here (2 occurrences omitted). Try foo = { baz.bar1=...; baz.bar2=...; baz.bar3=...; } instead. -────╯ diff --git a/bin/tests/snapshots/repeated_keys__fix_107c49dd2c0b84878c81852acfd4aee37038d8367b6bc7f5b43ce051c24908e5.snap b/bin/tests/snapshots/repeated_keys__fix_107c49dd2c0b84878c81852acfd4aee37038d8367b6bc7f5b43ce051c24908e5.snap new file mode 100644 index 0000000..2b28053 --- /dev/null +++ b/bin/tests/snapshots/repeated_keys__fix_107c49dd2c0b84878c81852acfd4aee37038d8367b6bc7f5b43ce051c24908e5.snap @@ -0,0 +1,5 @@ +--- +source: bin/tests/repeated_keys.rs +expression: "\"{\\n foo.bar = 1;\\n foo.bar.\\\"hello\\\" = 1;\\n foo.again = 1;\\n}\\n\"" +--- + diff --git a/bin/tests/snapshots/repeated_keys__fix_2987d09ebf239c581be44d6a044ceb0290e769e15f802483ec2f796af57c4e0a.snap b/bin/tests/snapshots/repeated_keys__fix_2987d09ebf239c581be44d6a044ceb0290e769e15f802483ec2f796af57c4e0a.snap new file mode 100644 index 0000000..398935d --- /dev/null +++ b/bin/tests/snapshots/repeated_keys__fix_2987d09ebf239c581be44d6a044ceb0290e769e15f802483ec2f796af57c4e0a.snap @@ -0,0 +1,5 @@ +--- +source: bin/tests/repeated_keys.rs +expression: "\"{ foo.bar = 1; }\"" +--- + diff --git a/bin/tests/snapshots/repeated_keys__fix_653aae0c9fb8b448e30e62c7daa38519eded4ba2078838f788b3e769db564123.snap b/bin/tests/snapshots/repeated_keys__fix_653aae0c9fb8b448e30e62c7daa38519eded4ba2078838f788b3e769db564123.snap new file mode 100644 index 0000000..22e3cd9 --- /dev/null +++ b/bin/tests/snapshots/repeated_keys__fix_653aae0c9fb8b448e30e62c7daa38519eded4ba2078838f788b3e769db564123.snap @@ -0,0 +1,5 @@ +--- +source: bin/tests/repeated_keys.rs +expression: "\"{\\n foo.baz.bar1 = 1;\\n foo.baz.bar2 = 2;\\n foo.baz.bar3 = 3;\\n foo.baz.bar4 = 4;\\n foo.baz.bar5 = 5;\\n}\\n\"" +--- + diff --git a/bin/tests/snapshots/repeated_keys__fix_7928b443d258628d0f648fe2e30278f84cbe97274683df67fd436584732d7b2c.snap b/bin/tests/snapshots/repeated_keys__fix_7928b443d258628d0f648fe2e30278f84cbe97274683df67fd436584732d7b2c.snap new file mode 100644 index 0000000..6a08ccd --- /dev/null +++ b/bin/tests/snapshots/repeated_keys__fix_7928b443d258628d0f648fe2e30278f84cbe97274683df67fd436584732d7b2c.snap @@ -0,0 +1,5 @@ +--- +source: bin/tests/repeated_keys.rs +expression: "\"rec {\\n foo.x = foo.y;\\n foo.y = 2;\\n foo.z = 3;\\n}\\n\"" +--- + diff --git a/bin/tests/snapshots/repeated_keys__lint_107c49dd2c0b84878c81852acfd4aee37038d8367b6bc7f5b43ce051c24908e5.snap b/bin/tests/snapshots/repeated_keys__lint_107c49dd2c0b84878c81852acfd4aee37038d8367b6bc7f5b43ce051c24908e5.snap new file mode 100644 index 0000000..b396762 --- /dev/null +++ b/bin/tests/snapshots/repeated_keys__lint_107c49dd2c0b84878c81852acfd4aee37038d8367b6bc7f5b43ce051c24908e5.snap @@ -0,0 +1,17 @@ +--- +source: bin/tests/repeated_keys.rs +expression: "\"{\\n foo.bar = 1;\\n foo.bar.\\\"hello\\\" = 1;\\n foo.again = 1;\\n}\\n\"" +--- +[W20] Warning: Avoid repeated keys in attribute sets + ╭─[:2:3] + │ + 2 │ foo.bar = 1; + · ───┬─── + · ╰───── The key foo is first assigned here ... + 3 │ foo.bar."hello" = 1; + · ───────┬─────── + · ╰───────── ... repeated here ... + 4 │ foo.again = 1; + · ────┬──── + · ╰────── ... and here. Try foo = { bar=...; bar."hello"=...; again=...; } instead. +───╯ diff --git a/bin/tests/snapshots/repeated_keys__lint_2987d09ebf239c581be44d6a044ceb0290e769e15f802483ec2f796af57c4e0a.snap b/bin/tests/snapshots/repeated_keys__lint_2987d09ebf239c581be44d6a044ceb0290e769e15f802483ec2f796af57c4e0a.snap new file mode 100644 index 0000000..398935d --- /dev/null +++ b/bin/tests/snapshots/repeated_keys__lint_2987d09ebf239c581be44d6a044ceb0290e769e15f802483ec2f796af57c4e0a.snap @@ -0,0 +1,5 @@ +--- +source: bin/tests/repeated_keys.rs +expression: "\"{ foo.bar = 1; }\"" +--- + diff --git a/bin/tests/snapshots/repeated_keys__lint_653aae0c9fb8b448e30e62c7daa38519eded4ba2078838f788b3e769db564123.snap b/bin/tests/snapshots/repeated_keys__lint_653aae0c9fb8b448e30e62c7daa38519eded4ba2078838f788b3e769db564123.snap new file mode 100644 index 0000000..81f395b --- /dev/null +++ b/bin/tests/snapshots/repeated_keys__lint_653aae0c9fb8b448e30e62c7daa38519eded4ba2078838f788b3e769db564123.snap @@ -0,0 +1,17 @@ +--- +source: bin/tests/repeated_keys.rs +expression: "\"{\\n foo.baz.bar1 = 1;\\n foo.baz.bar2 = 2;\\n foo.baz.bar3 = 3;\\n foo.baz.bar4 = 4;\\n foo.baz.bar5 = 5;\\n}\\n\"" +--- +[W20] Warning: Avoid repeated keys in attribute sets + ╭─[:2:3] + │ + 2 │ foo.baz.bar1 = 1; + · ──────┬───── + · ╰─────── The key foo is first assigned here ... + 3 │ foo.baz.bar2 = 2; + · ──────┬───── + · ╰─────── ... repeated here ... + 4 │ foo.baz.bar3 = 3; + · ──────┬───── + · ╰─────── ... and here (2 occurrences omitted). Try foo = { baz.bar1=...; baz.bar2=...; baz.bar3=...; } instead. +───╯ diff --git a/bin/tests/snapshots/repeated_keys__lint_7928b443d258628d0f648fe2e30278f84cbe97274683df67fd436584732d7b2c.snap b/bin/tests/snapshots/repeated_keys__lint_7928b443d258628d0f648fe2e30278f84cbe97274683df67fd436584732d7b2c.snap new file mode 100644 index 0000000..6a08ccd --- /dev/null +++ b/bin/tests/snapshots/repeated_keys__lint_7928b443d258628d0f648fe2e30278f84cbe97274683df67fd436584732d7b2c.snap @@ -0,0 +1,5 @@ +--- +source: bin/tests/repeated_keys.rs +expression: "\"rec {\\n foo.x = foo.y;\\n foo.y = 2;\\n foo.z = 3;\\n}\\n\"" +--- +