From 40e83c87ebabd837eed7d97845bf24f36981610c Mon Sep 17 00:00:00 2001 From: Dmitry Zhifarsky Date: Sat, 30 Apr 2022 13:51:17 +0400 Subject: [PATCH 1/3] fix: corretly handle disabling rules with false --- .../models/analysis_options.dart | 38 +++++++++++++------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/lib/src/config_builder/models/analysis_options.dart b/lib/src/config_builder/models/analysis_options.dart index 585f57c202..1aeaaa3f6c 100644 --- a/lib/src/config_builder/models/analysis_options.dart +++ b/lib/src/config_builder/models/analysis_options.dart @@ -64,18 +64,32 @@ class AnalysisOptions { } if (data is Iterable) { - return Map.unmodifiable(Map>.fromEntries([ - ...data.whereType().map((node) => MapEntry(node, {})), - ...data - .whereType>() - .where((node) => - node.keys.length == 1 && - node.values.first is Map) - .map((node) => MapEntry( - node.keys.first, - node.values.first as Map, - )), - ])); + return Map.unmodifiable(Map>.fromEntries( + data.fold([], (previousValue, element) { + if (element is String) { + return [...previousValue, MapEntry(element, {})]; + } + + if (element is Map) { + final hasSingleKey = element.keys.length == 1; + final value = element.values.first; + + if (hasSingleKey && value is Map || value is bool) { + final updatedValue = value is bool + ? {'enabled': value} + : value as Map; + + return [ + ...previousValue, + MapEntry(element.keys.first, updatedValue), + ]; + } + } + + return previousValue; + }), + )..removeWhere((key, value) => + (value['enabled'] is bool && value['enabled'] == false))); } else if (data is Map) { final rulesNode = data; From 38c7930623f407975469af3d66c416624ad86ef5 Mon Sep 17 00:00:00 2001 From: Dmitry Zhifarsky Date: Sat, 30 Apr 2022 14:46:56 +0400 Subject: [PATCH 2/3] chore: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f8bac6246f..c0cfb6a5d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Unreleased +* fix: correctly handle disabling rules with false. * fix: dart-code-metrics crash saying `Bad state: No element` when running command. ## 4.14.0 From 0e07796a5d00504179b90488da2a8724dc7abb37 Mon Sep 17 00:00:00 2001 From: Dmitry Zhifarsky Date: Sun, 1 May 2022 16:30:20 +0400 Subject: [PATCH 3/3] test: add test --- .../models/analysis_options_test.dart | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/test/src/config_builder/models/analysis_options_test.dart b/test/src/config_builder/models/analysis_options_test.dart index ec0c2fc3b9..890d9fbaa3 100644 --- a/test/src/config_builder/models/analysis_options_test.dart +++ b/test/src/config_builder/models/analysis_options_test.dart @@ -153,6 +153,12 @@ void main() { 'rule-id3', ], 'rules4': null, + 'rules5': [ + 'rule-id1', + 'rule-id2', + 'rule-id3', + {'rule-id1': false}, + ], }, }); @@ -185,6 +191,15 @@ void main() { ); expect(options.readMapOfMap(['dart_code_metrics', 'rules4']), isEmpty); + + expect( + options.readMapOfMap(['dart_code_metrics', 'rules5']), + allOf( + containsPair('rule-id2', {}), + containsPair('rule-id3', {}), + hasLength(2), + ), + ); }); test(