Skip to content

Commit 0aa56e5

Browse files
authored
linter: use annotate-snippets for lint error tests (#752)
1 parent e01c2b0 commit 0aa56e5

File tree

105 files changed

+1501
-2573
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

105 files changed

+1501
-2573
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/squawk_linter/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ insta.workspace = true
2020
enum-iterator.workspace = true
2121
line-index.workspace = true
2222
serde_plain.workspace = true
23+
annotate-snippets.workspace = true
2324

2425

2526
[lints]

crates/squawk_linter/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,7 @@ impl Linter {
469469
errors: vec![],
470470
ignores: vec![],
471471
rules: rules.into(),
472-
settings: LinterSettings::default(),
472+
settings: Default::default(),
473473
}
474474
}
475475
}

crates/squawk_linter/src/rules/adding_field_with_default.rs

Lines changed: 31 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -123,10 +123,14 @@ pub(crate) fn adding_field_with_default(ctx: &mut Linter, parse: &Parse<SourceFi
123123

124124
#[cfg(test)]
125125
mod test {
126-
use insta::assert_debug_snapshot;
126+
use insta::assert_snapshot;
127127

128-
use crate::Rule;
129-
use crate::test_utils::{lint, lint_with_postgres_version};
128+
use crate::test_utils::{lint_errors, lint_ok};
129+
use crate::{LinterSettings, Rule};
130+
131+
fn lint_errors_with(sql: &str, settings: LinterSettings) -> String {
132+
crate::test_utils::lint_errors_with(sql, settings, Rule::AddingFieldWithDefault)
133+
}
130134

131135
#[test]
132136
fn docs_example_ok_post_pg_11() {
@@ -135,9 +139,7 @@ mod test {
135139
ALTER TABLE "core_recipe" ADD COLUMN "foo" integer DEFAULT 10;
136140
"#;
137141

138-
let errors = lint(sql, Rule::AddingFieldWithDefault);
139-
assert!(errors.is_empty());
140-
assert_debug_snapshot!(errors);
142+
lint_ok(sql, Rule::AddingFieldWithDefault);
141143
}
142144

143145
#[test]
@@ -150,9 +152,7 @@ ALTER TABLE "core_recipe" ALTER COLUMN "foo" SET DEFAULT 10;
150152
-- remove nullability
151153
"#;
152154

153-
let errors = lint(sql, Rule::AddingFieldWithDefault);
154-
assert!(errors.is_empty());
155-
assert_debug_snapshot!(errors);
155+
lint_ok(sql, Rule::AddingFieldWithDefault);
156156
}
157157

158158
#[test]
@@ -161,9 +161,7 @@ ALTER TABLE "core_recipe" ALTER COLUMN "foo" SET DEFAULT 10;
161161
alter table t set logged, add column c integer default uuid();
162162
"#;
163163

164-
let errors = lint(sql, Rule::AddingFieldWithDefault);
165-
assert!(!errors.is_empty());
166-
assert_debug_snapshot!(errors);
164+
assert_snapshot!(lint_errors(sql, Rule::AddingFieldWithDefault));
167165
}
168166

169167
#[test]
@@ -172,9 +170,7 @@ alter table t set logged, add column c integer default uuid();
172170
ALTER TABLE "core_recipe" ADD COLUMN "foo" integer DEFAULT uuid();
173171
"#;
174172

175-
let errors = lint(sql, Rule::AddingFieldWithDefault);
176-
assert!(!errors.is_empty());
177-
assert_debug_snapshot!(errors);
173+
assert_snapshot!(lint_errors(sql, Rule::AddingFieldWithDefault));
178174
}
179175

180176
#[test]
@@ -184,9 +180,7 @@ ALTER TABLE "core_recipe" ADD COLUMN "foo" integer DEFAULT uuid();
184180
ALTER TABLE "core_recipe" ADD COLUMN "foo" boolean DEFAULT random();
185181
"#;
186182

187-
let errors = lint(sql, Rule::AddingFieldWithDefault);
188-
assert!(!errors.is_empty());
189-
assert_debug_snapshot!(errors);
183+
assert_snapshot!(lint_errors(sql, Rule::AddingFieldWithDefault));
190184
}
191185

192186
#[test]
@@ -196,9 +190,7 @@ ALTER TABLE "core_recipe" ADD COLUMN "foo" boolean DEFAULT random();
196190
ALTER TABLE "core_recipe" ADD COLUMN "foo" boolean DEFAULT true;
197191
"#;
198192

199-
let errors = lint(sql, Rule::AddingFieldWithDefault);
200-
assert!(errors.is_empty());
201-
assert_debug_snapshot!(errors);
193+
lint_ok(sql, Rule::AddingFieldWithDefault);
202194
}
203195

