Skip to content
Merged
Prev Previous commit
Next Next commit
fix pr comments
  • Loading branch information
velvitoff committed Mar 29, 2024
commit 96008f3b2ad90f6e3220e692f7729eed565ec7e4
2 changes: 1 addition & 1 deletion lib/analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ custom_lint:
- newline_before_return
- no_empty_block
- no_equal_then_else
- reverse_if_to_reduce_nesting
- prefer_early_return

- no_magic_number:
allowed_in_widget_params: true
Expand Down
4 changes: 2 additions & 2 deletions lib/solid_lints.dart
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import 'package:solid_lints/src/lints/prefer_first/prefer_first_rule.dart';
import 'package:solid_lints/src/lints/prefer_last/prefer_last_rule.dart';
import 'package:solid_lints/src/lints/prefer_match_file_name/prefer_match_file_name_rule.dart';
import 'package:solid_lints/src/lints/proper_super_calls/proper_super_calls_rule.dart';
import 'package:solid_lints/src/lints/reverse_if_to_reduce_nesting/reverse_if_to_reduce_nesting_rule.dart';
import 'package:solid_lints/src/lints/prefer_early_return/prefer_early_return_rule.dart';
import 'package:solid_lints/src/models/solid_lint_rule.dart';

/// Creates a plugin for our custom linter
Expand Down Expand Up @@ -62,7 +62,7 @@ class _SolidLints extends PluginBase {
PreferMatchFileNameRule.createRule(configs),
ProperSuperCallsRule.createRule(configs),
AvoidDebugPrint.createRule(configs),
ReverseIfToReduceNestingRule.createRule(configs),
PreferEarlyReturnRule.createRule(configs),
];

// Return only enabled rules
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
import 'package:analyzer/error/listener.dart';
import 'package:custom_lint_builder/custom_lint_builder.dart';
import 'package:solid_lints/src/lints/reverse_if_to_reduce_nesting/visitors/reverse_if_to_reduce_nesting_visitor.dart';
import 'package:solid_lints/src/lints/prefer_early_return/visitors/prefer_early_return_visitor.dart';
import 'package:solid_lints/src/models/rule_config.dart';
import 'package:solid_lints/src/models/solid_lint_rule.dart';

