From 91402c2a08c4942c5bd13730acf59baadb471a62 Mon Sep 17 00:00:00 2001 From: Denis Grafov Date: Thu, 30 Sep 2021 19:05:39 +0300 Subject: [PATCH 01/15] update doc --- doc/rules/prefer-const-border-radius.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/rules/prefer-const-border-radius.md b/doc/rules/prefer-const-border-radius.md index cd74a7f0ac..8d3be2a6d8 100644 --- a/doc/rules/prefer-const-border-radius.md +++ b/doc/rules/prefer-const-border-radius.md @@ -6,8 +6,9 @@ prefer-const-border-radius ## Description -BorderRadius.circular constructor calls const BorderRadius.all constructor under the hood. This rule allows to replace -BorderRadius.circular(radius) with const BorderRadius.all(Radius.circular(radius)) if radius is a constant value. +[BorderRadius.circular constructor](https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/painting/border_radius.dart#L292-L295) calls `const BorderRadius.all` constructor under the hood. +This rule allows to replace `BorderRadius.circular(radius)` with `const BorderRadius.all(Radius.circular(radius))` if `radius` is a constant value. +With such replacement, you can pass default `BorderRadius` value into your widget constructor. ### Example From 634377b46a4b418687fd8de23e9f0cfe46abf51c Mon Sep 17 00:00:00 2001 From: Denis Grafov Date: Thu, 30 Sep 2021 19:06:06 +0300 Subject: [PATCH 02/15] update test example --- .../examples/example.dart | 57 +++++++------------ .../examples/flutter_define.dart | 55 ++++++++++++++++++ 2 files changed, 74 insertions(+), 38 deletions(-) create mode 100644 test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/flutter_define.dart diff --git a/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/example.dart b/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/example.dart index 0288fac542..7567996888 100644 --- a/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/example.dart +++ b/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/example.dart @@ -1,47 +1,28 @@ -const _constRadius = BorderRadius.all(16); -final _finalRadius = BorderRadius.circular(8); // LINT +import 'flutter_define.dart'; + +const _constRadius = BorderRadius.all(Radius.circular(0.0)); +final _finalRadius = BorderRadius.circular(1.0); // LINT +const _constValue = 10.0; +final _finalValue = 15.0; +var _varValues = 20.0; class MyWidget extends StatelessWidget { - static final staticRadius = BorderRadius.circular(32); // LINT + static final staticRadius = BorderRadius.circular(2.0); // LINT Widget build(BuildContext _) { - final buildMethodRadius = BorderRadius.circular(230); // LINT + final buildMethodRadius = BorderRadius.circular(3.0); // LINT + var buildMethodRadiusVar = BorderRadius.circular(4.0); // LINT return Column(children: [ - const Container(borderRadius: _constRadius), - Container(borderRadius: BorderRadius.circular(32)), // LINT - Container(borderRadius: staticRadius), - Container(borderRadius: buildMethodRadius), - Container(borderRadius: _finalRadius), + const ClipRRect(borderRadius: _constRadius), + ClipRRect(borderRadius: BorderRadius.circular(5.0)), // LINT + ClipRRect(borderRadius: staticRadius), + ClipRRect(borderRadius: buildMethodRadius), + ClipRRect(borderRadius: buildMethodRadiusVar), + ClipRRect(borderRadius: BorderRadius.circular(_finalValue)), + ClipRRect(borderRadius: BorderRadius.circular(_constValue)), // LINT + ClipRRect(borderRadius: BorderRadius.circular(_constValue - _constValue)), // LINT + ClipRRect(borderRadius: BorderRadius.circular(_constValue - _finalValue)), ]); } } - -class BorderRadius { - final double borderRadius; - - const BorderRadius.all(this.borderRadius); - - BorderRadius.circular(this.borderRadius); -} - -class Container extends Widget { - final Widget? child; - final BorderRadius? borderRadius; - - const Container({this.child, this.borderRadius}); -} - -class Column extends Widget { - final List children; - - Column({required this.children}); -} - -class StatelessWidget extends Widget {} - -class Widget { - const Widget(); -} - -class BuildContext {} diff --git a/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/flutter_define.dart b/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/flutter_define.dart new file mode 100644 index 0000000000..0c51f93fbf --- /dev/null +++ b/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/flutter_define.dart @@ -0,0 +1,55 @@ +class BorderRadius { + final Radius topLeft; + final Radius topRight; + final Radius bottomLeft; + final Radius bottomRight; + + const BorderRadius.all(Radius radius) + : this.only( + topLeft: radius, + topRight: radius, + bottomLeft: radius, + bottomRight: radius, + ); + + BorderRadius.circular(double radius) : this.all(Radius.circular(radius)); + + const BorderRadius.only({ + this.topLeft = Radius.zero, + this.topRight = Radius.zero, + this.bottomLeft = Radius.zero, + this.bottomRight = Radius.zero, + }); +} + +class Radius { + final double x; + final double y; + + const Radius.circular(double radius) : this.elliptical(radius, radius); + + const Radius.elliptical(this.x, this.y); + + static const Radius zero = Radius.circular(0); +} + +class ClipRRect extends Widget { + final Widget? child; + final BorderRadius? borderRadius; + + const ClipRRect({this.child, this.borderRadius}); +} + +class Column extends Widget { + final List children; + + Column({required this.children}); +} + +class StatelessWidget extends Widget {} + +class Widget { + const Widget(); +} + +class BuildContext {} From 4220d8f2e47b90afdba29b42294c31e0c6393362 Mon Sep 17 00:00:00 2001 From: Denis Grafov Date: Thu, 30 Sep 2021 19:06:29 +0300 Subject: [PATCH 03/15] update test --- .../prefer_const_border_radius_test.dart | 40 +++++++++++-------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius_test.dart b/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius_test.dart index f2bc274d25..f7c84aaef2 100644 --- a/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius_test.dart +++ b/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius_test.dart @@ -27,33 +27,41 @@ void main() { RuleTestHelper.verifyIssues( issues: issues, - startOffsets: [64, 170, 269, 417], - startLines: [2, 5, 8, 12], - startColumns: [22, 31, 31, 31], - endOffsets: [88, 195, 295, 442], + startOffsets: [113, 296, 396, 463, 611, 893], + startLines: [4, 10, 13, 14, 18, 23], + startColumns: [22, 31, 31, 32, 31, 31], + endOffsets: [139, 322, 422, 489, 637, 927], messages: [ - 'Prefer use const constructor BorderRadius.all.', - 'Prefer use const constructor BorderRadius.all.', - 'Prefer use const constructor BorderRadius.all.', - 'Prefer use const constructor BorderRadius.all.', + 'Prefer to use const constructor BorderRadius.all.', + 'Prefer to use const constructor BorderRadius.all.', + 'Prefer to use const constructor BorderRadius.all.', + 'Prefer to use const constructor BorderRadius.all.', + 'Prefer to use const constructor BorderRadius.all.', + 'Prefer to use const constructor BorderRadius.all.', ], replacementComments: [ 'Replace with const BorderRadius constructor.', 'Replace with const BorderRadius constructor.', 'Replace with const BorderRadius constructor.', 'Replace with const BorderRadius constructor.', + 'Replace with const BorderRadius constructor.', + 'Replace with const BorderRadius constructor.', ], replacements: [ - 'BorderRadius.all(Radius.circular(8))', - 'BorderRadius.all(Radius.circular(32))', - 'BorderRadius.all(Radius.circular(230))', - 'BorderRadius.all(Radius.circular(32))', + 'BorderRadius.all(Radius.circular(1.0))', + 'BorderRadius.all(Radius.circular(2.0))', + 'BorderRadius.all(Radius.circular(3.0))', + 'BorderRadius.all(Radius.circular(4.0))', + 'BorderRadius.all(Radius.circular(5.0))', + 'BorderRadius.all(Radius.circular(_constValue))', ], locationTexts: [ - 'BorderRadius.circular(8)', - 'BorderRadius.circular(32)', - 'BorderRadius.circular(230)', - 'BorderRadius.circular(32)', + 'BorderRadius.circular(1.0)', + 'BorderRadius.circular(2.0)', + 'BorderRadius.circular(3.0)', + 'BorderRadius.circular(4.0)', + 'BorderRadius.circular(5.0)', + 'BorderRadius.circular(_constValue)', ], ); }); From 2b5aa3bfb1e03cf0eb16278dc6eefe3e1983832c Mon Sep 17 00:00:00 2001 From: Denis Grafov Date: Thu, 30 Sep 2021 19:06:50 +0300 Subject: [PATCH 04/15] update _issueMessage --- .../prefer_const_border_radius/prefer_const_border_radius.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius.dart index 78bc91d660..9908a739bd 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius.dart @@ -1,5 +1,6 @@ import 'package:analyzer/dart/ast/ast.dart'; import 'package:analyzer/dart/ast/visitor.dart'; +import 'package:analyzer/dart/element/element.dart'; import '../../../../../utils/node_utils.dart'; import '../../../lint_utils.dart'; @@ -15,7 +16,7 @@ part 'visitor.dart'; class PreferConstBorderRadiusRule extends FlutterRule { static const ruleId = 'prefer-const-border-radius'; - static const _issueMessage = 'Prefer use const constructor BorderRadius.all.'; + static const _issueMessage = 'Prefer to use const constructor BorderRadius.all.'; static const _replaceComment = 'Replace with const BorderRadius constructor.'; PreferConstBorderRadiusRule([Map config = const {}]) From 600cf83f8e7afc0c521e09c9eb0ed8e7d8540397 Mon Sep 17 00:00:00 2001 From: Denis Grafov Date: Thu, 30 Sep 2021 19:06:57 +0300 Subject: [PATCH 05/15] update visitor --- .../prefer_const_border_radius/visitor.dart | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/visitor.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/visitor.dart index 9ca80367d3..40e1e8ab52 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/visitor.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/visitor.dart @@ -1,7 +1,7 @@ part of 'prefer_const_border_radius.dart'; const borderRadiusClassName = 'BorderRadius'; -const borderRadiusConstConstructorName = 'circular'; +const borderRadiusConstructorName = 'circular'; class _Visitor extends RecursiveAstVisitor { final _expressions = []; @@ -14,9 +14,20 @@ class _Visitor extends RecursiveAstVisitor { if (expression.staticType?.getDisplayString(withNullability: true) == borderRadiusClassName && - expression.constructorName.name?.name == - borderRadiusConstConstructorName) { - _expressions.add(expression); + expression.constructorName.name?.name == borderRadiusConstructorName && + expression.argumentList.arguments.length == 1) { + final arg = expression.argumentList.arguments.first; + + if (arg is Literal) { + _expressions.add(expression); + } else if (arg is Identifier) { + final element = arg.staticElement; + if (element is PropertyAccessorElement && element.variable.isConst) { + _expressions.add(expression); + } + } else if (arg is BinaryExpression) { + // TODO(grafov): check result of binary expression + } } } } From c5dede1569edfbab87eb1e88c2383a66736d8e07 Mon Sep 17 00:00:00 2001 From: Denis Grafov Date: Thu, 30 Sep 2021 19:10:01 +0300 Subject: [PATCH 06/15] rm odd variable --- .../rules_list/prefer_const_border_radius/examples/example.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/example.dart b/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/example.dart index 7567996888..69bb3f8697 100644 --- a/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/example.dart +++ b/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/example.dart @@ -4,7 +4,6 @@ const _constRadius = BorderRadius.all(Radius.circular(0.0)); final _finalRadius = BorderRadius.circular(1.0); // LINT const _constValue = 10.0; final _finalValue = 15.0; -var _varValues = 20.0; class MyWidget extends StatelessWidget { static final staticRadius = BorderRadius.circular(2.0); // LINT From 147ead81c28e6e742ac1a2d42cc9b0fc2dcc1ec8 Mon Sep 17 00:00:00 2001 From: Denis Grafov Date: Thu, 30 Sep 2021 19:13:26 +0300 Subject: [PATCH 07/15] format --- .../prefer_const_border_radius.dart | 3 ++- .../prefer_const_border_radius/examples/example.dart | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius.dart index 9908a739bd..427817fec9 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius.dart @@ -16,7 +16,8 @@ part 'visitor.dart'; class PreferConstBorderRadiusRule extends FlutterRule { static const ruleId = 'prefer-const-border-radius'; - static const _issueMessage = 'Prefer to use const constructor BorderRadius.all.'; + static const _issueMessage = + 'Prefer to use const constructor BorderRadius.all.'; static const _replaceComment = 'Replace with const BorderRadius constructor.'; PreferConstBorderRadiusRule([Map config = const {}]) diff --git a/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/example.dart b/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/example.dart index 69bb3f8697..851a6e935c 100644 --- a/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/example.dart +++ b/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/example.dart @@ -20,7 +20,9 @@ class MyWidget extends StatelessWidget { ClipRRect(borderRadius: buildMethodRadiusVar), ClipRRect(borderRadius: BorderRadius.circular(_finalValue)), ClipRRect(borderRadius: BorderRadius.circular(_constValue)), // LINT - ClipRRect(borderRadius: BorderRadius.circular(_constValue - _constValue)), // LINT + ClipRRect( + borderRadius: + BorderRadius.circular(_constValue - _constValue)), // LINT ClipRRect(borderRadius: BorderRadius.circular(_constValue - _finalValue)), ]); } From 77c5b8ec0e4b56afd47837ee928976e027cff24a Mon Sep 17 00:00:00 2001 From: Denis Grafov Date: Thu, 30 Sep 2021 19:14:24 +0300 Subject: [PATCH 08/15] update test --- .../prefer_const_border_radius_test.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius_test.dart b/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius_test.dart index f7c84aaef2..668a040415 100644 --- a/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius_test.dart +++ b/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius_test.dart @@ -27,10 +27,10 @@ void main() { RuleTestHelper.verifyIssues( issues: issues, - startOffsets: [113, 296, 396, 463, 611, 893], - startLines: [4, 10, 13, 14, 18, 23], + startOffsets: [113, 273, 373, 440, 588, 870], + startLines: [4, 9, 12, 13, 17, 22], startColumns: [22, 31, 31, 32, 31, 31], - endOffsets: [139, 322, 422, 489, 637, 927], + endOffsets: [139, 299, 399, 466, 614, 904], messages: [ 'Prefer to use const constructor BorderRadius.all.', 'Prefer to use const constructor BorderRadius.all.', From 77dcc80eeea008369f6c6e90c42a474b675e25d5 Mon Sep 17 00:00:00 2001 From: Denis Grafov Date: Thu, 30 Sep 2021 19:23:09 +0300 Subject: [PATCH 09/15] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cd80c565b2..2e7d789985 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Unreleased +* feat: Update static code diagnostic `prefer-const-border-radius`. * feat: Add static code diagnostic `prefer-const-border-radius`. * Improve static code diagnostic `prefer-extracting-callbacks`, don't trigger on empty function blocks. * Improve unused files check, add support for `vm:entry-point` annotation. From 999a0b945356b7ca49deafa9a912420c39f6d0dd Mon Sep 17 00:00:00 2001 From: Denis Grafov Date: Fri, 1 Oct 2021 10:10:00 +0300 Subject: [PATCH 10/15] rm todo --- .../rules/rules_list/prefer_const_border_radius/visitor.dart | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/visitor.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/visitor.dart index 40e1e8ab52..67f47b215c 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/visitor.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/visitor.dart @@ -25,8 +25,6 @@ class _Visitor extends RecursiveAstVisitor { if (element is PropertyAccessorElement && element.variable.isConst) { _expressions.add(expression); } - } else if (arg is BinaryExpression) { - // TODO(grafov): check result of binary expression } } } From 7cf22e552278c391a91f9401df8819c1b43a5449 Mon Sep 17 00:00:00 2001 From: Denis Grafov Date: Mon, 4 Oct 2021 10:27:36 +0300 Subject: [PATCH 11/15] Revert "update changelog" This reverts commit 77dcc80eeea008369f6c6e90c42a474b675e25d5. --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e7d789985..cd80c565b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,6 @@ ## Unreleased -* feat: Update static code diagnostic `prefer-const-border-radius`. * feat: Add static code diagnostic `prefer-const-border-radius`. * Improve static code diagnostic `prefer-extracting-callbacks`, don't trigger on empty function blocks. * Improve unused files check, add support for `vm:entry-point` annotation. From 892bfcc8bdda1d822387592ecfeeec67b13ee31c Mon Sep 17 00:00:00 2001 From: Denis Grafov Date: Mon, 4 Oct 2021 10:30:39 +0300 Subject: [PATCH 12/15] update issue message --- .../prefer_const_border_radius/prefer_const_border_radius.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius.dart index 427817fec9..5b7f183c0a 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius.dart @@ -17,7 +17,7 @@ part 'visitor.dart'; class PreferConstBorderRadiusRule extends FlutterRule { static const ruleId = 'prefer-const-border-radius'; static const _issueMessage = - 'Prefer to use const constructor BorderRadius.all.'; + 'Prefer using const constructor BorderRadius.all'; static const _replaceComment = 'Replace with const BorderRadius constructor.'; PreferConstBorderRadiusRule([Map config = const {}]) From f700334336074a1f94dc662a0ccd7c6dbb159d9b Mon Sep 17 00:00:00 2001 From: Denis Grafov Date: Mon, 4 Oct 2021 10:30:59 +0300 Subject: [PATCH 13/15] make fields private --- .../rules_list/prefer_const_border_radius/visitor.dart | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/visitor.dart b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/visitor.dart index 67f47b215c..97bac24af2 100644 --- a/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/visitor.dart +++ b/lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/visitor.dart @@ -1,7 +1,7 @@ part of 'prefer_const_border_radius.dart'; -const borderRadiusClassName = 'BorderRadius'; -const borderRadiusConstructorName = 'circular'; +const _borderRadiusClassName = 'BorderRadius'; +const _borderRadiusConstructorName = 'circular'; class _Visitor extends RecursiveAstVisitor { final _expressions = []; @@ -13,8 +13,8 @@ class _Visitor extends RecursiveAstVisitor { super.visitInstanceCreationExpression(expression); if (expression.staticType?.getDisplayString(withNullability: true) == - borderRadiusClassName && - expression.constructorName.name?.name == borderRadiusConstructorName && + _borderRadiusClassName && + expression.constructorName.name?.name == _borderRadiusConstructorName && expression.argumentList.arguments.length == 1) { final arg = expression.argumentList.arguments.first; From 9568df67d7a07a04e22347f8a47a301561d3ea14 Mon Sep 17 00:00:00 2001 From: Denis Grafov Date: Mon, 4 Oct 2021 10:36:27 +0300 Subject: [PATCH 14/15] update test --- .../examples/example.dart | 62 +++++++++++++++++-- .../examples/flutter_define.dart | 55 ---------------- .../prefer_const_border_radius_test.dart | 18 +++--- 3 files changed, 65 insertions(+), 70 deletions(-) delete mode 100644 test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/flutter_define.dart diff --git a/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/example.dart b/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/example.dart index 851a6e935c..fa59889ce2 100644 --- a/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/example.dart +++ b/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/example.dart @@ -1,5 +1,3 @@ -import 'flutter_define.dart'; - const _constRadius = BorderRadius.all(Radius.circular(0.0)); final _finalRadius = BorderRadius.circular(1.0); // LINT const _constValue = 10.0; @@ -20,10 +18,62 @@ class MyWidget extends StatelessWidget { ClipRRect(borderRadius: buildMethodRadiusVar), ClipRRect(borderRadius: BorderRadius.circular(_finalValue)), ClipRRect(borderRadius: BorderRadius.circular(_constValue)), // LINT - ClipRRect( - borderRadius: - BorderRadius.circular(_constValue - _constValue)), // LINT - ClipRRect(borderRadius: BorderRadius.circular(_constValue - _finalValue)), ]); } } + +class BorderRadius { + final Radius topLeft; + final Radius topRight; + final Radius bottomLeft; + final Radius bottomRight; + + const BorderRadius.all(Radius radius) + : this.only( + topLeft: radius, + topRight: radius, + bottomLeft: radius, + bottomRight: radius, + ); + + BorderRadius.circular(double radius) : this.all(Radius.circular(radius)); + + const BorderRadius.only({ + this.topLeft = Radius.zero, + this.topRight = Radius.zero, + this.bottomLeft = Radius.zero, + this.bottomRight = Radius.zero, + }); +} + +class Radius { + final double x; + final double y; + + const Radius.circular(double radius) : this.elliptical(radius, radius); + + const Radius.elliptical(this.x, this.y); + + static const Radius zero = Radius.circular(0); +} + +class ClipRRect extends Widget { + final Widget? child; + final BorderRadius? borderRadius; + + const ClipRRect({this.child, this.borderRadius}); +} + +class Column extends Widget { + final List children; + + Column({required this.children}); +} + +class StatelessWidget extends Widget {} + +class Widget { + const Widget(); +} + +class BuildContext {} diff --git a/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/flutter_define.dart b/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/flutter_define.dart deleted file mode 100644 index 0c51f93fbf..0000000000 --- a/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/flutter_define.dart +++ /dev/null @@ -1,55 +0,0 @@ -class BorderRadius { - final Radius topLeft; - final Radius topRight; - final Radius bottomLeft; - final Radius bottomRight; - - const BorderRadius.all(Radius radius) - : this.only( - topLeft: radius, - topRight: radius, - bottomLeft: radius, - bottomRight: radius, - ); - - BorderRadius.circular(double radius) : this.all(Radius.circular(radius)); - - const BorderRadius.only({ - this.topLeft = Radius.zero, - this.topRight = Radius.zero, - this.bottomLeft = Radius.zero, - this.bottomRight = Radius.zero, - }); -} - -class Radius { - final double x; - final double y; - - const Radius.circular(double radius) : this.elliptical(radius, radius); - - const Radius.elliptical(this.x, this.y); - - static const Radius zero = Radius.circular(0); -} - -class ClipRRect extends Widget { - final Widget? child; - final BorderRadius? borderRadius; - - const ClipRRect({this.child, this.borderRadius}); -} - -class Column extends Widget { - final List children; - - Column({required this.children}); -} - -class StatelessWidget extends Widget {} - -class Widget { - const Widget(); -} - -class BuildContext {} diff --git a/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius_test.dart b/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius_test.dart index 668a040415..0d02132fb7 100644 --- a/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius_test.dart +++ b/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius_test.dart @@ -27,17 +27,17 @@ void main() { RuleTestHelper.verifyIssues( issues: issues, - startOffsets: [113, 273, 373, 440, 588, 870], - startLines: [4, 9, 12, 13, 17, 22], + startOffsets: [82, 242, 342, 409, 557, 839], + startLines: [2, 7, 10, 11, 15, 20], startColumns: [22, 31, 31, 32, 31, 31], - endOffsets: [139, 299, 399, 466, 614, 904], + endOffsets: [108, 268, 368, 435, 583, 873], messages: [ - 'Prefer to use const constructor BorderRadius.all.', - 'Prefer to use const constructor BorderRadius.all.', - 'Prefer to use const constructor BorderRadius.all.', - 'Prefer to use const constructor BorderRadius.all.', - 'Prefer to use const constructor BorderRadius.all.', - 'Prefer to use const constructor BorderRadius.all.', + 'Prefer using const constructor BorderRadius.all', + 'Prefer using const constructor BorderRadius.all', + 'Prefer using const constructor BorderRadius.all', + 'Prefer using const constructor BorderRadius.all', + 'Prefer using const constructor BorderRadius.all', + 'Prefer using const constructor BorderRadius.all', ], replacementComments: [ 'Replace with const BorderRadius constructor.', From f472a8061029853d1449876e375ca311342dc80f Mon Sep 17 00:00:00 2001 From: Denis Grafov Date: Mon, 4 Oct 2021 11:16:53 +0300 Subject: [PATCH 15/15] update test & example --- .../prefer_const_border_radius/examples/example.dart | 8 ++++++++ .../prefer_const_border_radius_test.dart | 6 +++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/example.dart b/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/example.dart index fa59889ce2..b6884c12a2 100644 --- a/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/example.dart +++ b/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/examples/example.dart @@ -6,6 +6,8 @@ final _finalValue = 15.0; class MyWidget extends StatelessWidget { static final staticRadius = BorderRadius.circular(2.0); // LINT + double foo() => 20.0; + Widget build(BuildContext _) { final buildMethodRadius = BorderRadius.circular(3.0); // LINT var buildMethodRadiusVar = BorderRadius.circular(4.0); // LINT @@ -18,6 +20,12 @@ class MyWidget extends StatelessWidget { ClipRRect(borderRadius: buildMethodRadiusVar), ClipRRect(borderRadius: BorderRadius.circular(_finalValue)), ClipRRect(borderRadius: BorderRadius.circular(_constValue)), // LINT + ClipRRect(borderRadius: BorderRadius.circular(foo())), + ClipRRect( + borderRadius: BorderRadius.circular( + _constValue == 10.0 ? 25.0 : 30.0, + ), + ), ]); } } diff --git a/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius_test.dart b/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius_test.dart index 0d02132fb7..2a300982a2 100644 --- a/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius_test.dart +++ b/test/analyzers/lint_analyzer/rules/rules_list/prefer_const_border_radius/prefer_const_border_radius_test.dart @@ -27,10 +27,10 @@ void main() { RuleTestHelper.verifyIssues( issues: issues, - startOffsets: [82, 242, 342, 409, 557, 839], - startLines: [2, 7, 10, 11, 15, 20], + startOffsets: [82, 242, 367, 434, 582, 864], + startLines: [2, 7, 12, 13, 17, 22], startColumns: [22, 31, 31, 32, 31, 31], - endOffsets: [108, 268, 368, 435, 583, 873], + endOffsets: [108, 268, 393, 460, 608, 898], messages: [ 'Prefer using const constructor BorderRadius.all', 'Prefer using const constructor BorderRadius.all',