diff --git a/dcm_global.yaml b/dcm_global.yaml index acf8319..4108b6d 100644 --- a/dcm_global.yaml +++ b/dcm_global.yaml @@ -1 +1 @@ -version: "1.33.0" +version: "1.35.0" diff --git a/packages/netglade_analysis/CHANGELOG.md b/packages/netglade_analysis/CHANGELOG.md index ca90d58..7c5dd10 100644 --- a/packages/netglade_analysis/CHANGELOG.md +++ b/packages/netglade_analysis/CHANGELOG.md @@ -1,3 +1,11 @@ +## 21.0.0 +- Adhere to DCM 1.34.0 and 1.35.0: + - Add avoid-complex-conditions + - Add avoid-immediately-invoked-functions + - Add avoid-assigning-notifiers + - Add use-ref-and-state-synchronously + - Update maintainability-index metric to match new config + ## 20.0.1 - Remove (ignore) deprecated_member_use_from_same_package diagnostic diff --git a/packages/netglade_analysis/README.md b/packages/netglade_analysis/README.md index c00b207..0cc9e3c 100644 --- a/packages/netglade_analysis/README.md +++ b/packages/netglade_analysis/README.md @@ -23,7 +23,7 @@ To use the lints, add as a dev dependency in your `pubspec.yaml`: ```yaml dev_dependencies: - netglade_analysis: ^20.0.0 + netglade_analysis: ^21.0.0 ``` Then, add an include in `analysis_options.yaml`: diff --git a/packages/netglade_analysis/lib/dcm.yaml b/packages/netglade_analysis/lib/dcm.yaml index 432ba9c..043062b 100644 --- a/packages/netglade_analysis/lib/dcm.yaml +++ b/packages/netglade_analysis/lib/dcm.yaml @@ -1,4 +1,4 @@ -# version 1.32.0 - https://dcm.dev/changelog +# version 1.35.0 - https://dcm.dev/changelog dart_code_metrics: rules: ### Common @@ -28,6 +28,7 @@ dart_code_metrics: # - avoid-collection-mutating-methods # sometimes it's ok - avoid-commented-out-code - avoid-complex-arithmetic-expressions + - avoid-complex-conditions - avoid-complex-loop-conditions - avoid-conditions-with-boolean-literals - avoid-constant-assert-conditions @@ -76,6 +77,7 @@ dart_code_metrics: - avoid-ignoring-return-values: exclude: - test/** + - avoid-immediately-invoked-functions - avoid-implicitly-nullable-extension-types - avoid-importing-entrypoint-exports - avoid-inconsistent-digit-separators @@ -318,6 +320,7 @@ dart_code_metrics: - no-object-declaration # - parameters-ordering # way too strict - pass-correct-accepted-type + # - pass-optional-argument * OK, we just don't have global config - pattern-fields-ordering - prefer-abstract-final-static-class - prefer-add-all @@ -563,6 +566,7 @@ dart_code_metrics: - prefer-sealed-bloc-state ### Riverpod + - avoid-assigning-notifiers - avoid-calling-notifier-members-inside-build - avoid-notifier-constructors - avoid-nullable-async-value-pattern @@ -573,6 +577,7 @@ dart_code_metrics: - avoid-unnecessary-consumer-widgets - dispose-provided-instances - prefer-immutable-provider-arguments + - use-ref-and-state-synchronously - use-ref-read-synchronously ### Equatable @@ -625,6 +630,7 @@ dart_code_metrics: # - provide-correct-intl-args ### Easy Localization + # - avoid-missing-tr-on-strings # we dont like this - avoid-missing-tr ### Angular - not used @@ -655,7 +661,7 @@ dart_code_metrics: cyclomatic-complexity: 20 halstead-volume: 150 lines-of-code: 200 - maintainability-index: 50 + maintainability-index: 0.5 maximum-nesting-level: 5 number-of-parameters: 4 number-of-used-widgets: 20 diff --git a/packages/netglade_analysis/pubspec.yaml b/packages/netglade_analysis/pubspec.yaml index be83e0c..57dbff6 100644 --- a/packages/netglade_analysis/pubspec.yaml +++ b/packages/netglade_analysis/pubspec.yaml @@ -1,7 +1,7 @@ name: netglade_analysis resolution: workspace description: Lint rules for Dart and Flutter used internally at netglade. -version: 20.0.1 +version: 21.0.0 repository: https://github.com/netglade/flutter_core/tree/main/packages/netglade_analysis issue_tracker: https://github.com/netglade/flutter_core/issues homepage: https://github.com/netglade/flutter_core diff --git a/packages/netglade_flutter_utils/example/pubspec.yaml b/packages/netglade_flutter_utils/example/pubspec.yaml index da5a4c7..54d36c9 100644 --- a/packages/netglade_flutter_utils/example/pubspec.yaml +++ b/packages/netglade_flutter_utils/example/pubspec.yaml @@ -10,7 +10,7 @@ environment: dependencies: flutter: sdk: flutter - netglade_analysis: ^20.0.0 + netglade_analysis: ^21.0.0 netglade_flutter_utils: path: .. diff --git a/packages/netglade_flutter_utils/pubspec.yaml b/packages/netglade_flutter_utils/pubspec.yaml index 251ea5c..5d43737 100644 --- a/packages/netglade_flutter_utils/pubspec.yaml +++ b/packages/netglade_flutter_utils/pubspec.yaml @@ -20,7 +20,7 @@ dev_dependencies: flutter_test: sdk: flutter mocktail: ^1.0.0 - netglade_analysis: ^20.0.0 + netglade_analysis: ^21.0.0 test: ^1.25.8 flutter: diff --git a/packages/netglade_utils/example/pubspec.yaml b/packages/netglade_utils/example/pubspec.yaml index f8a7eb5..0a8f01a 100644 --- a/packages/netglade_utils/example/pubspec.yaml +++ b/packages/netglade_utils/example/pubspec.yaml @@ -7,6 +7,6 @@ environment: sdk: ^3.10.0 dependencies: - netglade_analysis: ^20.0.0 + netglade_analysis: ^21.0.0 netglade_utils: path: .. diff --git a/packages/netglade_utils/pubspec.yaml b/packages/netglade_utils/pubspec.yaml index d00ebc4..9799d91 100644 --- a/packages/netglade_utils/pubspec.yaml +++ b/packages/netglade_utils/pubspec.yaml @@ -18,5 +18,5 @@ dependencies: mocktail: ^1.0.0 dev_dependencies: - netglade_analysis: ^20.0.0 + netglade_analysis: ^21.0.0 test: ^1.25.2 diff --git a/packages/netglade_utils/test/src/extensions/date_time_extensions_test.dart b/packages/netglade_utils/test/src/extensions/date_time_extensions_test.dart index ee5353c..a0c36bc 100644 --- a/packages/netglade_utils/test/src/extensions/date_time_extensions_test.dart +++ b/packages/netglade_utils/test/src/extensions/date_time_extensions_test.dart @@ -1,13 +1,20 @@ +// ignore_for_file: prefer-boolean-prefixes + import 'package:netglade_utils/netglade_utils.dart'; import 'package:test/test.dart'; void main() { test('nowWithoutTime', () { + // arrange + + // act final date = DateTimeExtensions.nowWithoutTime(); + + // assert expect(DateTime.now().withoutTime, equals(date)); }); - { + for (final MapEntry(:key, :value) in { DateTime(2022, 11, 28): DateTime(2022, 12, 2), DateTime(2022, 11, 29): DateTime(2022, 12, 2), DateTime(2022, 11, 30): DateTime(2022, 12, 2), @@ -15,13 +22,19 @@ void main() { DateTime(2022, 12, 2): DateTime(2022, 12, 2), DateTime(2022, 12, 3): DateTime(2022, 12, 9), DateTime(2022, 12, 4): DateTime(2022, 12, 9), - }.forEach((key, value) { + }.entries) { test('EndOfWorkWeek: $key should be $value', () { - expect(key.endOfWorkWeek, equals(value)); + // arrange + + // act + final processed = key.endOfWorkWeek; + + // assert + expect(processed, equals(value)); }); - }); + } - { + for (final MapEntry(:key, :value) in { DateTime(2022, 11, 28): DateTime(2022, 12, 4), DateTime(2022, 11, 29): DateTime(2022, 12, 4), DateTime(2022, 11, 30): DateTime(2022, 12, 4), @@ -29,29 +42,60 @@ void main() { DateTime(2022, 12, 2): DateTime(2022, 12, 4), DateTime(2022, 12, 3): DateTime(2022, 12, 4), DateTime(2022, 12, 4): DateTime(2022, 12, 4), - }.forEach((key, value) { + }.entries) { test('EndOfWeek: $key should be $value', () { - expect(key.endOfWeek, equals(value)); + // arrange + + // act + final processed = key.endOfWeek; + + // assert + expect(processed, equals(value)); }); - }); + } test('isToday', () { + // arrange final date = DateTime.now(); - expect(date.isToday, isTrue); + + // act + final processed = date.isToday; + + // assert + expect(processed, isTrue); }); test('isTomorrow', () { - final date = DateTime.now().add(const Duration(days: 1)); - expect(date.isTomorrow, isTrue); + // arrange + const durationToAdd = Duration(days: 1); + + // act + final date = DateTime.now().add(durationToAdd); + final processed = date.isTomorrow; + + // assert + expect(processed, isTrue); }); test('withoutTime', () { + // arrange final date = DateTime(2022, 1, 1, 4, 30, 30); - expect(date.withoutTime, equals(DateTime(2022))); + + // act + final processed = date.withoutTime; + + // assert + expect(processed, equals(DateTime(2022))); }); test('withoutDate', () { + // arrange final date = DateTime(2022, 1, 1, 4, 30, 30); - expect(date.withoutTime, equals(DateTime(2022))); + + // act + final processed = date.withoutTime; + + // assert + expect(processed, equals(DateTime(2022))); }); } diff --git a/packages/netglade_utils/test/src/extensions/string_extensions_test.dart b/packages/netglade_utils/test/src/extensions/string_extensions_test.dart index 41b0574..95c7bb0 100644 --- a/packages/netglade_utils/test/src/extensions/string_extensions_test.dart +++ b/packages/netglade_utils/test/src/extensions/string_extensions_test.dart @@ -1,4 +1,4 @@ -// ignore_for_file: prefer_const_declarations, unnecessary_nullable_for_final_variable_declarations, omit_local_variable_types +// ignore_for_file: prefer_const_declarations, unnecessary_nullable_for_final_variable_declarations, omit_local_variable_types, prefer-boolean-prefixes import 'package:netglade_utils/netglade_utils.dart'; import 'package:test/test.dart'; @@ -25,40 +25,82 @@ void main() { group('isBlank', () { group('on String', () { test('empty message is isBlank', () { + // arrange final String value = ''; - expect(value.isBlank, isTrue); + + // act + final processed = value.isBlank; + + // assert + expect(processed, isTrue); }); test('message with whitespaces is isBlank', () { + // arrange final String value = ' '; - expect(value.isBlank, isTrue); + + // act + final processed = value.isBlank; + + // assert + expect(processed, isTrue); }); test('message with non-whitespace characters is not isBlank', () { + // arrange final String value = 'xxx'; - expect(value.isBlank, isFalse); + + // act + final processed = value.isBlank; + + // assert + expect(processed, isFalse); }); }); group('on String?', () { test('empty message is isBlank', () { + // arrange final String? value = ''; - expect(value?.isBlank, isTrue); + + // act + final processed = value?.isBlank; + + // assert + expect(processed, isTrue); }); test('null message is not isBlank', () { + // arrange final String? value = null; - expect(value?.isBlank, isNull); + + // act + final processed = value?.isBlank; + + // assert + expect(processed, isNull); }); test('message with whitespaces is isBlank', () { + // arrange final String? value = ' '; - expect(value?.isBlank, isTrue); + + // act + final processed = value?.isBlank; + + // assert + expect(processed, isTrue); }); test('message with non-whitespace characters is not isBlank', () { + // arrange final String? value = 'xxx'; - expect(value?.isBlank, isFalse); + + // act + final processed = value?.isBlank; + + // assert + expect(processed, isFalse); }); }); }); @@ -66,40 +108,82 @@ void main() { group('isNotBlank', () { group('on String', () { test('empty message is not isNotBlank', () { + // arrange final String value = ''; - expect(value.isNotBlank, isFalse); + + // act + final processed = value.isNotBlank; + + // assert + expect(processed, isFalse); }); test('message with whitespaces is not isNotBlank', () { + // arrange final String value = ' '; - expect(value.isNotBlank, isFalse); + + // act + final processed = value.isNotBlank; + + // assert + expect(processed, isFalse); }); test('message with non-whitespace characters is isNotBlank', () { + // arrange final String value = 'xxx'; - expect(value.isNotBlank, isTrue); + + // act + final processed = value.isNotBlank; + + // assert + expect(processed, isTrue); }); }); group('on String?', () { test('empty message is not isNotBlank', () { + // arrange final String? value = ''; - expect(value?.isNotBlank, isFalse); + + // act + final processed = value?.isNotBlank; + + // assert + expect(processed, isFalse); }); test('message is null is null', () { + // arrange final String? value = null; - expect(value?.isNotBlank, isNull); + + // act + final processed = value?.isNotBlank; + + // assert + expect(processed, isNull); }); test('message has whitespaces is not isNotBlank', () { + // arrange final String? value = ' '; - expect(value?.isNotBlank, isFalse); + + // act + final processed = value?.isNotBlank; + + // assert + expect(processed, isFalse); }); test('message has non-whitespace characters is isNotBlank', () { + // arrange final String? value = 'xxx'; - expect(value?.isNotBlank, isTrue); + + // act + final processed = value?.isNotBlank; + + // assert + expect(processed, isTrue); }); }); }); @@ -107,23 +191,47 @@ void main() { group('isNullOrBlank', () { group('on String?', () { test('empty message is isNullOrBlank', () { + // arrange final String? value = ''; - expect(value.isNullOrBlank, isTrue); + + // act + final processed = value.isNullOrBlank; + + // assert + expect(processed, isTrue); }); test('null message is isNullOrBlank', () { + // arrange final String? value = null; - expect(value.isNullOrBlank, isTrue); + + // act + final processed = value.isNullOrBlank; + + // assert + expect(processed, isTrue); }); test('message with whitespaces is isNullOrBlank', () { + // arrange final String? value = ' '; - expect(value.isNullOrBlank, isTrue); + + // act + final processed = value.isNullOrBlank; + + // assert + expect(processed, isTrue); }); test('message with non-whitespace characters is not isNullOrBlank', () { + // arrange final String? value = 'xxx'; - expect(value.isNullOrBlank, isFalse); + + // act + final processed = value.isNullOrBlank; + + // assert + expect(processed, isFalse); }); }); }); @@ -131,23 +239,47 @@ void main() { group('isNullOrEmpty', () { group('on String?', () { test('empty message is isNullOrEmpty', () { + // arrange final String? value = ''; - expect(value.isNullOrEmpty, isTrue); + + // act + final processed = value.isNullOrEmpty; + + // assert + expect(processed, isTrue); }); test('null message is isNullOrEmpty', () { + // arrange final String? value = null; - expect(value.isNullOrEmpty, isTrue); + + // act + final processed = value.isNullOrEmpty; + + // assert + expect(processed, isTrue); }); test('message with whitespaces is not isNullOrEmpty', () { + // arrange final String? value = ' '; - expect(value.isNullOrEmpty, isFalse); + + // act + final processed = value.isNullOrEmpty; + + // assert + expect(processed, isFalse); }); test('message with non-whitespace characters is not isNullOrEmpty', () { + // arrange final String? value = 'xxx'; - expect(value.isNullOrEmpty, isFalse); + + // act + final processed = value.isNullOrEmpty; + + // assert + expect(processed, isFalse); }); }); }); @@ -155,23 +287,47 @@ void main() { group('isNotNullNorEmpty', () { group('on String?', () { test('empty message is not isNotNullNorEmpty', () { + // arrange final String? value = ''; - expect(value.isNotNullNorEmpty, isFalse); + + // act + final processed = value.isNotNullNorEmpty; + + // assert + expect(processed, isFalse); }); test('null message is not isNotNullNorEmpty', () { + // arrange final String? value = null; - expect(value.isNotNullNorEmpty, isFalse); + + // act + final processed = value.isNotNullNorEmpty; + + // assert + expect(processed, isFalse); }); test('message with whitespaces is isNotNullNorEmpty', () { + // arrange final String? value = ' '; - expect(value.isNotNullNorEmpty, isTrue); + + // act + final processed = value.isNotNullNorEmpty; + + // assert + expect(processed, isTrue); }); test('message with non-whitespace characters is isNotNullNorEmpty', () { + // arrange final String? value = 'xxx'; - expect(value.isNotNullNorEmpty, isTrue); + + // act + final processed = value.isNotNullNorEmpty; + + // assert + expect(processed, isTrue); }); }); }); @@ -179,23 +335,47 @@ void main() { group('isNotNullNorBlank', () { group('on String?', () { test('empty message is not isNotNullNorBlank', () { + // arrange final String? value = ''; - expect(value.isNotNullNorBlank, isFalse); + + // act + final processed = value.isNotNullNorBlank; + + // assert + expect(processed, isFalse); }); test('null message is not isNotNullNorBlank', () { + // arrange final String? value = null; - expect(value.isNotNullNorBlank, isFalse); + + // act + final processed = value.isNotNullNorBlank; + + // assert + expect(processed, isFalse); }); test('message with whitespaces is not isNotNullNorBlank', () { + // arrange final String? value = ' '; - expect(value.isNotNullNorBlank, isFalse); + + // act + final processed = value.isNotNullNorBlank; + + // assert + expect(processed, isFalse); }); test('message with non-whitespace characters is isNotNullNorBlank', () { + // arrange final String? value = 'xxx'; - expect(value.isNotNullNorBlank, isTrue); + + // act + final processed = value.isNotNullNorBlank; + + // assert + expect(processed, isTrue); }); }); }); @@ -203,40 +383,82 @@ void main() { group('ifEmpty', () { group('on String', () { test('empty message', () { + // arrange final String value = ''; - expect(value.ifEmpty('aaa'), equals('aaa')); + + // act + final processed = value.ifEmpty('aaa'); + + // assert + expect(processed, equals('aaa')); }); test('message with whitespaces', () { + // arrange final String value = ' '; - expect(value.ifEmpty('aaa'), equals(value)); + + // act + final processed = value.ifEmpty('aaa'); + + // assert + expect(processed, equals(value)); }); test('message with non-whitespace characters', () { + // arrange final String value = 'xxx'; - expect(value.ifEmpty('aaa'), equals(value)); + + // act + final processed = value.ifEmpty('aaa'); + + // assert + expect(processed, equals(value)); }); }); group('on String?', () { test('empty message', () { + // arrange final String? value = ''; - expect(value.ifEmpty('aaa'), equals('aaa')); + + // act + final processed = value.ifEmpty('aaa'); + + // assert + expect(processed, equals('aaa')); }); test('null message', () { + // arrange final String? value = null; - expect(value.ifEmpty('aaa'), equals(value)); + + // act + final processed = value.ifEmpty('aaa'); + + // assert + expect(processed, equals(value)); }); test('message with whitespaces', () { + // arrange final String? value = ' '; - expect(value.ifEmpty('aaa'), equals(value)); + + // act + final processed = value.ifEmpty('aaa'); + + // assert + expect(processed, equals(value)); }); test('message with non-whitespace characters', () { + // arrange final String? value = 'xxx'; - expect(value.ifEmpty('aaa'), equals(value)); + + // act + final processed = value.ifEmpty('aaa'); + + // assert + expect(processed, equals(value)); }); }); }); @@ -244,62 +466,128 @@ void main() { group('ifBlank', () { group('on String', () { test('empty message', () { + // arrange final String value = ''; - expect(value.ifBlank('aaa'), equals('aaa')); + + // act + final processed = value.ifBlank('aaa'); + + // assert + expect(processed, equals('aaa')); }); test('message with whitespaces', () { + // arrange final String value = ' '; - expect(value.ifBlank('aaa'), equals('aaa')); + + // act + final processed = value.ifBlank('aaa'); + + // assert + expect(processed, equals('aaa')); }); test('message with non-whitespace characters', () { + // arrange final String value = 'xxx'; - expect(value.ifBlank('aaa'), equals(value)); + + // act + final processed = value.ifBlank('aaa'); + + // assert + expect(processed, equals(value)); }); }); group('on String?', () { test('empty message', () { + // arrange final String? value = ''; - expect(value.ifBlank('aaa'), equals('aaa')); + + // act + final processed = value.ifBlank('aaa'); + + // assert + expect(processed, equals('aaa')); }); test('null message', () { + // arrange final String? value = null; - expect(value.ifBlank('aaa'), equals(value)); + + // act + final processed = value.ifBlank('aaa'); + + // assert + expect(processed, equals(value)); }); test('message with whitespaces', () { + // arrange final String? value = ' '; - expect(value.ifBlank('aaa'), equals('aaa')); + + // act + final processed = value.ifBlank('aaa'); + + // assert + expect(processed, equals('aaa')); }); test('message with non-whitespace characters', () { + // arrange final String? value = 'xxx'; - expect(value.ifBlank('aaa'), equals(value)); + + // act + final processed = value.ifBlank('aaa'); + + // assert + expect(processed, equals(value)); }); }); group('firstLetterUppercase', () { test('empty message', () { + // arrange final String value = ''; - expect(value.firstLetterUppercase(), equals('')); + + // act + final processed = value.firstLetterUppercase(); + + // assert + expect(processed, equals('')); }); test('message with whitespaces', () { + // arrange final String value = ' '; - expect(value.firstLetterUppercase(), equals(value)); + + // act + final processed = value.firstLetterUppercase(); + + // assert + expect(processed, equals(value)); }); test('message with non-whitespace characters', () { + // arrange final String value = 'xxx'; - expect(value.firstLetterUppercase(), equals('Xxx')); + + // act + final processed = value.firstLetterUppercase(); + + // assert + expect(processed, equals('Xxx')); }); test('message with 1 character', () { + // arrange final String value = 'x'; - expect(value.firstLetterUppercase(), equals('X')); + + // act + final processed = value.firstLetterUppercase(); + + // assert + expect(processed, equals('X')); }); }); });