Skip to content

Commit abad683

Browse files
authored
linter: simplify tests (#604)
Also avoid parser errors, we didn't check for those before, oops
1 parent 7ead01f commit abad683

32 files changed

+214
-456
lines changed

.vscode/linter.code-snippets

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,7 @@
2626
"$2",
2727
" \"#;",
2828
"",
29-
" let file = SourceFile::parse(&sql);",
30-
" let mut linter = Linter::new([Rule::$3]);",
31-
" let errors = linter.lint(file, sql);",
29+
" let errors = lint(sql, Rule::$3);",
3230
" assert_debug_snapshot!(errors);",
3331
"}",
3432

crates/squawk_linter/src/lib.rs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ use enum_iterator::all;
66
pub use ignore::Ignore;
77
use ignore::find_ignores;
88
use ignore_index::IgnoreIndex;
9-
use lazy_static::lazy_static;
109
use rowan::TextRange;
1110
use rowan::TextSize;
1211
use serde::{Deserialize, Serialize};
@@ -22,6 +21,9 @@ mod visitors;
2221

2322
mod identifier;
2423
mod rules;
24+
25+
#[cfg(test)]
26+
mod test_utils;
2527
use rules::adding_field_with_default;
2628
use rules::adding_foreign_key_constraint;
2729
use rules::adding_not_null_field;
@@ -278,15 +280,12 @@ impl Violation {
278280
}
279281
}
280282

283+
#[derive(Default)]
281284
pub struct LinterSettings {
282285
pub pg_version: Version,
283286
pub assume_in_transaction: bool,
284287
}
285288

286-
lazy_static! {
287-
static ref DEFAULT_PG_VERSION: Version = Version::new(15, 0, 0);
288-
}
289-
290289
pub struct Linter {
291290
errors: Vec<Violation>,
292291
ignores: Vec<Ignore>,
@@ -440,10 +439,7 @@ impl Linter {
440439
errors: vec![],
441440
ignores: vec![],
442441
rules: rules.into(),
443-
settings: LinterSettings {
444-
pg_version: *DEFAULT_PG_VERSION,
445-
assume_in_transaction: false,
446-
},
442+
settings: LinterSettings::default(),
447443
}
448444
}
449445
}

crates/squawk_linter/src/rules/adding_field_with_default.rs

Lines changed: 16 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,8 @@ pub(crate) fn adding_field_with_default(ctx: &mut Linter, parse: &Parse<SourceFi
101101
mod test {
102102
use insta::assert_debug_snapshot;
103103

104-
use crate::{Linter, Rule};
104+
use crate::Rule;
105+
use crate::test_utils::lint;
105106

106107
#[test]
107108
fn docs_example_ok_post_pg_11() {
@@ -113,9 +114,7 @@ mod test {
113114
ALTER TABLE "core_recipe" ADD COLUMN "foo" integer DEFAULT 10;
114115
"#;
115116

116-
let file = squawk_syntax::SourceFile::parse(sql);
117-
let mut linter = Linter::from([Rule::AddingFieldWithDefault]);
118-
let errors = linter.lint(file, sql);
117+
let errors = lint(sql, Rule::AddingFieldWithDefault);
119118
assert!(errors.is_empty());
120119
assert_debug_snapshot!(errors);
121120
}
@@ -130,9 +129,7 @@ ALTER TABLE "core_recipe" ALTER COLUMN "foo" SET DEFAULT 10;
130129
-- remove nullability
131130
"#;
132131

133-
let file = squawk_syntax::SourceFile::parse(sql);
134-
let mut linter = Linter::from([Rule::AddingFieldWithDefault]);
135-
let errors = linter.lint(file, sql);
132+
let errors = lint(sql, Rule::AddingFieldWithDefault);
136133
assert!(errors.is_empty());
137134
assert_debug_snapshot!(errors);
138135
}
@@ -143,9 +140,7 @@ ALTER TABLE "core_recipe" ALTER COLUMN "foo" SET DEFAULT 10;
143140
alter table t set logged, add column c integer default uuid();
144141
"#;
145142

146-
let file = squawk_syntax::SourceFile::parse(sql);
147-
let mut linter = Linter::from([Rule::AddingFieldWithDefault]);
148-
let errors = linter.lint(file, sql);
143+
let errors = lint(sql, Rule::AddingFieldWithDefault);
149144
assert!(!errors.is_empty());
150145
assert_debug_snapshot!(errors);
151146
}
@@ -156,9 +151,7 @@ alter table t set logged, add column c integer default uuid();
156151
ALTER TABLE "core_recipe" ADD COLUMN "foo" integer DEFAULT uuid();
157152
"#;
158153

159-
let file = squawk_syntax::SourceFile::parse(sql);
160-
let mut linter = Linter::from([Rule::AddingFieldWithDefault]);
161-
let errors = linter.lint(file, sql);
154+
let errors = lint(sql, Rule::AddingFieldWithDefault);
162155
assert!(!errors.is_empty());
163156
assert_debug_snapshot!(errors);
164157
}
@@ -170,9 +163,7 @@ ALTER TABLE "core_recipe" ADD COLUMN "foo" integer DEFAULT uuid();
170163
ALTER TABLE "core_recipe" ADD COLUMN "foo" boolean DEFAULT random();
171164
"#;
172165

