Skip to content

Commit 02ade43

Browse files
committed
Address create_err, remove is_ok assert and use hashset instead of vector for assert
1 parent f5e2056 commit 02ade43

File tree

5 files changed

+39
-36
lines changed

5 files changed

+39
-36
lines changed

src/lint/rules/indentation.rs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,9 @@ impl LongLinesRule {
6464
let len = line.len().try_into().unwrap();
6565
if len > self.max_length {
6666
let rowu32 = row.try_into().unwrap();
67-
self.push_err(acc, Range::<ZeroIndexed>::from_u32(rowu32,rowu32, self.max_length, len));
67+
acc.push(
68+
self.create_err(Range::<ZeroIndexed>::from_u32(rowu32,rowu32, self.max_length, len))
69+
);
6870
}
6971
}
7072
}
@@ -99,7 +101,9 @@ impl IndentNoTabRule {
99101

100102
for (col, _) in line.match_indices('\t') {
101103
let colu32 = col.try_into().unwrap();
102-
self.push_err(acc, Range::<ZeroIndexed>::from_u32(rowu32, rowu32, colu32, colu32 + 1));
104+
acc.push(
105+
self.create_err(Range::<ZeroIndexed>::from_u32(rowu32, rowu32, colu32, colu32 + 1))
106+
);
103107
}
104108
}
105109
}
@@ -203,7 +207,7 @@ impl IndentCodeBlockRule {
203207
args.lbrace.row_start == args.members_ranges[0].row_start { return; }
204208
for member_range in args.members_ranges {
205209
if self.indentation_is_not_aligned(member_range, args.expected_depth) {
206-
self.push_err(acc, member_range);
210+
acc.push(self.create_err(member_range));
207211
}
208212
}
209213
}
@@ -347,13 +351,14 @@ impl IndentClosingBraceRule {
347351
let last_member_on_same_row_than_rbrace:bool = args.last_member.row_end
348352
== args.rbrace.row_start;
349353
if last_member_on_same_row_than_rbrace {
350-
return self.push_err(acc, args.rbrace);
354+
acc.push(self.create_err(args.rbrace));
355+
return;
351356
}
352357

353358
let rbrace_on_same_ind_level_than_switchtok:bool = args.rbrace.col_start.0
354359
== args.expected_depth * self.indentation_spaces;
355360
if !rbrace_on_same_ind_level_than_switchtok {
356-
self.push_err(acc, args.rbrace);
361+
acc.push(self.create_err(args.rbrace));
357362
}
358363
}
359364
}
@@ -495,7 +500,7 @@ impl IndentParenExprRule {
495500
if member_range.row_start.0 != last_row {
496501
last_row = member_range.row_start.0;
497502
if member_range.col_start.0 != expected_line_start {
498-
self.push_err(acc, member_range);
503+
acc.push(self.create_err(member_range));
499504
}
500505
}
501506
}
@@ -574,7 +579,7 @@ impl IndentSwitchCaseRule {
574579
if !self.enabled { return; }
575580
let Some(args) = args else { return; };
576581
if self.indentation_is_not_aligned(args.case_range, args.expected_depth) {
577-
self.push_err(acc, args.case_range);
582+
acc.push(self.create_err(args.case_range));
578583
}
579584
}
580585
fn indentation_is_not_aligned(&self, member_range: ZeroRange, depth: u32) -> bool {
@@ -661,7 +666,9 @@ impl IndentEmptyLoopRule {
661666
let Some(args) = args else { return; };
662667
if self.indentation_is_not_aligned(args.semicolon_range, args.expected_depth) ||
663668
args.loop_keyword_range.row_start == args.semicolon_range.row_start {
664-
self.push_err(acc, Range::combine(args.loop_keyword_range, args.semicolon_range))
669+
acc.push(
670+
self.create_err(Range::combine(args.loop_keyword_range, args.semicolon_range))
671+
);
665672
}
666673
}
667674
fn indentation_is_not_aligned(&self, member_range: ZeroRange, depth: u32) -> bool {

src/lint/rules/mod.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,19 +50,18 @@ pub trait Rule {
5050
fn name() -> &'static str;
5151
fn description() -> &'static str;
5252
fn get_rule_type() -> RuleType;
53-
fn push_err(&self, acc: &mut Vec<DMLStyleError>, range: ZeroRange) {
54-
let dmlerror = DMLStyleError {
53+
fn create_err(&self, range: ZeroRange) -> DMLStyleError {
54+
DMLStyleError {
5555
error: LocalDMLError {
5656
range,
5757
description: Self::description().to_string(),
5858
},
5959
rule_type: Self::get_rule_type(),
60-
};
61-
acc.push(dmlerror);
60+
}
6261
}
6362
}
6463

65-
#[derive(PartialEq, Debug, Clone)]
64+
#[derive(PartialEq, Debug, Clone, Eq, Hash)]
6665
pub enum RuleType {
6766
SpBraces,
6867
SpPunct,

src/lint/rules/spacing.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,11 @@ impl SpBracesRule {
103103
if let Some(location) = ranges {
104104
if (location.lbrace.row_end == location.body_start.row_start)
105105
&& (location.lbrace.col_end == location.body_start.col_start) {
106-
self.push_err(acc, location.lbrace);
106+
acc.push(self.create_err(location.lbrace));
107107
}
108108
if (location.rbrace.row_start == location.body_end.row_end)
109109
&& (location.rbrace.col_start == location.body_end.col_end) {
110-
self.push_err(acc, location.rbrace);
110+
acc.push(self.create_err(location.rbrace));
111111
}
112112
}
113113
}
@@ -239,7 +239,7 @@ impl SpPunctRule {
239239
before_range.row_end, punct_range.row_start,
240240
before_range.col_end, punct_range.col_start
241241
);
242-
self.push_err(acc, error_range);
242+
acc.push(self.create_err(error_range));
243243
}
244244

245245
if after_range.is_none() {continue;}
@@ -250,7 +250,7 @@ impl SpPunctRule {
250250
punct_range.row_start, after_range.unwrap().row_end,
251251
punct_range.col_start, after_range.unwrap().col_end,
252252
);
253-
self.push_err(acc, error_range);
253+
acc.push(self.create_err(error_range));
254254
}
255255
}
256256
}
@@ -303,7 +303,7 @@ impl NspFunparRule {
303303
range: Option<NspFunparArgs>) {
304304
if !self.enabled { return; }
305305
if let Some(gap) = range {
306-
self.push_err(acc, gap);
306+
acc.push(self.create_err(gap));
307307
}
308308
}
309309
}
@@ -396,14 +396,14 @@ impl NspInparenRule {
396396
let mut gap = location.opening;
397397
gap.col_start = location.opening.col_end;
398398
gap.col_end = location.content_start.col_start;
399-
self.push_err(acc, gap);
399+
acc.push(self.create_err(gap));
400400
}
401401
if (location.closing.row_start == location.content_end.row_end)
402402
&& (location.closing.col_start != location.content_end.col_end) {
403403
let mut gap = location.closing;
404404
gap.col_end = location.closing.col_start;
405405
gap.col_start = location.content_end.col_end;
406-
self.push_err(acc, gap);
406+
acc.push(self.create_err(gap));
407407
}
408408
}
409409
}
@@ -454,7 +454,7 @@ impl NspUnaryRule {
454454
range: Option<NspUnaryArgs>) {
455455
if !self.enabled { return; }
456456
if let Some(gap) = range {
457-
self.push_err(acc, gap);
457+
acc.push(self.create_err(gap));
458458
}
459459
}
460460
}
@@ -483,10 +483,10 @@ impl NspTrailingRule {
483483
let row_u32 = row.try_into().unwrap();
484484
let tokens_end = line.trim_end().len().try_into().unwrap();
485485
if tokens_end < len {
486-
self.push_err(acc, Range::<ZeroIndexed>::from_u32(row_u32,
486+
acc.push(self.create_err(Range::<ZeroIndexed>::from_u32(row_u32,
487487
row_u32,
488488
tokens_end,
489-
len));
489+
len)));
490490
}
491491
}
492492
}

