From 308729ddb649194827042013f6f4e297a971f995 Mon Sep 17 00:00:00 2001 From: tsukuda Date: Fri, 1 Nov 2024 15:11:03 +0900 Subject: [PATCH] fix: warnings-false-detection-in-ColorScheme-definition --- .../example/lints/avoid_hardcoded_color.dart | 21 ++++++++++++++++++- .../lib/src/lints/avoid_hardcoded_color.dart | 19 ++++++++++++++--- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/packages/altive_lints/example/lints/avoid_hardcoded_color.dart b/packages/altive_lints/example/lints/avoid_hardcoded_color.dart index fb27ea4..89c22d6 100644 --- a/packages/altive_lints/example/lints/avoid_hardcoded_color.dart +++ b/packages/altive_lints/example/lints/avoid_hardcoded_color.dart @@ -14,9 +14,28 @@ class MyWidget extends StatelessWidget { // expect_lint: avoid_hardcoded_color const ColoredBox(color: Colors.green), ColoredBox(color: Theme.of(context).colorScheme.primary), - + ColoredBox(color: _colorScheme.primary), const ColoredBox(color: Colors.transparent), ], ); } } +ColorScheme get _colorScheme => const ColorScheme( + primary:Color.fromRGBO(0, 255, 0, 1), + secondary: Color(0xFFF45479), + onSecondary: Color(0xFFFFFFFF), + error: Color(0xFFFF3131), + surface: Color(0xFFFEFEFE), + surfaceDim: Color(0x1F787880), + surfaceTint: Color(0xFFF5F5F5), + surfaceContainerLowest: Color(0xFFF7F7F7), + surfaceContainerLow: Color(0xFFFAFBFC), + surfaceContainerHighest: Color(0xFFFFFFFF), + onSurface: Color(0xFF181A1F), + onSurfaceVariant: Color(0xFF989898), + outline: Color(0xFFDCDCDC), + scrim: Colors.black54, + onPrimary: Color.fromRGBO(100, 100, 100, 11), + onError: Color(0xFFFF3131), + brightness: Brightness.dark, + ); \ No newline at end of file diff --git a/packages/altive_lints/lib/src/lints/avoid_hardcoded_color.dart b/packages/altive_lints/lib/src/lints/avoid_hardcoded_color.dart index f904911..0e28daf 100644 --- a/packages/altive_lints/lib/src/lints/avoid_hardcoded_color.dart +++ b/packages/altive_lints/lib/src/lints/avoid_hardcoded_color.dart @@ -1,3 +1,4 @@ +import 'package:analyzer/dart/ast/ast.dart'; import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:analyzer/error/listener.dart'; @@ -48,7 +49,7 @@ class AvoidHardcodedColor extends DartLintRule { context.registry.addInstanceCreationExpression((node) { final typeName = node.staticType?.getDisplayString(); - if (typeName == 'Color') { + if (typeName == 'Color' && !_isInsideColorScheme(node)) { reporter.atNode(node, _code); } }); @@ -59,11 +60,11 @@ class AvoidHardcodedColor extends DartLintRule { final element = node.staticElement; if (element is PropertyAccessorElement) { final returnType = element.returnType; - // Allow Colors.transparent as a valid hardcoded color, as it serves. + // Allow Colors.transparent as a valid hardcoded color. if (node.identifier.name == 'transparent') { return; } - if (_isColorType(returnType)) { + if (_isColorType(returnType) && !_isInsideColorScheme(node)) { reporter.atNode(node, _code); } } @@ -78,4 +79,16 @@ class AvoidHardcodedColor extends DartLintRule { type.getDisplayString() == 'MaterialColor' || type.getDisplayString() == 'MaterialAccentColor'); } + + bool _isInsideColorScheme(AstNode node) { + var parent = node.parent; + while (parent != null) { + if (parent is InstanceCreationExpression && + parent.staticType?.getDisplayString() == 'ColorScheme') { + return true; + } + parent = parent.parent; + } + return false; + } }