173-
let file = squawk_syntax::SourceFile::parse(sql);
174-
let mut linter = Linter::from([Rule::AddingFieldWithDefault]);
175-
let errors = linter.lint(file, sql);
166+
let errors = lint(sql, Rule::AddingFieldWithDefault);
176167
assert!(!errors.is_empty());
177168
assert_debug_snapshot!(errors);
178169
}
@@ -184,9 +175,7 @@ ALTER TABLE "core_recipe" ADD COLUMN "foo" boolean DEFAULT random();
184175
ALTER TABLE "core_recipe" ADD COLUMN "foo" boolean DEFAULT true;
185176
"#;
186177

187-
let file = squawk_syntax::SourceFile::parse(sql);
188-
let mut linter = Linter::from([Rule::AddingFieldWithDefault]);
189-
let errors = linter.lint(file, sql);
178+
let errors = lint(sql, Rule::AddingFieldWithDefault);
190179
assert!(errors.is_empty());
191180
assert_debug_snapshot!(errors);
192181
}
@@ -198,9 +187,7 @@ ALTER TABLE "core_recipe" ADD COLUMN "foo" boolean DEFAULT true;
198187
ALTER TABLE "core_recipe" ADD COLUMN "foo" text DEFAULT 'some-str';
199188
"#;
200189

201-
let file = squawk_syntax::SourceFile::parse(sql);
202-
let mut linter = Linter::from([Rule::AddingFieldWithDefault]);
203-
let errors = linter.lint(file, sql);
190+
let errors = lint(sql, Rule::AddingFieldWithDefault);
204191
assert!(errors.is_empty());
205192
assert_debug_snapshot!(errors);
206193
}
@@ -212,9 +199,7 @@ ALTER TABLE "core_recipe" ADD COLUMN "foo" text DEFAULT 'some-str';
212199
ALTER TABLE "core_recipe" ADD COLUMN "foo" some_enum_type DEFAULT 'my-enum-variant';
213200
"#;
214201

215-
let file = squawk_syntax::SourceFile::parse(sql);
216-
let mut linter = Linter::from([Rule::AddingFieldWithDefault]);
217-
let errors = linter.lint(file, sql);
202+
let errors = lint(sql, Rule::AddingFieldWithDefault);
218203
assert!(errors.is_empty());
219204
assert_debug_snapshot!(errors);
220205
}
@@ -226,9 +211,7 @@ ALTER TABLE "core_recipe" ADD COLUMN "foo" some_enum_type DEFAULT 'my-enum-varia
226211
ALTER TABLE "core_recipe" ADD COLUMN "foo" jsonb DEFAULT '{}'::jsonb;
227212
"#;
228213

