Skip to content

Commit d617a29

Browse files
authored
Merge pull request #7 from kevv87/dml-style-err-types
Wrap LocalDMLError in DMLStyleError to hold local Lint module info
2 parents 5ad1864 + dfd44cc commit d617a29

File tree

9 files changed

+193
-93
lines changed

9 files changed

+193
-93
lines changed

src/analysis/parsing/expression.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ use crate::analysis::structure::expressions::DMLString;
1717
use crate::analysis::{DeclarationSpan, LocalDMLError};
1818

1919

20-
use crate::lint::{rules::{spacing::{NspFunparArgs,
20+
use crate::lint::{DMLStyleError,
21+
rules::{spacing::{NspFunparArgs,
2122
NspInparenArgs,
2223
NspUnaryArgs,
2324
SpPunctArgs},
@@ -37,7 +38,7 @@ impl TreeElement for UnaryExpressionContent {
3738
fn subs(&self) -> TreeElements<'_> {
3839
create_subs!(&self.operation, &self.expr)
3940
}
40-
fn evaluate_rules(&self, acc: &mut Vec<LocalDMLError>, rules: &CurrentRules, _aux: &mut AuxParams) {
41+
fn evaluate_rules(&self, acc: &mut Vec<DMLStyleError>, rules: &CurrentRules, _aux: &mut AuxParams) {
4142
rules.nsp_unary.check(acc, NspUnaryArgs::from_unary_expr(self));
4243
}
4344
}
@@ -71,7 +72,7 @@ impl TreeElement for PostUnaryExpressionContent {
7172
fn subs(&self) -> TreeElements<'_> {
7273
create_subs!(&self.expr, &self.operation)
7374
}
74-
fn evaluate_rules(&self, acc: &mut Vec<LocalDMLError>, rules: &CurrentRules, _aux: &mut AuxParams) {
75+
fn evaluate_rules(&self, acc: &mut Vec<DMLStyleError>, rules: &CurrentRules, _aux: &mut AuxParams) {
7576
rules.nsp_unary.check(acc, NspUnaryArgs::from_postunary_expr(self));
7677
}
7778
}
@@ -209,7 +210,7 @@ impl TreeElement for FunctionCallContent {
209210
noderef, ReferenceKind::Callable));
210211
}
211212
}
212-
fn evaluate_rules(&self, acc: &mut Vec<LocalDMLError>, rules: &CurrentRules, _aux: &mut AuxParams) {
213+
fn evaluate_rules(&self, acc: &mut Vec<DMLStyleError>, rules: &CurrentRules, _aux: &mut AuxParams) {
213214
rules.nsp_funpar.check(acc, NspFunparArgs::from_function_call(self));
214215
rules.nsp_inparen.check(acc, NspInparenArgs::from_function_call(self));
215216
rules.sp_punct.check(acc, SpPunctArgs::from_function_call(self));
@@ -420,7 +421,7 @@ impl TreeElement for IndexContent {
420421
fn subs(&self) -> TreeElements<'_> {
421422
create_subs!(&self.array, &self.lbracket, &self.index, &self.rbracket)
422423
}
423-
fn evaluate_rules(&self, acc: &mut Vec<LocalDMLError>, rules: &CurrentRules, _aux: &mut AuxParams) {
424+
fn evaluate_rules(&self, acc: &mut Vec<DMLStyleError>, rules: &CurrentRules, _aux: &mut AuxParams) {
424425
rules.nsp_inparen.check(acc, NspInparenArgs::from_index(self));
425426
}
426427
}

src/analysis/parsing/statement.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ use crate::analysis::parsing::misc::{Initializer, InitializerContent, CDecl,
2121
ident_filter, objident_filter};
2222
use crate::analysis::parsing::structure::{parse_vardecl, VarDecl};
2323
use crate::analysis::LocalDMLError;
24-
use crate::lint::{rules::{CurrentRules,
24+
use crate::lint::{DMLStyleError,
25+
rules::{CurrentRules,
2526
indentation::{IN3Args, IN9Args},
2627
spacing::{NspInparenArgs,
2728
SpBracesArgs,
@@ -141,7 +142,7 @@ impl TreeElement for CompoundContent {
141142
fn subs(&self) -> TreeElements<'_> {
142143
create_subs!(&self.lbrace, &self.statements, &self.rbrace)
143144
}
144-
fn evaluate_rules(&self, acc: &mut Vec<LocalDMLError>, rules: &CurrentRules, aux: &mut AuxParams) {
145+
fn evaluate_rules(&self, acc: &mut Vec<DMLStyleError>, rules: &CurrentRules, aux: &mut AuxParams) {
145146
rules.sp_brace.check(acc, SpBracesArgs::from_compound(self));
146147
rules.in3.check(acc, IN3Args::from_compound_content(self, &mut aux.depth));
147148
}
@@ -195,7 +196,7 @@ impl TreeElement for VariableDeclContent {
195196
fn post_parse_sanity(&self, _file: &TextFile) -> Vec<LocalDMLError> {
196197
self.decls.ensure_named()
197198
}
198-
fn evaluate_rules(&self, acc: &mut Vec<LocalDMLError>, rules: &CurrentRules, _aux: &mut AuxParams) {
199+
fn evaluate_rules(&self, acc: &mut Vec<DMLStyleError>, rules: &CurrentRules, _aux: &mut AuxParams) {
199200
rules.sp_punct.check(acc, SpPunctArgs::from_variable_decl(self));
200201
}
201202
}
@@ -427,7 +428,7 @@ impl TreeElement for IfContent {
427428
&self.truebranch,
428429
&self.elsebranch)
429430
}
430-
fn evaluate_rules(&self, acc: &mut Vec<LocalDMLError>, rules: &CurrentRules, _aux: &mut AuxParams) {
431+
fn evaluate_rules(&self, acc: &mut Vec<DMLStyleError>, rules: &CurrentRules, _aux: &mut AuxParams) {
431432
rules.nsp_inparen.check(acc, NspInparenArgs::from_if(self));
432433
}
433434
}
@@ -1003,7 +1004,7 @@ impl TreeElement for SwitchCase {
10031004
Self::Default(default, colon) => create_subs!(default, colon),
10041005
}
10051006
}
1006-
fn evaluate_rules(&self, acc: &mut Vec<LocalDMLError>, rules: &CurrentRules, aux: &mut AuxParams) {
1007+
fn evaluate_rules(&self, acc: &mut Vec<DMLStyleError>, rules: &CurrentRules, aux: &mut AuxParams) {
10071008
rules.in9.check(acc, IN9Args::from_switch_case(self, &mut aux.depth));
10081009
}
10091010
}
@@ -1715,7 +1716,7 @@ impl TreeElement for ExpressionStmtContent {
17151716
fn subs(&self) -> TreeElements<'_> {
17161717
create_subs!(&self.expression, &self.semi)
17171718
}
1718-
fn evaluate_rules(&self, acc: &mut Vec<LocalDMLError>, rules: &CurrentRules, _aux: &mut AuxParams) {
1719+
fn evaluate_rules(&self, acc: &mut Vec<DMLStyleError>, rules: &CurrentRules, _aux: &mut AuxParams) {
17191720
rules.sp_punct.check(acc, SpPunctArgs::from_expression_stmt(self));
17201721
}
17211722
}

src/analysis/parsing/structure.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use crate::lint::rules::spacing::{SpBracesArgs,
2121
NspFunparArgs,
2222
SpPunctArgs};
2323
use crate::lint::rules::indentation::{IN3Args};
24-
use crate::lint::{rules::CurrentRules, AuxParams};
24+
use crate::lint::{rules::CurrentRules, AuxParams, DMLStyleError};
2525
use crate::analysis::reference::{Reference, ReferenceKind};
2626
use crate::analysis::FileSpec;
2727
use crate::span::Range;
@@ -235,7 +235,7 @@ impl TreeElement for MethodContent {
235235
}
236236
errors
237237
}
238-
fn evaluate_rules(&self, acc: &mut Vec<LocalDMLError>, rules: &CurrentRules, _aux: &mut AuxParams) {
238+
fn evaluate_rules(&self, acc: &mut Vec<DMLStyleError>, rules: &CurrentRules, _aux: &mut AuxParams) {
239239
rules.nsp_funpar.check(acc, NspFunparArgs::from_method(self));
240240
rules.nsp_inparen.check(acc, NspInparenArgs::from_method(self));
241241
rules.sp_punct.check(acc, SpPunctArgs::from_method(self));
@@ -704,7 +704,7 @@ impl TreeElement for ObjectStatementsContent {
704704
create_subs!(left, vect, right)
705705
}
706706
}
707-
fn evaluate_rules(&self, acc: &mut Vec<LocalDMLError>, rules: &CurrentRules, aux: &mut AuxParams) {
707+
fn evaluate_rules(&self, acc: &mut Vec<DMLStyleError>, rules: &CurrentRules, aux: &mut AuxParams) {
708708
rules.sp_brace.check(acc, SpBracesArgs::from_obj_stmts(self));
709709
rules.in3.check(acc, IN3Args::from_obj_stmts_content(self, &mut aux.depth));
710710
}

src/analysis/parsing/tree.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use crate::analysis::reference::{Reference, NodeRef, MaybeIsNodeRef,
77
use crate::analysis::FileSpec;
88
use crate::analysis::structure::expressions::DMLString;
99

10-
use crate::lint::{rules::CurrentRules, AuxParams};
10+
use crate::lint::{rules::CurrentRules, AuxParams, DMLStyleError};
1111
use crate::span::{Range, Span, ZeroIndexed, Position, FilePosition};
1212
use crate::vfs::{Vfs as GenVfs, TextFile};
1313

@@ -91,13 +91,13 @@ pub trait TreeElement {
9191
self.default_references(accumulator, file);
9292
}
9393

94-
fn style_check(&self, acc: &mut Vec<LocalDMLError>, rules: &CurrentRules, mut aux: AuxParams) {
94+
fn style_check(&self, acc: &mut Vec<DMLStyleError>, rules: &CurrentRules, mut aux: AuxParams) {
9595
self.evaluate_rules(acc, rules, &mut aux);
9696
for sub in self.subs() {
9797
sub.style_check(acc, rules, aux);
9898
}
9999
}
100-
fn evaluate_rules(&self, _acc: &mut Vec<LocalDMLError>, _rules: &CurrentRules, _aux: &mut AuxParams) {} // default NOOP
100+
fn evaluate_rules(&self, _acc: &mut Vec<DMLStyleError>, _rules: &CurrentRules, _aux: &mut AuxParams) {} // default NOOP
101101
}
102102

103103
impl <T: ?Sized + TreeElement> ReferenceContainer for T {

src/analysis/parsing/types.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
use crate::lint::{rules::{indentation::IN3Args,
44
spacing::SpBracesArgs,
55
CurrentRules},
6-
AuxParams};
6+
AuxParams,
7+
DMLStyleError};
78
use crate::span::Range;
89
use crate::analysis::parsing::lexer::TokenKind;
910
use crate::analysis::parsing::parser::{doesnt_understand_tokens,
@@ -52,7 +53,7 @@ impl TreeElement for StructTypeContent {
5253
}
5354
errors
5455
}
55-
fn evaluate_rules(&self, acc: &mut Vec<LocalDMLError>, rules: &CurrentRules, aux: &mut AuxParams) {
56+
fn evaluate_rules(&self, acc: &mut Vec<DMLStyleError>, rules: &CurrentRules, aux: &mut AuxParams) {
5657
rules.in3.check(acc, IN3Args::from_struct_type_content(self, &mut aux.depth));
5758
rules.sp_brace.check(acc, SpBracesArgs::from_struct_type_content(self));
5859
}
@@ -131,7 +132,7 @@ impl TreeElement for LayoutContent {
131132
}
132133
errors
133134
}
134-
fn evaluate_rules(&self, acc: &mut Vec<LocalDMLError>, rules: &CurrentRules, aux: &mut AuxParams) {
135+
fn evaluate_rules(&self, acc: &mut Vec<DMLStyleError>, rules: &CurrentRules, aux: &mut AuxParams) {
135136
rules.in3.check(acc, IN3Args::from_layout_content(self, &mut aux.depth));
136137
rules.sp_brace.check(acc, SpBracesArgs::from_layout_content(self));
137138
}
@@ -304,7 +305,7 @@ impl TreeElement for BitfieldsContent {
304305
}
305306
errors
306307
}
307-
fn evaluate_rules(&self, acc: &mut Vec<LocalDMLError>, rules: &CurrentRules, _aux: &mut AuxParams) {
308+
fn evaluate_rules(&self, acc: &mut Vec<DMLStyleError>, rules: &CurrentRules, _aux: &mut AuxParams) {
308309
rules.sp_brace.check(acc, SpBracesArgs::from_bitfields_content(self));
309310
}
310311
}

src/lint/mod.rs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use std::path::{Path, PathBuf};
44
use log::{debug, error, trace};
55
use serde::{Deserialize, Serialize};
66
use rules::indentation::IN2Rule;
7-
use rules::{Rule, instantiate_rules, CurrentRules};
7+
use rules::{Rule, instantiate_rules, CurrentRules, RuleType};
88
use rules::{spacing::{SpBraceOptions, SpPunctOptions, NspFunparOptions,
99
NspInparenOptions, NspUnaryOptions, NspTrailingOptions},
1010
indentation::{LongLineOptions, IN1Options, IN3Options,
@@ -91,6 +91,11 @@ impl Default for LintCfg {
9191
}
9292
}
9393

94+
pub struct DMLStyleError {
95+
pub error: LocalDMLError,
96+
pub rule_type: RuleType,
97+
}
98+
9499
#[derive(Debug, Clone)]
95100
pub struct LinterAnalysis {
96101
pub path: CanonPath,
@@ -128,7 +133,7 @@ impl LinterAnalysis {
128133
}
129134

130135
pub fn begin_style_check(ast: TopAst, file: String, rules: &CurrentRules) -> Result<Vec<LocalDMLError>, Error> {
131-
let mut linting_errors: Vec<LocalDMLError> = vec![];
136+
let mut linting_errors: Vec<DMLStyleError> = vec![];
132137
ast.style_check(&mut linting_errors, rules, AuxParams { depth: 0 });
133138

134139
// Per line checks
@@ -144,21 +149,21 @@ pub fn begin_style_check(ast: TopAst, file: String, rules: &CurrentRules) -> Res
144149

145150
post_process_linting_errors(&mut linting_errors);
146151

147-
Ok(linting_errors)
152+
Ok(linting_errors.into_iter().map(|e| e.error).collect())
148153
}
149154

150-
fn post_process_linting_errors(errors: &mut Vec<LocalDMLError>) {
155+
fn post_process_linting_errors(errors: &mut Vec<DMLStyleError>) {
151156
// Collect in2 ranges
152157
let in2_ranges: Vec<_> = errors.iter()
153-
.filter(|error| error.description == IN2Rule::description())
154-
.map(|error| error.range)
158+
.filter(|style_err| style_err.rule_type == RuleType::IN2)
159+
.map(|style_err| style_err.error.range)
155160
.collect();
156161

157162
// Remove linting errors that are in in2 rows
158-
errors.retain(|error| {
163+
errors.retain(|style_err| {
159164
!in2_ranges.iter().any(|range|
160-
(range.row_start == error.range.row_start || range.row_end == error.range.row_end)
161-
&& error.description != IN2Rule::description())
165+
(range.row_start == style_err.error.range.row_start || range.row_end == style_err.error.range.row_end)
166+
&& style_err.rule_type != RuleType::IN2)
162167
});
163168
}
164169

0 commit comments

Comments
 (0)