204196
#[test]
@@ -211,9 +203,7 @@ alter table t add column b bigint[] default cast(array[] as bigint[]);
211203
alter table t add column c text[] default array['foo', 'bar']::text[];
212204
"#;
213205

214-
let errors = lint(sql, Rule::AddingFieldWithDefault);
215-
assert!(errors.is_empty());
216-
assert_debug_snapshot!(errors);
206+
lint_ok(sql, Rule::AddingFieldWithDefault);
217207
}
218208

219209
#[test]
@@ -223,9 +213,7 @@ ALTER TABLE assessments
223213
ADD COLUMN statistics_last_updated_at timestamptz NOT NULL DEFAULT now() - interval '100 years';
224214
"#;
225215

226-
let errors = lint(sql, Rule::AddingFieldWithDefault);
227-
assert!(errors.is_empty());
228-
assert_debug_snapshot!(errors);
216+
lint_ok(sql, Rule::AddingFieldWithDefault);
229217
}
230218

231219
#[test]
@@ -235,9 +223,7 @@ ADD COLUMN statistics_last_updated_at timestamptz NOT NULL DEFAULT now() - inter
235223
ALTER TABLE "core_recipe" ADD COLUMN "foo" text DEFAULT 'some-str';
236224
"#;
237225

238-
let errors = lint(sql, Rule::AddingFieldWithDefault);
239-
assert!(errors.is_empty());
240-
assert_debug_snapshot!(errors);
226+
lint_ok(sql, Rule::AddingFieldWithDefault);
241227
}
242228

243229
#[test]
@@ -247,9 +233,7 @@ ALTER TABLE "core_recipe" ADD COLUMN "foo" text DEFAULT 'some-str';
247233
ALTER TABLE "core_recipe" ADD COLUMN "foo" some_enum_type DEFAULT 'my-enum-variant';
248234
"#;
249235

250-
let errors = lint(sql, Rule::AddingFieldWithDefault);
251-
assert!(errors.is_empty());
252-
assert_debug_snapshot!(errors);
236+
lint_ok(sql, Rule::AddingFieldWithDefault);
253237
}
254238

255239
#[test]
@@ -259,9 +243,7 @@ ALTER TABLE "core_recipe" ADD COLUMN "foo" some_enum_type DEFAULT 'my-enum-varia
259243
ALTER TABLE "core_recipe" ADD COLUMN "foo" jsonb DEFAULT '{}'::jsonb;
260244
"#;
261245

262-
let errors = lint(sql, Rule::AddingFieldWithDefault);
263-
assert!(errors.is_empty());
264-
assert_debug_snapshot!(errors);
246+
lint_ok(sql, Rule::AddingFieldWithDefault);
265247
}
266248

267249
#[test]
@@ -271,9 +253,7 @@ ALTER TABLE "core_recipe" ADD COLUMN "foo" jsonb DEFAULT '{}'::jsonb;
271253
ALTER TABLE "core_recipe" ADD COLUMN "foo" jsonb DEFAULT myjsonb();
272254
"#;
273255

274-
let errors = lint(sql, Rule::AddingFieldWithDefault);
275-
assert!(!errors.is_empty());
276-
assert_debug_snapshot!(errors);
256+
assert_snapshot!(lint_errors(sql, Rule::AddingFieldWithDefault));
277257
}
278258

279259
#[test]
@@ -283,9 +263,7 @@ ALTER TABLE "core_recipe" ADD COLUMN "foo" jsonb DEFAULT myjsonb();
283263
ALTER TABLE "core_recipe" ADD COLUMN "foo" timestamptz DEFAULT now(123);
284264
"#;
285265

286-
let errors = lint(sql, Rule::AddingFieldWithDefault);
287-
assert!(!errors.is_empty());
288-
assert_debug_snapshot!(errors);
266+
assert_snapshot!(lint_errors(sql, Rule::AddingFieldWithDefault));
289267
}
290268

291269
#[test]
@@ -295,9 +273,7 @@ ALTER TABLE "core_recipe" ADD COLUMN "foo" timestamptz DEFAULT now(123);
295273
ALTER TABLE "core_recipe" ADD COLUMN "foo" timestamptz DEFAULT now();
296274
"#;
297275

298-
let errors = lint(sql, Rule::AddingFieldWithDefault);
299-
assert!(errors.is_empty());
300-
assert_debug_snapshot!(errors);
276+
lint_ok(sql, Rule::AddingFieldWithDefault);
301277
}
302278

