diff --git a/CHANGELOG.md b/CHANGELOG.md index 6cc0ef4b12..4e3ce598fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Unreleased +* fix: ignore enum constant arguments for [`no-magic-number`](https://dartcodemetrics.dev/docs/rules/common/no-magic-number). * fix: correctly handle prefixed enums and static instance fields for [`prefer-moving-to-variable`](https://dartcodemetrics.dev/docs/rules/common/prefer-moving-to-variable). * feat: add static code diagnostic [`prefer-provide-intl-description`](https://dartcodemetrics.dev/docs/rules/intl/prefer-provide-intl-description). * feat: exclude `.freezed.dart` files by default. diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/no_magic_number/no_magic_number_rule.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/no_magic_number/no_magic_number_rule.dart index 57c82295f5..139d9a3964 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/no_magic_number/no_magic_number_rule.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/no_magic_number/no_magic_number_rule.dart @@ -53,6 +53,7 @@ class NoMagicNumberRule extends CommonRule { .where(_isNotInsideConstConstructor) .where(_isNotInDateTime) .where(_isNotInsideIndexExpression) + .where(_isNotInsideEnumConstantArguments) .map((lit) => createIssue( rule: this, location: nodeLocation(node: lit, source: source), @@ -80,6 +81,14 @@ class NoMagicNumberRule extends CommonRule { ) == null; + bool _isNotInsideEnumConstantArguments(Literal l) { + final node = l.thisOrAncestorMatching( + (ancestor) => ancestor is EnumConstantArguments, + ); + + return node == null; + } + bool _isNotInsideCollectionLiteral(Literal l) => l.parent is! TypedLiteral; bool _isNotInsideConstMap(Literal l) { diff --git a/test/src/analyzers/lint_analyzer/rules/rules_list/no_magic_number/examples/enum_example.dart b/test/src/analyzers/lint_analyzer/rules/rules_list/no_magic_number/examples/enum_example.dart new file mode 100644 index 0000000000..7022821986 --- /dev/null +++ b/test/src/analyzers/lint_analyzer/rules/rules_list/no_magic_number/examples/enum_example.dart @@ -0,0 +1,17 @@ +enum ExampleMagicNumbers { + second(2), + third(3); + + final int value; + + const ExampleMagicNumbers(this.value); +} + +enum ExampleNamedMagicNumbers { + second(value: 2), + third(value: 3); + + final int value; + + const ExampleNamedMagicNumbers({required this.value}); +} diff --git a/test/src/analyzers/lint_analyzer/rules/rules_list/no_magic_number/no_magic_number_rule_test.dart b/test/src/analyzers/lint_analyzer/rules/rules_list/no_magic_number/no_magic_number_rule_test.dart index 5a2f2b97ed..79ffe1034c 100644 --- a/test/src/analyzers/lint_analyzer/rules/rules_list/no_magic_number/no_magic_number_rule_test.dart +++ b/test/src/analyzers/lint_analyzer/rules/rules_list/no_magic_number/no_magic_number_rule_test.dart @@ -9,6 +9,7 @@ const _incorrectExamplePath = 'no_magic_number/examples/incorrect_example.dart'; const _exceptionsExamplePath = 'no_magic_number/examples/exceptions_example.dart'; const _arrayExamplePath = 'no_magic_number/examples/array_example.dart'; +const _enumExamplePath = 'no_magic_number/examples/enum_example.dart'; void main() { group('NoMagicNumberRule', () { @@ -42,6 +43,13 @@ void main() { RuleTestHelper.verifyNoIssues(issues); }); + test("doesn't report enum arguments", () async { + final unit = await RuleTestHelper.resolveFromFile(_enumExamplePath); + final issues = NoMagicNumberRule().check(unit); + + RuleTestHelper.verifyNoIssues(issues); + }); + test("doesn't report exceptional code", () async { final unit = await RuleTestHelper.resolveFromFile(_exceptionsExamplePath); final issues = NoMagicNumberRule().check(unit);