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

Commit 5f224b4

Browse files
authored
fix: correctly handle disabling rules with false (#822)
* fix: corretly handle disabling rules with false * chore: update changelog * test: add test
1 parent c451262 commit 5f224b4

File tree

3 files changed

+42
-12
lines changed

3 files changed

+42
-12
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## Unreleased
44

5+
* fix: correctly handle disabling rules with false.
56
* fix: dart-code-metrics crash saying `Bad state: No element` when running command.
67

78
## 4.14.0

lib/src/config_builder/models/analysis_options.dart

+26-12
Original file line numberDiff line numberDiff line change
@@ -64,18 +64,32 @@ class AnalysisOptions {
6464
}
6565

6666
if (data is Iterable<Object>) {
67-
return Map.unmodifiable(Map<String, Map<String, Object>>.fromEntries([
68-
...data.whereType<String>().map((node) => MapEntry(node, {})),
69-
...data
70-
.whereType<Map<String, Object>>()
71-
.where((node) =>
72-
node.keys.length == 1 &&
73-
node.values.first is Map<String, Object>)
74-
.map((node) => MapEntry(
75-
node.keys.first,
76-
node.values.first as Map<String, Object>,
77-
)),
78-
]));
67+
return Map.unmodifiable(Map<String, Map<String, Object>>.fromEntries(
68+
data.fold([], (previousValue, element) {
69+
if (element is String) {
70+
return [...previousValue, MapEntry(element, <String, Object>{})];
71+
}
72+
73+
if (element is Map<String, Object>) {
74+
final hasSingleKey = element.keys.length == 1;
75+
final value = element.values.first;
76+
77+
if (hasSingleKey && value is Map<String, Object> || value is bool) {
78+
final updatedValue = value is bool
79+
? <String, Object>{'enabled': value}
80+
: value as Map<String, Object>;
81+
82+
return [
83+
...previousValue,
84+
MapEntry(element.keys.first, updatedValue),
85+
];
86+
}
87+
}
88+
89+
return previousValue;
90+
}),
91+
)..removeWhere((key, value) =>
92+
(value['enabled'] is bool && value['enabled'] == false)));
7993
} else if (data is Map<String, Object>) {
8094
final rulesNode = data;
8195

test/src/config_builder/models/analysis_options_test.dart

+15
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,12 @@ void main() {
153153
'rule-id3',
154154
],
155155
'rules4': null,
156+
'rules5': [
157+
'rule-id1',
158+
'rule-id2',
159+
'rule-id3',
160+
{'rule-id1': false},
161+
],
156162
},
157163
});
158164

@@ -185,6 +191,15 @@ void main() {
185191
);
186192

187193
expect(options.readMapOfMap(['dart_code_metrics', 'rules4']), isEmpty);
194+
195+
expect(
196+
options.readMapOfMap(['dart_code_metrics', 'rules5']),
197+
allOf(
198+
containsPair('rule-id2', <String, Object>{}),
199+
containsPair('rule-id3', <String, Object>{}),
200+
hasLength(2),
201+
),
202+
);
188203
});
189204

190205
test(

0 commit comments

Comments
 (0)