303279
#[test]
@@ -306,9 +282,7 @@ ALTER TABLE "core_recipe" ADD COLUMN "foo" timestamptz DEFAULT now();
306282
alter table t add column c timestamptz default current_timestamp;
307283
"#;
308284

309-
let errors = lint(sql, Rule::AddingFieldWithDefault);
310-
assert!(errors.is_empty());
311-
assert_debug_snapshot!(errors);
285+
lint_ok(sql, Rule::AddingFieldWithDefault);
312286
}
313287

314288
#[test]
@@ -317,9 +291,7 @@ alter table t add column c timestamptz default current_timestamp;
317291
alter table account_metadata add column blah integer default 2 + 2;
318292
"#;
319293

320-
let errors = lint(sql, Rule::AddingFieldWithDefault);
321-
assert!(errors.is_empty());
322-
assert_debug_snapshot!(errors);
294+
lint_ok(sql, Rule::AddingFieldWithDefault);
323295
}
324296

325297
#[test]
@@ -329,9 +301,7 @@ ALTER TABLE foo
329301
ADD COLUMN bar numeric GENERATED ALWAYS AS (bar + baz) STORED;
330302
"#;
331303

332-
let errors = lint(sql, Rule::AddingFieldWithDefault);
333-
assert!(!errors.is_empty());
334-
assert_debug_snapshot!(errors);
304+
assert_snapshot!(lint_errors(sql, Rule::AddingFieldWithDefault));
335305
}
336306

337307
#[test]
@@ -341,8 +311,12 @@ ADD COLUMN bar numeric GENERATED ALWAYS AS (bar + baz) STORED;
341311
ALTER TABLE "core_recipe" ADD COLUMN "foo" integer DEFAULT 10;
342312
"#;
343313

344-
let errors = lint_with_postgres_version(sql, Rule::AddingFieldWithDefault, "11");
345-
assert!(!errors.is_empty());
346-
assert_debug_snapshot!(errors);
314+
assert_snapshot!(lint_errors_with(
315+
sql,
316+
LinterSettings {
317+
pg_version: "11".parse().expect("Invalid PostgreSQL version"),
318+
..Default::default()
319+
},
320+
));
347321
}
348322
}

crates/squawk_linter/src/rules/adding_foreign_key_constraint.rs

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,14 @@ pub(crate) fn adding_foreign_key_constraint(ctx: &mut Linter, parse: &Parse<Sour
7878

7979
#[cfg(test)]
8080
mod test {
81-
use crate::Rule;
82-
use crate::test_utils::{lint, lint_with_assume_in_transaction};
81+
use insta::assert_snapshot;
82+
83+
use crate::test_utils::{lint_errors, lint_ok};
84+
use crate::{LinterSettings, Rule};
85+
86+
fn lint_ok_with(sql: &str, settings: LinterSettings) {
87+
crate::test_utils::lint_ok_with(sql, settings, Rule::AddingForeignKeyConstraint);
88+
}
8389

8490
#[test]
8591
fn create_table_with_foreign_key_constraint() {
@@ -91,14 +97,13 @@ mod test {
9197
email TEXT,
9298
PRIMARY KEY(id),
9399
CONSTRAINT fk_user
94-
FOREIGN KEY ("user_id")
100+
FOREIGN KEY ("user_id")
95101
REFERENCES "user" ("id")
96102
);
97103
COMMIT;
98104
"#;
99105

100-
let errors = lint(sql, Rule::AddingForeignKeyConstraint);
101-
assert!(errors.is_empty());
106+
lint_ok(sql, Rule::AddingForeignKeyConstraint);
102107
}
103108

104109
#[test]
@@ -108,8 +113,13 @@ CREATE TABLE "emails" ("id" UUID NOT NULL, "user_id" UUID NOT NULL);
108113
ALTER TABLE "emails" ADD CONSTRAINT "fk_user" FOREIGN KEY ("user_id") REFERENCES "users" ("id");
109114
"#;
110115

111-
let errors = lint_with_assume_in_transaction(sql, Rule::AddingForeignKeyConstraint);
112-
assert!(errors.is_empty());
116+
lint_ok_with(
117+
sql,
118+
LinterSettings {
119+
assume_in_transaction: true,
120+
..Default::default()
121+
},
122+
);
113123
}
114124

115125
#[test]
@@ -121,8 +131,7 @@ ALTER TABLE "emails" ADD CONSTRAINT "fk_user" FOREIGN KEY ("user_id") REFERENCES
121131
COMMIT;
122132
"#;
123133

124-
let errors = lint(sql, Rule::AddingForeignKeyConstraint);
125-
assert!(errors.is_empty());
134+
lint_ok(sql, Rule::AddingForeignKeyConstraint);
126135
}
127136