src/lint/rules/tests/common.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use crate::lint::rules::{instantiate_rules, CurrentRules, RuleType};
33
use crate::lint::tests::create_ast_from_snippet;
44
use crate::analysis::ZeroRange;
55
use crate::vfs::Error;
6+
use std::collections::HashSet;
67

78
#[derive(Debug)]
89
pub struct ExpectedDMLStyleError {
@@ -44,15 +45,13 @@ pub fn assert_snippet(source_code: &str, expected_errors: usize, rules: &Current
4445
}
4546

4647
pub fn robust_assert_snippet(source_code: &str, expected_errors: Vec<ExpectedDMLStyleError>, rules: &CurrentRules) {
47-
let lint_errors = run_linter(source_code, rules);
48-
assert!(lint_errors.is_ok());
49-
let lint_errors = lint_errors.unwrap();
48+
let lint_errors = run_linter(source_code, rules).unwrap();
5049
assert_eq!(lint_errors.len(), expected_errors.len(), "{:#?}", lint_errors);
5150

52-
for (actual, expected) in lint_errors.iter().zip(expected_errors.iter()) {
53-
assert_eq!(actual.error.range, expected.range, "Range mismatch: {:#?} vs {:#?}", actual, expected);
54-
assert_eq!(actual.rule_type, expected.rule_type, "RuleType mismatch: {:#?} vs {:#?}", actual, expected);
55-
}
51+
let actual_errors: HashSet<_> = lint_errors.iter().map(|e| (e.error.range.clone(), e.rule_type.clone())).collect();
52+
let expected_errors: HashSet<_> = expected_errors.iter().map(|e| (e.range.clone(), e.rule_type.clone())).collect();
53+
54+
assert_eq!(actual_errors, expected_errors, "Mismatch between actual and expected errors:\nActual: {:#?}\nExpected: {:#?}", actual_errors, expected_errors);
5655
}
5756

5857
pub fn set_up() -> CurrentRules {

src/lint/rules/tests/indentation/closing_brace.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -204,12 +204,10 @@ fn composite_indent_incorrect() {
204204
let rules = set_up();
205205
let expected_errors = define_expected_errors!(
206206
RuleType::IN4,
207-
(12, 12, 4, 5),
208-
(12, 12, 2, 3),
209-
(12, 12, 0, 1),
210207
(11, 11, 16, 17),
211-
); // Order of expected errors is not intuitive here
212-
// and has to be defined in a reverse
213-
// fashion to be asserted properly
208+
(12, 12, 0, 1),
209+
(12, 12, 2, 3),
210+
(12, 12, 4, 5),
211+
);
214212
assert_snippet(COMPOSITE_INDENT_INCORRECT, expected_errors, &rules);
215213
}

0 commit comments

Comments
 (0)