229-
let file = squawk_syntax::SourceFile::parse(sql);
230-
let mut linter = Linter::from([Rule::AddingFieldWithDefault]);
231-
let errors = linter.lint(file, sql);
214+
let errors = lint(sql, Rule::AddingFieldWithDefault);
232215
assert!(errors.is_empty());
233216
assert_debug_snapshot!(errors);
234217
}
@@ -240,9 +223,7 @@ ALTER TABLE "core_recipe" ADD COLUMN "foo" jsonb DEFAULT '{}'::jsonb;
240223
ALTER TABLE "core_recipe" ADD COLUMN "foo" jsonb DEFAULT myjsonb();
241224
"#;
242225

243-
let file = squawk_syntax::SourceFile::parse(sql);
244-
let mut linter = Linter::from([Rule::AddingFieldWithDefault]);
245-
let errors = linter.lint(file, sql);
226+
let errors = lint(sql, Rule::AddingFieldWithDefault);
246227
assert!(!errors.is_empty());
247228
assert_debug_snapshot!(errors);
248229
}
@@ -254,9 +235,7 @@ ALTER TABLE "core_recipe" ADD COLUMN "foo" jsonb DEFAULT myjsonb();
254235
ALTER TABLE "core_recipe" ADD COLUMN "foo" timestamptz DEFAULT now(123);
255236
"#;
256237

257-
let file = squawk_syntax::SourceFile::parse(sql);
258-
let mut linter = Linter::from([Rule::AddingFieldWithDefault]);
259-
let errors = linter.lint(file, sql);
238+
let errors = lint(sql, Rule::AddingFieldWithDefault);
260239
assert!(!errors.is_empty());
261240
assert_debug_snapshot!(errors);
262241
}
@@ -267,9 +246,7 @@ ALTER TABLE "core_recipe" ADD COLUMN "foo" timestamptz DEFAULT now(123);
267246
ALTER TABLE "core_recipe" ADD COLUMN "foo" timestamptz DEFAULT now();
268247
"#;
269248

270-
let file = squawk_syntax::SourceFile::parse(sql);
271-
let mut linter = Linter::from([Rule::AddingFieldWithDefault]);
272-
let errors = linter.lint(file, sql);
249+
let errors = lint(sql, Rule::AddingFieldWithDefault);
273250
assert!(errors.is_empty());
274251
assert_debug_snapshot!(errors);
275252
}
@@ -281,9 +258,7 @@ ALTER TABLE "core_recipe" ADD COLUMN "foo" timestamptz DEFAULT now();
281258
alter table account_metadata add column blah integer default 2 + 2;
282259
"#;
283260

284-
let file = squawk_syntax::SourceFile::parse(sql);
285-
let mut linter = Linter::from([Rule::AddingFieldWithDefault]);
286-
let errors = linter.lint(file, sql);
261+
let errors = lint(sql, Rule::AddingFieldWithDefault);
287262
assert_debug_snapshot!(errors);
288263
}
289264

@@ -294,9 +269,7 @@ ALTER TABLE foo
294269
ADD COLUMN bar numeric GENERATED ALWAYS AS (bar + baz) STORED;
295270
"#;
296271

297-
let file = squawk_syntax::SourceFile::parse(sql);
298-
let mut linter = Linter::from([Rule::AddingFieldWithDefault]);
299-
let errors = linter.lint(file, sql);
272+
let errors = lint(sql, Rule::AddingFieldWithDefault);
300273
assert!(!errors.is_empty());
301274
assert_debug_snapshot!(errors);
302275
}