128137
#[test]
@@ -135,8 +144,7 @@ ALTER TABLE "email" VALIDATE CONSTRAINT "fk_user";
135144
COMMIT;
136145
"#;
137146

138-
let errors = lint(sql, Rule::AddingForeignKeyConstraint);
139-
assert!(errors.is_empty());
147+
lint_ok(sql, Rule::AddingForeignKeyConstraint);
140148
}
141149

142150
#[test]
@@ -148,9 +156,7 @@ ALTER TABLE "email" ADD CONSTRAINT "fk_user" FOREIGN KEY ("user_id") REFERENCES
148156
COMMIT;
149157
"#;
150158

151-
let errors = lint(sql, Rule::AddingForeignKeyConstraint);
152-
assert_eq!(errors.len(), 1);
153-
assert_eq!(errors[0].code, Rule::AddingForeignKeyConstraint);
159+
assert_snapshot!(lint_errors(sql, Rule::AddingForeignKeyConstraint));
154160
}
155161

156162
#[test]
@@ -161,8 +167,6 @@ ALTER TABLE "emails" ADD COLUMN "user_id" INT REFERENCES "user" ("id");
161167
COMMIT;
162168
"#;
163169

164-
let errors = lint(sql, Rule::AddingForeignKeyConstraint);
165-
assert_eq!(errors.len(), 1);
166-
assert_eq!(errors[0].code, Rule::AddingForeignKeyConstraint);
170+
assert_snapshot!(lint_errors(sql, Rule::AddingForeignKeyConstraint));
167171
}
168172
}

crates/squawk_linter/src/rules/adding_not_null_field.rs

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,17 @@ pub(crate) fn adding_not_null_field(ctx: &mut Linter, parse: &Parse<SourceFile>)
3131

3232
#[cfg(test)]
3333
mod test {
34-
use insta::assert_debug_snapshot;
34+
use insta::assert_snapshot;
3535

3636
use crate::Rule;
37-
use crate::test_utils::lint;
37+
use crate::test_utils::{lint_errors, lint_ok};
3838

3939
#[test]
4040
fn set_not_null() {
4141
let sql = r#"
4242
ALTER TABLE "core_recipe" ALTER COLUMN "foo" SET NOT NULL;
4343
"#;
44-
let errors = lint(sql, Rule::AddingNotNullableField);
45-
assert!(!errors.is_empty());
46-
assert_debug_snapshot!(errors);
44+
assert_snapshot!(lint_errors(sql, Rule::AddingNotNullableField));
4745
}
4846

4947
#[test]
@@ -56,8 +54,7 @@ ALTER TABLE "core_recipe" ADD COLUMN "foo" integer DEFAULT 10 NOT NULL;
5654
ALTER TABLE "core_recipe" ALTER COLUMN "foo" DROP DEFAULT;
5755
COMMIT;
5856
"#;
59-
let errors = lint(sql, Rule::AddingNotNullableField);
60-
assert!(errors.is_empty());
57+
lint_ok(sql, Rule::AddingNotNullableField);
6158
}
6259

6360
#[test]
@@ -66,8 +63,7 @@ COMMIT;
6663
-- This won't work if the table is populated, but that error is caught by adding-required-field.
6764
ALTER TABLE "core_recipe" ADD COLUMN "foo" integer NOT NULL;
6865
"#;
69-
let errors = lint(sql, Rule::AddingNotNullableField);
70-
assert!(errors.is_empty());
66+
lint_ok(sql, Rule::AddingNotNullableField);
7167
}
7268

7369
#[test]
@@ -80,8 +76,7 @@ BEGIN;
8076
ALTER TABLE "core_recipe" ADD COLUMN "foo" integer NOT NULL DEFAULT 10;
8177
COMMIT;
8278
"#;
83-
let errors = lint(sql, Rule::AddingNotNullableField);
84-
assert!(errors.is_empty());
79+
lint_ok(sql, Rule::AddingNotNullableField);
8580
}
8681

8782
#[test]
@@ -93,8 +88,6 @@ ALTER TABLE my_table ALTER COLUMN my_column SET NOT NULL;
9388
UPDATE alembic_version SET version_num='b' WHERE alembic_version.version_num = 'a';
9489
COMMIT;
9590
"#;
96-
let errors = lint(sql, Rule::AddingNotNullableField);
97-
assert!(!errors.is_empty());
98-
assert_debug_snapshot!(errors);
91+
assert_snapshot!(lint_errors(sql, Rule::AddingNotNullableField));
9992
}
10093
}

0 commit comments

Comments
 (0)