diff options
author | Akshay <[email protected]> | 2021-11-03 09:18:35 +0000 |
---|---|---|
committer | Akshay <[email protected]> | 2021-11-08 05:03:13 +0000 |
commit | 4e063b2abc402ac4d6902647e821978269025c7d (patch) | |
tree | a8935a5432fe86d0e5facb9ff8acc71edcb7f782 /bin | |
parent | 78decf580d22fa792c19c40ace39762fb027067c (diff) |
add snapshot test suitesnapshot-tests
Diffstat (limited to 'bin')
31 files changed, 489 insertions, 20 deletions
diff --git a/bin/Cargo.toml b/bin/Cargo.toml index d67e6c1..7c48083 100644 --- a/bin/Cargo.toml +++ b/bin/Cargo.toml | |||
@@ -6,7 +6,13 @@ license = "MIT" | |||
6 | authors = [ "Akshay <[email protected]>" ] | 6 | authors = [ "Akshay <[email protected]>" ] |
7 | description = "Lints and suggestions for the Nix programming language" | 7 | description = "Lints and suggestions for the Nix programming language" |
8 | 8 | ||
9 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html | 9 | [lib] |
10 | name = "statix" | ||
11 | path = "src/lib.rs" | ||
12 | |||
13 | [[bin]] | ||
14 | name = "statix" | ||
15 | path = "src/main.rs" | ||
10 | 16 | ||
11 | [dependencies] | 17 | [dependencies] |
12 | ariadne = "0.1.3" | 18 | ariadne = "0.1.3" |
@@ -27,5 +33,9 @@ version = "1.0.68" | |||
27 | features = [ "derive" ] | 33 | features = [ "derive" ] |
28 | optional = true | 34 | optional = true |
29 | 35 | ||
36 | [dev-dependencies] | ||
37 | insta = "1.8.0" | ||
38 | strip-ansi-escapes = "0.1.1" | ||
39 | |||
30 | [features] | 40 | [features] |
31 | json = [ "lib/json-out", "serde_json", "serde" ] | 41 | json = [ "lib/json-out", "serde_json", "serde" ] |
diff --git a/bin/src/config.rs b/bin/src/config.rs index 25c2a7f..d3944ac 100644 --- a/bin/src/config.rs +++ b/bin/src/config.rs | |||
@@ -2,17 +2,17 @@ use std::{default::Default, fmt, fs, path::PathBuf, str::FromStr}; | |||
2 | 2 | ||
3 | use crate::{dirs, err::ConfigErr}; | 3 | use crate::{dirs, err::ConfigErr}; |
4 | 4 | ||
5 | use clap::Clap; | 5 | use clap::Parser; |
6 | use vfs::ReadOnlyVfs; | 6 | use vfs::ReadOnlyVfs; |
7 | 7 | ||
8 | #[derive(Clap, Debug)] | 8 | #[derive(Parser, Debug)] |
9 | #[clap(version, author, about)] | 9 | #[clap(version, author, about)] |
10 | pub struct Opts { | 10 | pub struct Opts { |
11 | #[clap(subcommand)] | 11 | #[clap(subcommand)] |
12 | pub cmd: SubCommand, | 12 | pub cmd: SubCommand, |
13 | } | 13 | } |
14 | 14 | ||
15 | #[derive(Clap, Debug)] | 15 | #[derive(Parser, Debug)] |
16 | pub enum SubCommand { | 16 | pub enum SubCommand { |
17 | /// Lints and suggestions for the nix programming language | 17 | /// Lints and suggestions for the nix programming language |
18 | Check(Check), | 18 | Check(Check), |
@@ -24,7 +24,7 @@ pub enum SubCommand { | |||
24 | Explain(Explain), | 24 | Explain(Explain), |
25 | } | 25 | } |
26 | 26 | ||
27 | #[derive(Clap, Debug)] | 27 | #[derive(Parser, Debug)] |
28 | pub struct Check { | 28 | pub struct Check { |
29 | /// File or directory to run check on | 29 | /// File or directory to run check on |
30 | #[clap(default_value = ".", parse(from_os_str))] | 30 | #[clap(default_value = ".", parse(from_os_str))] |
@@ -67,7 +67,7 @@ impl Check { | |||
67 | } | 67 | } |
68 | } | 68 | } |
69 | 69 | ||
70 | #[derive(Clap, Debug)] | 70 | #[derive(Parser, Debug)] |
71 | pub struct Fix { | 71 | pub struct Fix { |
72 | /// File or directory to run fix on | 72 | /// File or directory to run fix on |
73 | #[clap(default_value = ".", parse(from_os_str))] | 73 | #[clap(default_value = ".", parse(from_os_str))] |
@@ -127,7 +127,7 @@ impl Fix { | |||
127 | } | 127 | } |
128 | } | 128 | } |
129 | 129 | ||
130 | #[derive(Clap, Debug)] | 130 | #[derive(Parser, Debug)] |
131 | pub struct Single { | 131 | pub struct Single { |
132 | /// File to run single-fix on | 132 | /// File to run single-fix on |
133 | #[clap(parse(from_os_str))] | 133 | #[clap(parse(from_os_str))] |
@@ -174,7 +174,7 @@ impl Single { | |||
174 | } | 174 | } |
175 | } | 175 | } |
176 | 176 | ||
177 | #[derive(Clap, Debug)] | 177 | #[derive(Parser, Debug)] |
178 | pub struct Explain { | 178 | pub struct Explain { |
179 | /// Warning code to explain | 179 | /// Warning code to explain |
180 | #[clap(parse(try_from_str = parse_warning_code))] | 180 | #[clap(parse(try_from_str = parse_warning_code))] |
diff --git a/bin/src/lib.rs b/bin/src/lib.rs new file mode 100644 index 0000000..49c1a41 --- /dev/null +++ b/bin/src/lib.rs | |||
@@ -0,0 +1,7 @@ | |||
1 | pub mod config; | ||
2 | pub mod dirs; | ||
3 | pub mod err; | ||
4 | pub mod explain; | ||
5 | pub mod fix; | ||
6 | pub mod lint; | ||
7 | pub mod traits; | ||
diff --git a/bin/src/main.rs b/bin/src/main.rs index fabc509..f504796 100644 --- a/bin/src/main.rs +++ b/bin/src/main.rs | |||
@@ -1,15 +1,9 @@ | |||
1 | mod config; | 1 | use clap::Parser; |
2 | mod dirs; | 2 | use statix::{ |
3 | mod err; | 3 | config::{Opts, SubCommand}, |
4 | mod explain; | 4 | err::StatixErr, |
5 | mod fix; | 5 | explain, fix, lint, |
6 | mod lint; | 6 | }; |
7 | mod traits; | ||
8 | |||
9 | use crate::err::StatixErr; | ||
10 | |||
11 | use clap::Clap; | ||
12 | use config::{Opts, SubCommand}; | ||
13 | 7 | ||
14 | fn _main() -> Result<(), StatixErr> { | 8 | fn _main() -> Result<(), StatixErr> { |
15 | let opts = Opts::parse(); | 9 | let opts = Opts::parse(); |
diff --git a/bin/tests/data/bool_comparison.nix b/bin/tests/data/bool_comparison.nix new file mode 100644 index 0000000..dee2d08 --- /dev/null +++ b/bin/tests/data/bool_comparison.nix | |||
@@ -0,0 +1,13 @@ | |||
1 | [ | ||
2 | # trivial | ||
3 | (a == true) | ||
4 | (b == true) | ||
5 | (true == c) | ||
6 | (true == d) | ||
7 | |||
8 | # not equals | ||
9 | (e != true) | ||
10 | (f != false) | ||
11 | (true != g) | ||
12 | (false != h) | ||
13 | ] | ||
diff --git a/bin/tests/data/collapsible_let_in.nix b/bin/tests/data/collapsible_let_in.nix new file mode 100644 index 0000000..7b41014 --- /dev/null +++ b/bin/tests/data/collapsible_let_in.nix | |||
@@ -0,0 +1,9 @@ | |||
1 | let | ||
2 | a = 2; | ||
3 | b = 3; | ||
4 | in | ||
5 | let | ||
6 | c = 5; | ||
7 | d = 6; | ||
8 | in | ||
9 | a + b + c + d | ||
diff --git a/bin/tests/data/deprecated_is_null.nix b/bin/tests/data/deprecated_is_null.nix new file mode 100644 index 0000000..42596d7 --- /dev/null +++ b/bin/tests/data/deprecated_is_null.nix | |||
@@ -0,0 +1,6 @@ | |||
1 | let | ||
2 | e = null; | ||
3 | in | ||
4 | if isNull e | ||
5 | then "no" | ||
6 | else "yes" | ||
diff --git a/bin/tests/data/empty_let_in.nix b/bin/tests/data/empty_let_in.nix new file mode 100644 index 0000000..3ecb6e4 --- /dev/null +++ b/bin/tests/data/empty_let_in.nix | |||
@@ -0,0 +1,3 @@ | |||
1 | let | ||
2 | in | ||
3 | null | ||
diff --git a/bin/tests/data/empty_pattern.nix b/bin/tests/data/empty_pattern.nix new file mode 100644 index 0000000..23d99e8 --- /dev/null +++ b/bin/tests/data/empty_pattern.nix | |||
@@ -0,0 +1,9 @@ | |||
1 | [ | ||
2 | # match | ||
3 | ({ ... }: 42) | ||
4 | |||
5 | # don't match | ||
6 | ({ a, ... }: a) | ||
7 | ({ ... } @ inputs: inputs) | ||
8 | ] | ||
9 | |||
diff --git a/bin/tests/data/eta_reduction.nix b/bin/tests/data/eta_reduction.nix new file mode 100644 index 0000000..e717ee7 --- /dev/null +++ b/bin/tests/data/eta_reduction.nix | |||
@@ -0,0 +1,18 @@ | |||
1 | let | ||
2 | double = x: x * 2; | ||
3 | inherit (builtins) map; | ||
4 | xs = [ 1 2 3 ]; | ||
5 | f = { | ||
6 | inherit double; | ||
7 | val = 2; | ||
8 | }; | ||
9 | in | ||
10 | [ | ||
11 | (map (x: double x) xs) | ||
12 | |||
13 | # don't lint on non-free exprs | ||
14 | (map (f: f.double f.val) [ f ]) | ||
15 | |||
16 | # other non-free forms | ||
17 | (map (f: {inherit f;}.double f.val) [ f ]) | ||
18 | ] | ||
diff --git a/bin/tests/data/legacy_let_syntax.nix b/bin/tests/data/legacy_let_syntax.nix new file mode 100644 index 0000000..46e3191 --- /dev/null +++ b/bin/tests/data/legacy_let_syntax.nix | |||
@@ -0,0 +1,5 @@ | |||
1 | let { | ||
2 | body = x + y; | ||
3 | x = "hello,"; | ||
4 | y = " world!"; | ||
5 | } | ||
diff --git a/bin/tests/data/manual_inherit.nix b/bin/tests/data/manual_inherit.nix new file mode 100644 index 0000000..53ae4d7 --- /dev/null +++ b/bin/tests/data/manual_inherit.nix | |||
@@ -0,0 +1,12 @@ | |||
1 | let | ||
2 | a = 2; | ||
3 | y = "y"; | ||
4 | in | ||
5 | { | ||
6 | # trivial | ||
7 | a = a; | ||
8 | |||
9 | # don't lint | ||
10 | x.y = y; | ||
11 | } | ||
12 | |||
diff --git a/bin/tests/data/manual_inherit_from.nix b/bin/tests/data/manual_inherit_from.nix new file mode 100644 index 0000000..214b2a3 --- /dev/null +++ b/bin/tests/data/manual_inherit_from.nix | |||
@@ -0,0 +1,8 @@ | |||
1 | let | ||
2 | a = {b = 2; c = 3;}; | ||
3 | in | ||
4 | { | ||
5 | b = a.b; | ||
6 | c = a.c; | ||
7 | } | ||
8 | |||
diff --git a/bin/tests/data/redundant_pattern_bind.nix b/bin/tests/data/redundant_pattern_bind.nix new file mode 100644 index 0000000..d328c50 --- /dev/null +++ b/bin/tests/data/redundant_pattern_bind.nix | |||
@@ -0,0 +1 @@ | |||
{ ... } @ inputs: null | |||
diff --git a/bin/tests/data/unquoted_splices.nix b/bin/tests/data/unquoted_splices.nix new file mode 100644 index 0000000..30935b0 --- /dev/null +++ b/bin/tests/data/unquoted_splices.nix | |||
@@ -0,0 +1,15 @@ | |||
1 | let | ||
2 | x = 2; | ||
3 | y = 3; | ||
4 | a = { "2" = y; }; | ||
5 | in | ||
6 | [ | ||
7 | ${x} | ||
8 | ${toString (x + y)} | ||
9 | a.${toString x} | ||
10 | |||
11 | # multiline test | ||
12 | ${ | ||
13 | toString x | ||
14 | } | ||
15 | ] | ||
diff --git a/bin/tests/data/unquoted_uri.nix b/bin/tests/data/unquoted_uri.nix new file mode 100644 index 0000000..e56574a --- /dev/null +++ b/bin/tests/data/unquoted_uri.nix | |||
@@ -0,0 +1 @@ | |||
github:nerdypepper/statix | |||
diff --git a/bin/tests/data/useless_parens.nix b/bin/tests/data/useless_parens.nix new file mode 100644 index 0000000..cf26441 --- /dev/null +++ b/bin/tests/data/useless_parens.nix | |||
@@ -0,0 +1,16 @@ | |||
1 | let | ||
2 | # parens around primitives | ||
3 | a = { | ||
4 | b = ("hello"); | ||
5 | c = (d); | ||
6 | e = ({ f = 2; }); | ||
7 | }; | ||
8 | |||
9 | # parens around let-value | ||
10 | g = (1 + 2); | ||
11 | h = ({ inherit i; }); | ||
12 | |||
13 | # TODO: binary exprs, function args etc. | ||
14 | in | ||
15 | # parens around let body | ||
16 | (null) | ||
diff --git a/bin/tests/main.rs b/bin/tests/main.rs new file mode 100644 index 0000000..6175c90 --- /dev/null +++ b/bin/tests/main.rs | |||
@@ -0,0 +1,47 @@ | |||
1 | mod util { | ||
2 | #[macro_export] | ||
3 | macro_rules! test_lint { | ||
4 | ($($tname:ident),*,) => { | ||
5 | test_lint!($($tname),*); | ||
6 | }; | ||
7 | ($($tname:ident),*) => { | ||
8 | $( | ||
9 | #[test] | ||
10 | fn $tname() { | ||
11 | use statix::{config::OutFormat, traits::WriteDiagnostic, lint}; | ||
12 | use vfs::ReadOnlyVfs; | ||
13 | |||
14 | let file_path = concat!("data/", stringify!($tname), ".nix"); | ||
15 | let contents = include_str!(concat!("data/", stringify!($tname), ".nix")); | ||
16 | |||
17 | let vfs = ReadOnlyVfs::singleton(file_path, contents.as_bytes()); | ||
18 | |||
19 | let mut buffer = Vec::new(); | ||
20 | vfs.iter().map(lint::lint).for_each(|r| { | ||
21 | buffer.write(&r, &vfs, OutFormat::StdErr).unwrap(); | ||
22 | }); | ||
23 | |||
24 | let stripped = strip_ansi_escapes::strip(&buffer).unwrap(); | ||
25 | let out = std::str::from_utf8(&stripped).unwrap(); | ||
26 | insta::assert_snapshot!(&out); | ||
27 | } | ||
28 | )* | ||
29 | }; | ||
30 | } | ||
31 | } | ||
32 | |||
33 | test_lint! { | ||
34 | bool_comparison, | ||
35 | empty_let_in, | ||
36 | manual_inherit, | ||
37 | manual_inherit_from, | ||
38 | legacy_let_syntax, | ||
39 | collapsible_let_in, | ||
40 | eta_reduction, | ||
41 | useless_parens, | ||
42 | unquoted_splices, | ||
43 | empty_pattern, | ||
44 | redundant_pattern_bind, | ||
45 | unquoted_uri, | ||
46 | deprecated_is_null, | ||
47 | } | ||
diff --git a/bin/tests/snapshots/main__bool_comparison.snap b/bin/tests/snapshots/main__bool_comparison.snap new file mode 100644 index 0000000..0865332 --- /dev/null +++ b/bin/tests/snapshots/main__bool_comparison.snap | |||
@@ -0,0 +1,62 @@ | |||
1 | --- | ||
2 | source: bin/tests/main.rs | ||
3 | expression: "&out" | ||
4 | |||
5 | --- | ||
6 | [W01] Warning: Unnecessary comparison with boolean | ||
7 | ╭─[data/bool_comparison.nix:3:4] | ||
8 | │ | ||
9 | 3 │ (a == true) | ||
10 | · ────┬──── | ||
11 | · ╰────── Comparing a with boolean literal true | ||
12 | ───╯ | ||
13 | [W01] Warning: Unnecessary comparison with boolean | ||
14 | ╭─[data/bool_comparison.nix:4:4] | ||
15 | │ | ||
16 | 4 │ (b == true) | ||
17 | · ────┬──── | ||
18 | · ╰────── Comparing b with boolean literal true | ||
19 | ───╯ | ||
20 | [W01] Warning: Unnecessary comparison with boolean | ||
21 | ╭─[data/bool_comparison.nix:5:4] | ||
22 | │ | ||
23 | 5 │ (true == c) | ||
24 | · ────┬──── | ||
25 | · ╰────── Comparing c with boolean literal true | ||
26 | ───╯ | ||
27 | [W01] Warning: Unnecessary comparison with boolean | ||
28 | ╭─[data/bool_comparison.nix:6:4] | ||
29 | │ | ||
30 | 6 │ (true == d) | ||
31 | · ────┬──── | ||
32 | · ╰────── Comparing d with boolean literal true | ||
33 | ───╯ | ||
34 | [W01] Warning: Unnecessary comparison with boolean | ||
35 | ╭─[data/bool_comparison.nix:9:4] | ||
36 | │ | ||
37 | 9 │ (e != true) | ||
38 | · ────┬──── | ||
39 | · ╰────── Comparing e with boolean literal true | ||
40 | ───╯ | ||
41 | [W01] Warning: Unnecessary comparison with boolean | ||
42 | ╭─[data/bool_comparison.nix:10:4] | ||
43 | │ | ||
44 | 10 │ (f != false) | ||
45 | · ─────┬──── | ||
46 | · ╰────── Comparing f with boolean literal false | ||
47 | ────╯ | ||
48 | [W01] Warning: Unnecessary comparison with boolean | ||
49 | ╭─[data/bool_comparison.nix:11:4] | ||
50 | │ | ||
51 | 11 │ (true != g) | ||
52 | · ────┬──── | ||
53 | · ╰────── Comparing g with boolean literal true | ||
54 | ────╯ | ||
55 | [W01] Warning: Unnecessary comparison with boolean | ||
56 | ╭─[data/bool_comparison.nix:12:4] | ||
57 | │ | ||
58 | 12 │ (false != h) | ||
59 | · ─────┬──── | ||
60 | · ╰────── Comparing h with boolean literal false | ||
61 | ────╯ | ||
62 | |||
diff --git a/bin/tests/snapshots/main__collapsible_let_in.snap b/bin/tests/snapshots/main__collapsible_let_in.snap new file mode 100644 index 0000000..b135abc --- /dev/null +++ b/bin/tests/snapshots/main__collapsible_let_in.snap | |||
@@ -0,0 +1,17 @@ | |||
1 | --- | ||
2 | source: bin/tests/main.rs | ||
3 | expression: "&out" | ||
4 | |||
5 | --- | ||
6 | [W06] Warning: These let-in expressions are collapsible | ||
7 | ╭─[data/collapsible_let_in.nix:1:1] | ||
8 | │ | ||
9 | 1 │ ╭───▶ let | ||
10 | 5 │ │ ╭─▶ let | ||
11 | 9 │ │ ├─▶ a + b + c + d | ||
12 | · │ │ │ | ||
13 | · │ ╰───────────────────── This let in expression is nested | ||
14 | · │ │ | ||
15 | · ╰───────────────────┴─── This let in expression contains a nested let in expression | ||
16 | ───╯ | ||
17 | |||
diff --git a/bin/tests/snapshots/main__deprecated_is_null.snap b/bin/tests/snapshots/main__deprecated_is_null.snap new file mode 100644 index 0000000..d49b381 --- /dev/null +++ b/bin/tests/snapshots/main__deprecated_is_null.snap | |||
@@ -0,0 +1,13 @@ | |||
1 | --- | ||
2 | source: bin/tests/main.rs | ||
3 | expression: "&out" | ||
4 | |||
5 | --- | ||
6 | [W13] Warning: Found usage of deprecated builtin isNull | ||
7 | ╭─[data/deprecated_is_null.nix:4:4] | ||
8 | │ | ||
9 | 4 │ if isNull e | ||
10 | · ────┬─── | ||
11 | · ╰───── isNull is deprecated, check equality with null instead | ||
12 | ───╯ | ||
13 | |||
diff --git a/bin/tests/snapshots/main__empty_let_in.snap b/bin/tests/snapshots/main__empty_let_in.snap new file mode 100644 index 0000000..426692f --- /dev/null +++ b/bin/tests/snapshots/main__empty_let_in.snap | |||
@@ -0,0 +1,14 @@ | |||
1 | --- | ||
2 | source: bin/tests/main.rs | ||
3 | expression: "&out" | ||
4 | |||
5 | --- | ||
6 | [W02] Warning: Useless let-in expression | ||
7 | ╭─[data/empty_let_in.nix:1:1] | ||
8 | │ | ||
9 | 1 │ ╭─▶ let | ||
10 | 3 │ ├─▶ null | ||
11 | · │ | ||
12 | · ╰──────────── This let-in expression has no entries | ||
13 | ───╯ | ||
14 | |||
diff --git a/bin/tests/snapshots/main__empty_pattern.snap b/bin/tests/snapshots/main__empty_pattern.snap new file mode 100644 index 0000000..3ea7ae0 --- /dev/null +++ b/bin/tests/snapshots/main__empty_pattern.snap | |||
@@ -0,0 +1,20 @@ | |||
1 | --- | ||
2 | source: bin/tests/main.rs | ||
3 | expression: "&out" | ||
4 | |||
5 | --- | ||
6 | [W10] Warning: Found empty pattern in function argument | ||
7 | ╭─[data/empty_pattern.nix:3:4] | ||
8 | │ | ||
9 | 3 │ ({ ... }: 42) | ||
10 | · ───┬─── | ||
11 | · ╰───── This pattern is empty, use _ instead | ||
12 | ───╯ | ||
13 | [W11] Warning: Found redundant pattern bind in function argument | ||
14 | ╭─[data/empty_pattern.nix:7:4] | ||
15 | │ | ||
16 | 7 │ ({ ... } @ inputs: inputs) | ||
17 | · ────────┬─────── | ||
18 | · ╰───────── This pattern bind is redundant, use inputs instead | ||
19 | ───╯ | ||
20 | |||
diff --git a/bin/tests/snapshots/main__eta_reduction.snap b/bin/tests/snapshots/main__eta_reduction.snap new file mode 100644 index 0000000..6271980 --- /dev/null +++ b/bin/tests/snapshots/main__eta_reduction.snap | |||
@@ -0,0 +1,13 @@ | |||
1 | --- | ||
2 | source: bin/tests/main.rs | ||
3 | expression: "&out" | ||
4 | |||
5 | --- | ||
6 | [W07] Warning: This function expression is eta reducible | ||
7 | ╭─[data/eta_reduction.nix:11:9] | ||
8 | │ | ||
9 | 11 │ (map (x: double x) xs) | ||
10 | · ─────┬───── | ||
11 | · ╰─────── Found eta-reduction: double | ||
12 | ────╯ | ||
13 | |||
diff --git a/bin/tests/snapshots/main__legacy_let_syntax.snap b/bin/tests/snapshots/main__legacy_let_syntax.snap new file mode 100644 index 0000000..35aa7ee --- /dev/null +++ b/bin/tests/snapshots/main__legacy_let_syntax.snap | |||
@@ -0,0 +1,14 @@ | |||
1 | --- | ||
2 | source: bin/tests/main.rs | ||
3 | expression: "&out" | ||
4 | |||
5 | --- | ||
6 | [W05] Warning: Using undocumented `let` syntax | ||
7 | ╭─[data/legacy_let_syntax.nix:1:1] | ||
8 | │ | ||
9 | 1 │ ╭─▶ let { | ||
10 | 5 │ ├─▶ } | ||
11 | · │ | ||
12 | · ╰─────── Prefer rec over undocumented let syntax | ||
13 | ───╯ | ||
14 | |||
diff --git a/bin/tests/snapshots/main__manual_inherit.snap b/bin/tests/snapshots/main__manual_inherit.snap new file mode 100644 index 0000000..063867c --- /dev/null +++ b/bin/tests/snapshots/main__manual_inherit.snap | |||
@@ -0,0 +1,13 @@ | |||
1 | --- | ||
2 | source: bin/tests/main.rs | ||
3 | expression: "&out" | ||
4 | |||
5 | --- | ||
6 | [W03] Warning: Assignment instead of inherit | ||
7 | ╭─[data/manual_inherit.nix:7:3] | ||
8 | │ | ||
9 | 7 │ a = a; | ||
10 | · ───┬── | ||
11 | · ╰──── This assignment is better written with inherit | ||
12 | ───╯ | ||
13 | |||
diff --git a/bin/tests/snapshots/main__manual_inherit_from.snap b/bin/tests/snapshots/main__manual_inherit_from.snap new file mode 100644 index 0000000..9cf1f5d --- /dev/null +++ b/bin/tests/snapshots/main__manual_inherit_from.snap | |||
@@ -0,0 +1,20 @@ | |||
1 | --- | ||
2 | source: bin/tests/main.rs | ||
3 | expression: "&out" | ||
4 | |||
5 | --- | ||
6 | [W04] Warning: Assignment instead of inherit from | ||
7 | ╭─[data/manual_inherit_from.nix:5:3] | ||
8 | │ | ||
9 | 5 │ b = a.b; | ||
10 | · ────┬─── | ||
11 | · ╰───── This assignment is better written with inherit | ||
12 | ───╯ | ||
13 | [W04] Warning: Assignment instead of inherit from | ||
14 | ╭─[data/manual_inherit_from.nix:6:3] | ||
15 | │ | ||
16 | 6 │ c = a.c; | ||
17 | · ────┬─── | ||
18 | · ╰───── This assignment is better written with inherit | ||
19 | ───╯ | ||
20 | |||
diff --git a/bin/tests/snapshots/main__redundant_pattern_bind.snap b/bin/tests/snapshots/main__redundant_pattern_bind.snap new file mode 100644 index 0000000..2f26818 --- /dev/null +++ b/bin/tests/snapshots/main__redundant_pattern_bind.snap | |||
@@ -0,0 +1,13 @@ | |||
1 | --- | ||
2 | source: bin/tests/main.rs | ||
3 | expression: "&out" | ||
4 | |||
5 | --- | ||
6 | [W11] Warning: Found redundant pattern bind in function argument | ||
7 | ╭─[data/redundant_pattern_bind.nix:1:1] | ||
8 | │ | ||
9 | 1 │ { ... } @ inputs: null | ||
10 | · ────────┬──────── | ||
11 | · ╰────────── This pattern bind is redundant, use inputs instead | ||
12 | ───╯ | ||
13 | |||
diff --git a/bin/tests/snapshots/main__unquoted_splices.snap b/bin/tests/snapshots/main__unquoted_splices.snap new file mode 100644 index 0000000..5fd1917 --- /dev/null +++ b/bin/tests/snapshots/main__unquoted_splices.snap | |||
@@ -0,0 +1,35 @@ | |||
1 | --- | ||
2 | source: bin/tests/main.rs | ||
3 | expression: "&out" | ||
4 | |||
5 | --- | ||
6 | [W09] Warning: Found unquoted splice expression | ||
7 | ╭─[data/unquoted_splices.nix:7:3] | ||
8 | │ | ||
9 | 7 │ ${x} | ||
10 | · ──┬─ | ||
11 | · ╰─── Consider quoting this splice expression | ||
12 | ───╯ | ||
13 | [W09] Warning: Found unquoted splice expression | ||
14 | ╭─[data/unquoted_splices.nix:8:3] | ||
15 | │ | ||
16 | 8 │ ${toString (x + y)} | ||
17 | · ─────────┬───────── | ||
18 | · ╰─────────── Consider quoting this splice expression | ||
19 | ───╯ | ||
20 | [W09] Warning: Found unquoted splice expression | ||
21 | ╭─[data/unquoted_splices.nix:9:5] | ||
22 | │ | ||
23 | 9 │ a.${toString x} | ||
24 | · ──────┬────── | ||
25 | · ╰──────── Consider quoting this splice expression | ||
26 | ───╯ | ||
27 | [W09] Warning: Found unquoted splice expression | ||
28 | ╭─[data/unquoted_splices.nix:12:3] | ||
29 | │ | ||
30 | 12 │ ╭─▶ ${ | ||
31 | 14 │ ├─▶ } | ||
32 | · │ | ||
33 | · ╰───────── Consider quoting this splice expression | ||
34 | ────╯ | ||
35 | |||
diff --git a/bin/tests/snapshots/main__unquoted_uri.snap b/bin/tests/snapshots/main__unquoted_uri.snap new file mode 100644 index 0000000..2f0e5a9 --- /dev/null +++ b/bin/tests/snapshots/main__unquoted_uri.snap | |||
@@ -0,0 +1,13 @@ | |||
1 | --- | ||
2 | source: bin/tests/main.rs | ||
3 | expression: "&out" | ||
4 | |||
5 | --- | ||
6 | [W12] Warning: Found unquoted URI expression | ||
7 | ╭─[data/unquoted_uri.nix:1:1] | ||
8 | │ | ||
9 | 1 │ github:nerdypepper/statix | ||
10 | · ────────────┬──────────── | ||
11 | · ╰────────────── Consider quoting this URI expression | ||
12 | ───╯ | ||
13 | |||
diff --git a/bin/tests/snapshots/main__useless_parens.snap b/bin/tests/snapshots/main__useless_parens.snap new file mode 100644 index 0000000..d44176e --- /dev/null +++ b/bin/tests/snapshots/main__useless_parens.snap | |||
@@ -0,0 +1,48 @@ | |||
1 | --- | ||
2 | source: bin/tests/main.rs | ||
3 | expression: "&out" | ||
4 | |||
5 | --- | ||
6 | [W08] Warning: These parentheses can be omitted | ||
7 | ╭─[data/useless_parens.nix:16:3] | ||
8 | │ | ||
9 | 16 │ (null) | ||
10 | · ───┬── | ||
11 | · ╰──── Useless parentheses around body of let expression | ||
12 | ────╯ | ||
13 | [W08] Warning: These parentheses can be omitted | ||
14 | ╭─[data/useless_parens.nix:4:9] | ||
15 | │ | ||
16 | 4 │ b = ("hello"); | ||
17 | · ────┬──── | ||
18 | · ╰────── Useless parentheses around value in binding | ||
19 | ───╯ | ||
20 | [W08] Warning: These parentheses can be omitted | ||
21 | ╭─[data/useless_parens.nix:5:9] | ||
22 | │ | ||
23 | 5 │ c = (d); | ||
24 | · ─┬─ | ||
25 | · ╰─── Useless parentheses around value in binding | ||
26 | ───╯ | ||
27 | [W08] Warning: These parentheses can be omitted | ||
28 | ╭─[data/useless_parens.nix:6:9] | ||
29 | │ | ||
30 | 6 │ e = ({ f = 2; }); | ||
31 | · ──────┬───── | ||
32 | · ╰─────── Useless parentheses around value in binding | ||
33 | ───╯ | ||
34 | [W08] Warning: These parentheses can be omitted | ||
35 | ╭─[data/useless_parens.nix:10:7] | ||
36 | │ | ||
37 | 10 │ g = (1 + 2); | ||
38 | · ───┬─── | ||
39 | · ╰───── Useless parentheses around value in binding | ||
40 | ────╯ | ||
41 | [W08] Warning: These parentheses can be omitted | ||
42 | ╭─[data/useless_parens.nix:11:7] | ||
43 | │ | ||
44 | 11 │ h = ({ inherit i; }); | ||
45 | · ────────┬─────── | ||
46 | · ╰───────── Useless parentheses around value in binding | ||
47 | ────╯ | ||
48 | |||