Skip to content
This repository was archived by the owner on Jul 16, 2023. It is now read-only.

Commit 9d9e50d

Browse files
xsahil03xdkrutskikh
authored andcommitted
feat: add support for global rules-exclude
1 parent 20e5a9f commit 9d9e50d

File tree

8 files changed

+69
-6
lines changed

8 files changed

+69
-6
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## 4.2.0-dev.5
4+
5+
* Add support for global rules-exclude
6+
37
## 4.2.0-dev.4
48

59
* Fix rule and metrics excludes for monorepos.

example/example.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Future<void> main() async {
1717
'maximum-nesting-level': '5',
1818
'number-of-methods': '10',
1919
},
20+
excludeForRulesPatterns: ['test/**'],
2021
rules: {
2122
'double-literal-format': {},
2223
'newline-before-return': {'severity': 'info'},

lib/src/analyzers/lint_analyzer/lint_analysis_config.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import 'rules/models/rule.dart';
1111
class LintAnalysisConfig {
1212
final Iterable<Glob> globalExcludes;
1313
final Iterable<Rule> codeRules;
14+
final Iterable<Glob> rulesExcludes;
1415
final Iterable<ObsoletePattern> antiPatterns;
1516
final Iterable<Metric> classesMetrics;
1617
final Iterable<Metric> methodsMetrics;
@@ -21,6 +22,7 @@ class LintAnalysisConfig {
2122
const LintAnalysisConfig(
2223
this.globalExcludes,
2324
this.codeRules,
25+
this.rulesExcludes,
2426
this.antiPatterns,
2527
this.classesMetrics,
2628
this.methodsMetrics,

lib/src/analyzers/lint_analyzer/lint_analyzer.dart

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -151,12 +151,17 @@ class LintAnalyzer {
151151
);
152152
final relativePath = relative(filePath, from: rootFolder);
153153

154-
final issues = _checkOnCodeIssues(
155-
ignores,
156-
internalResult,
157-
config,
158-
filePath,
159-
);
154+
final issues = <Issue>[];
155+
if (!isExcluded(filePath, config.rulesExcludes)) {
156+
issues.addAll(
157+
_checkOnCodeIssues(
158+
ignores,
159+
internalResult,
160+
config,
161+
filePath,
162+
),
163+
);
164+
}
160165

161166
if (!isExcluded(filePath, config.metricsExcludes)) {
162167
final visitor = ScopeVisitor();

lib/src/analyzers/lint_analyzer/lint_config.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@ class LintConfig {
1212
final Iterable<String> excludeForMetricsPatterns;
1313
final Map<String, Object> metrics;
1414
final Map<String, Map<String, Object>> rules;
15+
final Iterable<String> excludeForRulesPatterns;
1516
final Map<String, Map<String, Object>> antiPatterns;
1617

1718
const LintConfig({
1819
required this.excludePatterns,
1920
required this.excludeForMetricsPatterns,
2021
required this.metrics,
2122
required this.rules,
23+
required this.excludeForRulesPatterns,
2224
required this.antiPatterns,
2325
});
2426

@@ -31,6 +33,8 @@ class LintConfig {
3133
options.readIterableOfString([_rootKey, 'metrics-exclude']),
3234
metrics: options.readMap([_rootKey, 'metrics']),
3335
rules: options.readMapOfMap([_rootKey, 'rules']),
36+
excludeForRulesPatterns:
37+
options.readIterableOfString([_rootKey, 'rules-exclude']),
3438
antiPatterns: options.readMapOfMap([_rootKey, 'anti-patterns']),
3539
);
3640
}
@@ -44,6 +48,7 @@ class LintConfig {
4448
metric.id: arguments.metricsConfig[metric.id]!,
4549
},
4650
rules: const {},
51+
excludeForRulesPatterns: const [],
4752
antiPatterns: const {},
4853
);
4954

@@ -56,6 +61,10 @@ class LintConfig {
5661
metrics: mergeMaps(defaults: metrics, overrides: overrides.metrics),
5762
rules: mergeMaps(defaults: rules, overrides: overrides.rules)
5863
.cast<String, Map<String, Object>>(),
64+
excludeForRulesPatterns: {
65+
...excludeForRulesPatterns,
66+
...overrides.excludeForRulesPatterns,
67+
},
5968
antiPatterns:
6069
mergeMaps(defaults: antiPatterns, overrides: overrides.antiPatterns)
6170
.cast<String, Map<String, Object>>(),

lib/src/config_builder/config_builder.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class ConfigBuilder {
2727
LintAnalysisConfig(
2828
prepareExcludes(config.excludePatterns, excludesRootFolder),
2929
getRulesById(config.rules),
30+
prepareExcludes(config.excludeForRulesPatterns, excludesRootFolder),
3031
getPatternsById(config.antiPatterns),
3132
classMetrics ??
3233
getMetrics(

test/analyzers/lint_analyzer/lint_analyzer_test.dart

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,23 @@ void main() {
130130

131131
expect(ids, List.filled(1, 'avoid-late-keyword'));
132132
});
133+
134+
test('should not report rules', () async {
135+
final config = _createConfig(
136+
rules: {'avoid-late-keyword': {}},
137+
excludeForRulesPatterns: ['test/**'],
138+
);
139+
140+
final result = await analyzer.runCliAnalysis(
141+
folders,
142+
rootDirectory,
143+
config,
144+
);
145+
146+
final report =
147+
reportForFile(result, 'lint_analyzer_exclude_example.dart').issues;
148+
expect(report, isEmpty);
149+
});
133150
},
134151
testOn: 'posix',
135152
);
@@ -141,13 +158,15 @@ LintConfig _createConfig({
141158
Map<String, Object> metrics = const {},
142159
Iterable<String> excludeForMetricsPatterns = const [],
143160
Map<String, Map<String, Object>> rules = const {},
161+
Iterable<String> excludeForRulesPatterns = const [],
144162
}) =>
145163
LintConfig(
146164
antiPatterns: antiPatterns,
147165
excludePatterns: excludePatterns,
148166
metrics: metrics,
149167
excludeForMetricsPatterns: excludeForMetricsPatterns,
150168
rules: rules,
169+
excludeForRulesPatterns: excludeForRulesPatterns,
151170
);
152171

153172
LintFileReport reportForFile(

test/analyzers/lint_analyzer/lint_config_test.dart

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ const _options = AnalysisOptions('path', {
2424
},
2525
'metrics-exclude': ['test/**', 'examples/**'],
2626
'rules': {'rule-id1': false, 'rule-id2': true, 'rule-id3': true},
27+
'rules-exclude': ['test/**', 'examples/**'],
2728
},
2829
});
2930

@@ -35,6 +36,7 @@ const _defaults = LintConfig(
3536
'metric-id2': '10',
3637
'metric-id3': '5',
3738
},
39+
excludeForRulesPatterns: ['test/**'],
3840
rules: {
3941
'rule-id1': {},
4042
'rule-id2': {'severity': 'info'},
@@ -48,6 +50,7 @@ const _empty = LintConfig(
4850
excludePatterns: [],
4951
excludeForMetricsPatterns: [],
5052
metrics: {},
53+
excludeForRulesPatterns: [],
5154
rules: {},
5255
antiPatterns: {},
5356
);
@@ -61,6 +64,7 @@ const _merged = LintConfig(
6164
'metric-id3': '5',
6265
'metric-id4': '0',
6366
},
67+
excludeForRulesPatterns: ['test/**', 'examples/**'],
6468
rules: {
6569
'rule-id1': {},
6670
'rule-id2': {'severity': 'warning'},
@@ -78,6 +82,7 @@ const _overrides = LintConfig(
7882
'metric-id1': '5',
7983
'metric-id4': '0',
8084
},
85+
excludeForRulesPatterns: ['examples/**'],
8186
rules: {
8287
'rule-id2': {'severity': 'warning'},
8388
},
@@ -96,6 +101,7 @@ void main() {
96101
expect(config.excludePatterns, isEmpty);
97102
expect(config.excludeForMetricsPatterns, isEmpty);
98103
expect(config.metrics, isEmpty);
104+
expect(config.excludeForRulesPatterns, isEmpty);
99105
expect(config.rules, isEmpty);
100106
});
101107

@@ -116,6 +122,10 @@ void main() {
116122
'metric-id4': '0',
117123
}),
118124
);
125+
expect(
126+
config.excludeForRulesPatterns,
127+
equals(['test/**', 'examples/**']),
128+
);
119129
expect(
120130
config.rules,
121131
equals({
@@ -136,6 +146,10 @@ void main() {
136146
equals(_defaults.excludeForMetricsPatterns),
137147
);
138148
expect(result.metrics, equals(_defaults.metrics));
149+
expect(
150+
result.excludeForRulesPatterns,
151+
equals(_defaults.excludeForRulesPatterns),
152+
);
139153
expect(result.rules, equals(_defaults.rules));
140154
});
141155
test('empty and overrides configs', () {
@@ -147,6 +161,10 @@ void main() {
147161
equals(_overrides.excludeForMetricsPatterns),
148162
);
149163
expect(result.metrics, equals(_overrides.metrics));
164+
expect(
165+
result.excludeForRulesPatterns,
166+
equals(_overrides.excludeForRulesPatterns),
167+
);
150168
expect(result.rules, equals(_overrides.rules));
151169
});
152170
test('defaults and overrides configs', () {
@@ -158,6 +176,10 @@ void main() {
158176
equals(_merged.excludeForMetricsPatterns),
159177
);
160178
expect(result.metrics, equals(_merged.metrics));
179+
expect(
180+
result.excludeForRulesPatterns,
181+
equals(_merged.excludeForRulesPatterns),
182+
);
161183
expect(result.rules, equals(_merged.rules));
162184
});
163185
});

0 commit comments

Comments
 (0)