/// A `reverse_if_to_reduce_nesting` rule which promotes using guard clauses
/// over nesting `if` statements
/// A rule which highlights `if` statements that span the entire body,
/// and suggests replacing them with a reversed boolean check
/// with an early return.
///
/// ### Example
///
/// #### BAD:
///
/// ```dart
/// void func() {
/// if(a){ //LINT
/// if(b){ //LINT
/// if (a) { //LINT
/// if (b) { //LINT
/// c;
/// }
/// }
Expand All @@ -25,28 +26,28 @@ import 'package:solid_lints/src/models/solid_lint_rule.dart';
///
/// ```dart
/// void func() {
/// if(!a) return;
/// if(!b) return;
/// if (!a) return;
/// if (!b) return;
/// c;
/// }
/// ```
class ReverseIfToReduceNestingRule extends SolidLintRule {
class PreferEarlyReturnRule extends SolidLintRule {
/// The [LintCode] of this lint rule that represents the error if
/// 'if' statements should be reversed
static const String lintName = 'reverse_if_to_reduce_nesting';
static const String lintName = 'prefer_early_return';

ReverseIfToReduceNestingRule._(super.config);
PreferEarlyReturnRule._(super.config);

/// Creates a new instance of [ReverseIfToReduceNestingRule]
/// Creates a new instance of [PreferEarlyReturnRule]
/// based on the lint configuration.
factory ReverseIfToReduceNestingRule.createRule(CustomLintConfigs configs) {
factory PreferEarlyReturnRule.createRule(CustomLintConfigs configs) {
final rule = RuleConfig(
configs: configs,
name: lintName,
problemMessage: (_) => "Use reverse if to reduce nesting",
);

return ReverseIfToReduceNestingRule._(rule);
return PreferEarlyReturnRule._(rule);
}

@override
Expand All @@ -56,7 +57,7 @@ class ReverseIfToReduceNestingRule extends SolidLintRule {
CustomLintContext context,
) {
context.registry.addBlockFunctionBody((node) {
final visitor = ReverseIfToReduceNestingVisitor();
final visitor = PreferEarlyReturnVisitor();
node.accept(visitor);

for (final element in visitor.nodes) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:solid_lints/src/lints/reverse_if_to_reduce_nesting/visitors/if_statement_visitor.dart';
import 'package:solid_lints/src/lints/prefer_early_return/visitors/if_statement_visitor.dart';

/// The AST visitor that will collect all unnecessary if statements
class ReverseIfToReduceNestingVisitor extends RecursiveAstVisitor<void> {
class PreferEarlyReturnVisitor extends RecursiveAstVisitor<void> {
final _nodes = <AstNode>[];

/// All unnecessary if statements and conditional expressions.
Expand Down Expand Up @@ -33,7 +33,8 @@ class ReverseIfToReduceNestingVisitor extends RecursiveAstVisitor<void> {
void _handleIfStatement(IfStatement node) {
if (_isElseIfStatement(node)) return;
if (_hasElseStatement(node)) return;
if (!_containsIfStatement(node.thenStatement)) return;
final containsNestedIfStatement = _containsIfStatement(node.thenStatement);
if (!containsNestedIfStatement) return;

_nodes.add(node);
}
Expand Down
2 changes: 1 addition & 1 deletion lint_test/analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ custom_lint:
- no_empty_block
- no_equal_then_else
- avoid_debug_print
- reverse_if_to_reduce_nesting
- prefer_early_return
- member_ordering:
alphabetize: true
order:
Expand Down
2 changes: 1 addition & 1 deletion lint_test/cyclomatic_complexity_test.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// ignore_for_file: literal_only_boolean_expressions, reverse_if_to_reduce_nesting
// ignore_for_file: literal_only_boolean_expressions, prefer_early_return
// ignore_for_file: no_empty_block, prefer_match_file_name

/// Check complexity fail
Expand Down
2 changes: 1 addition & 1 deletion lint_test/no_empty_block_test.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// ignore_for_file: prefer_const_declarations, prefer_match_file_name
// ignore_for_file: prefer_const_declarations, prefer_match_file_name, prefer_early_return
// ignore_for_file: unused_local_variable
// ignore_for_file: cyclomatic_complexity
// ignore_for_file: avoid_unused_parameters
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ void oneIfWithReturn() {
}

void nestedIf2() {
//expect_lint: reverse_if_to_reduce_nesting
//expect_lint: prefer_early_return
if (true) {
if (true) {
Comment thread
4akloon marked this conversation as resolved.
_doSomething();
Expand All @@ -29,7 +29,7 @@ void nestedIf2() {
}

void nestedIf3() {
//expect_lint: reverse_if_to_reduce_nesting
//expect_lint: prefer_early_return
if (true) {
if (true) {
if (true) {
Expand All @@ -40,7 +40,7 @@ void nestedIf3() {
}

void oneNestedIf2WithReturn() {
//expect_lint: reverse_if_to_reduce_nesting
//expect_lint: prefer_early_return
if (true) {
if (true) {
if (true) {
Expand Down Expand Up @@ -82,7 +82,7 @@ void twoIfElse() {
}

void twoIfElseInner() {
//expect_lint: reverse_if_to_reduce_nesting
//expect_lint: prefer_early_return
if (true) {
if (true) {
_doSomething();
Expand All @@ -93,7 +93,7 @@ void twoIfElseInner() {
}

void threeIf() {
//expect_lint: reverse_if_to_reduce_nesting
//expect_lint: prefer_early_return
if (true) {
if (true) {
if (true) {
Expand All @@ -117,7 +117,7 @@ void threeIfElse1() {
}

void threeIfElse2() {
//expect_lint: reverse_if_to_reduce_nesting
//expect_lint: prefer_early_return
if (true) {
if (true) {
if (true) {
Expand All @@ -130,7 +130,7 @@ void threeIfElse2() {
}

void threeIfElse3() {
//expect_lint: reverse_if_to_reduce_nesting
//expect_lint: prefer_early_return
if (true) {
if (true) {
if (true) {
Expand Down