crates/squawk_linter/src/rules/adding_foreign_key_constraint.rs

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ pub(crate) fn adding_foreign_key_constraint(ctx: &mut Linter, parse: &Parse<Sour
5959

6060
#[cfg(test)]
6161
mod test {
62-
use crate::{Linter, Rule};
62+
use crate::Rule;
63+
use crate::test_utils::lint;
6364

6465
#[test]
6566
fn create_table_with_foreign_key_constraint() {
@@ -77,9 +78,7 @@ mod test {
7778
COMMIT;
7879
"#;
7980

80-
let file = squawk_syntax::SourceFile::parse(sql);
81-
let mut linter = Linter::from([Rule::AddingForeignKeyConstraint]);
82-
let errors = linter.lint(file, sql);
81+
let errors = lint(sql, Rule::AddingForeignKeyConstraint);
8382
assert!(errors.is_empty());
8483
}
8584

@@ -93,9 +92,7 @@ ALTER TABLE "email" VALIDATE CONSTRAINT "fk_user";
9392
COMMIT;
9493
"#;
9594

96-
let file = squawk_syntax::SourceFile::parse(sql);
97-
let mut linter = Linter::from([Rule::AddingForeignKeyConstraint]);
98-
let errors = linter.lint(file, sql);
95+
let errors = lint(sql, Rule::AddingForeignKeyConstraint);
9996
assert!(errors.is_empty());
10097
}
10198

@@ -108,9 +105,7 @@ ALTER TABLE "email" ADD CONSTRAINT "fk_user" FOREIGN KEY ("user_id") REFERENCES
108105
COMMIT;
109106
"#;
110107

111-
let file = squawk_syntax::SourceFile::parse(sql);
112-
let mut linter = Linter::from([Rule::AddingForeignKeyConstraint]);
113-
let errors = linter.lint(file, sql);
108+
let errors = lint(sql, Rule::AddingForeignKeyConstraint);
114109
assert_eq!(errors.len(), 1);
115110
assert_eq!(errors[0].code, Rule::AddingForeignKeyConstraint);
116111
}
@@ -123,9 +118,7 @@ ALTER TABLE "emails" ADD COLUMN "user_id" INT REFERENCES "user" ("id");
123118
COMMIT;
124119
"#;
125120

126-
let file = squawk_syntax::SourceFile::parse(sql);
127-
let mut linter = Linter::from([Rule::AddingForeignKeyConstraint]);
128-
let errors = linter.lint(file, sql);
121+
let errors = lint(sql, Rule::AddingForeignKeyConstraint);
129122
assert_eq!(errors.len(), 1);
130123
assert_eq!(errors[0].code, Rule::AddingForeignKeyConstraint);
131124
}

crates/squawk_linter/src/rules/adding_not_null_field.rs

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,15 @@ pub(crate) fn adding_not_null_field(ctx: &mut Linter, parse: &Parse<SourceFile>)
3535
mod test {
3636
use insta::assert_debug_snapshot;
3737

38-
use crate::{Linter, Rule};
38+
use crate::Rule;
39+
use crate::test_utils::lint;
3940

4041
#[test]
4142
fn set_not_null() {
4243
let sql = r#"
4344
ALTER TABLE "core_recipe" ALTER COLUMN "foo" SET NOT NULL;
4445
"#;
45-
let file = squawk_syntax::SourceFile::parse(sql);
46-
let mut linter = Linter::from([Rule::AddingNotNullableField]);
47-
let errors = linter.lint(file, sql);
46+
let errors = lint(sql, Rule::AddingNotNullableField);
4847
assert!(!errors.is_empty());
4948
assert_debug_snapshot!(errors);
5049
}
@@ -59,9 +58,7 @@ ALTER TABLE "core_recipe" ADD COLUMN "foo" integer DEFAULT 10 NOT NULL;
5958
ALTER TABLE "core_recipe" ALTER COLUMN "foo" DROP DEFAULT;
6059
COMMIT;
6160
"#;
62-
let file = squawk_syntax::SourceFile::parse(sql);
63-
let mut linter = Linter::from([Rule::AddingNotNullableField]);
64-
let errors = linter.lint(file, sql);
61+
let errors = lint(sql, Rule::AddingNotNullableField);
6562
assert!(errors.is_empty());
6663
}
6764

@@ -71,9 +68,7 @@ COMMIT;
7168
-- This won't work if the table is populated, but that error is caught by adding-required-field.
7269
ALTER TABLE "core_recipe" ADD COLUMN "foo" integer NOT NULL;
7370
"#;
74-
let file = squawk_syntax::SourceFile::parse(sql);
75-
let mut linter = Linter::from([Rule::AddingNotNullableField]);
76-
let errors = linter.lint(file, sql);
71+
let errors = lint(sql, Rule::AddingNotNullableField);
7772
assert!(errors.is_empty());
7873
}
7974

@@ -87,9 +82,7 @@ BEGIN;
8782
ALTER TABLE "core_recipe" ADD COLUMN "foo" integer NOT NULL DEFAULT 10;
8883
COMMIT;
8984
"#;
90-
let file = squawk_syntax::SourceFile::parse(sql);
91-
let mut linter = Linter::from([Rule::AddingNotNullableField]);
92-
let errors = linter.lint(file, sql);
85+
let errors = lint(sql, Rule::AddingNotNullableField);
9386
assert!(errors.is_empty());
9487
}
9588

@@ -102,9 +95,7 @@ ALTER TABLE my_table ALTER COLUMN my_column SET NOT NULL;
10295
UPDATE alembic_version SET version_num='b' WHERE alembic_version.version_num = 'a';
10396
COMMIT;
10497
"#;
105-
let file = squawk_syntax::SourceFile::parse(sql);
106-
let mut linter = Linter::from([Rule::AddingNotNullableField]);
107-
let errors = linter.lint(file, sql);
98+
let errors = lint(sql, Rule::AddingNotNullableField);
10899
assert!(!errors.is_empty());
109100
assert_debug_snapshot!(errors);
110101
}

crates/squawk_linter/src/rules/adding_primary_key_constraint.rs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -54,16 +54,15 @@ pub(crate) fn adding_primary_key_constraint(ctx: &mut Linter, parse: &Parse<Sour
5454
mod test {
5555
use insta::assert_debug_snapshot;
5656

57-
use crate::{Linter, Rule};
57+
use crate::Rule;
58+
use crate::test_utils::lint;
5859

5960
#[test]
6061
fn serial_primary_key() {
6162
let sql = r#"
6263
ALTER TABLE a ADD COLUMN b SERIAL PRIMARY KEY;
6364
"#;
64-
let file = squawk_syntax::SourceFile::parse(sql);
65-
let mut linter = Linter::from([Rule::AddingSerialPrimaryKeyField]);
66-
let errors = linter.lint(file, sql);
65+
let errors = lint(sql, Rule::AddingSerialPrimaryKeyField);
6766
assert!(!errors.is_empty());
6867
assert_debug_snapshot!(errors);
6968
}
@@ -73,9 +72,7 @@ mod test {
7372
let sql = r#"
7473
ALTER TABLE items ADD PRIMARY KEY (id);
7574
"#;
76-
let file = squawk_syntax::SourceFile::parse(sql);
77-
let mut linter = Linter::from([Rule::AddingSerialPrimaryKeyField]);
78-
let errors = linter.lint(file, sql);
75+
let errors = lint(sql, Rule::AddingSerialPrimaryKeyField);
7976
assert!(!errors.is_empty());
8077
assert_debug_snapshot!(errors);
8178
}
@@ -86,9 +83,7 @@ ALTER TABLE items ADD PRIMARY KEY (id);
8683
ALTER TABLE items ADD CONSTRAINT items_pk PRIMARY KEY USING INDEX items_pk;
8784
"#;
8885

89-
let file = squawk_syntax::SourceFile::parse(sql);
90-
let mut linter = Linter::from([Rule::AddingSerialPrimaryKeyField]);
91-
let errors = linter.lint(file, sql);
86+
let errors = lint(sql, Rule::AddingSerialPrimaryKeyField);
9287
assert!(errors.is_empty());
9388
}
9489
}

0 commit comments

Comments
 (0)