Skip to content

Commit b631295

Browse files
author
shaark
committed
issue-167. added exclude params to some rules
2 parents 6e3342d + c526e5e commit b631295

File tree

19 files changed

+165
-78
lines changed

19 files changed

+165
-78
lines changed

lib/src/models/excluded_identifier_parameter.dart renamed to lib/src/common/parameters/excluded_identifier_parameter.dart

File renamed without changes.

lib/src/models/excluded_identifiers_list_parameter.dart renamed to lib/src/common/parameters/excluded_identifiers_list_parameter.dart

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import 'package:analyzer/dart/ast/ast.dart';
22
import 'package:collection/collection.dart';
3-
import 'package:solid_lints/src/models/excluded_identifier_parameter.dart';
3+
import 'package:solid_lints/src/common/parameters/excluded_identifier_parameter.dart';
44

5-
/// A data model class that represents the exclude input
6-
/// parameters.
5+
/// A model representing "exclude" parameters for linting, defining
6+
/// identifiers (classes, methods, functions) to be ignored during analysis.
77
class ExcludedIdentifiersListParameter {
88
/// A list of identifiers (classes, methods, functions) that should be
99
/// excluded from the lint.
@@ -33,12 +33,34 @@ class ExcludedIdentifiersListParameter {
3333
);
3434
}
3535

36+
/// Method for creating from json data with default params
37+
factory ExcludedIdentifiersListParameter.defaultFromJson(
38+
Map<String, dynamic> json,
39+
) {
40+
final exclude = <ExcludedIdentifierParameter>[];
41+
42+
final excludeList =
43+
json[ExcludedIdentifiersListParameter.excludeParameterName]
44+
as Iterable? ??
45+
[];
46+
47+
for (final item in excludeList) {
48+
if (item is Map) {
49+
exclude.add(ExcludedIdentifierParameter.fromJson(item));
50+
}
51+
}
52+
return ExcludedIdentifiersListParameter(
53+
exclude: exclude,
54+
);
55+
}
56+
3657
/// Returns whether the target node should be ignored during analysis.
3758
bool shouldIgnore(Declaration node) {
3859
final methodName = node.declaredElement?.name;
3960

40-
final excludedItem =
41-
exclude.firstWhereOrNull((e) => e.methodName == methodName);
61+
final excludedItem = exclude.firstWhereOrNull(
62+
(e) => e.methodName == methodName || e.className == methodName,
63+
);
4264

4365
if (excludedItem == null) return false;
4466

lib/src/lints/avoid_returning_widgets/models/avoid_returning_widgets_parameters.dart

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import 'package:solid_lints/src/models/excluded_identifiers_list_parameter.dart';
1+
import 'package:solid_lints/src/common/parameters/excluded_identifiers_list_parameter.dart';
22

33
/// A data model class that represents the "avoid returning widgets" input
44
/// parameters.
@@ -14,10 +14,7 @@ class AvoidReturningWidgetsParameters {
1414
/// Method for creating from json data
1515
factory AvoidReturningWidgetsParameters.fromJson(Map<String, dynamic> json) {
1616
return AvoidReturningWidgetsParameters(
17-
exclude: ExcludedIdentifiersListParameter.fromJson(
18-
excludeList:
19-
json[ExcludedIdentifiersListParameter.excludeParameterName] as Iterable? ?? [],
20-
),
17+
exclude: ExcludedIdentifiersListParameter.defaultFromJson(json),
2118
);
2219
}
2320
}

lib/src/lints/avoid_unused_parameters/avoid_unused_parameters_rule.dart

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
import 'package:analyzer/error/listener.dart';
23
import 'package:custom_lint_builder/custom_lint_builder.dart';
34
import 'package:solid_lints/src/lints/avoid_unused_parameters/models/avoid_unused_parameters.dart';
@@ -93,19 +94,17 @@ class AvoidUnusedParametersRule extends SolidLintRule<AvoidUnusedParameters> {
9394
ErrorReporter reporter,
9495
CustomLintContext context,
9596
) {
96-
context.registry.addCompilationUnit((node) {
97-
context.registry.addDeclaration((declarationNode) {
98-
final isIgnored =
99-
config.parameters.exclude.shouldIgnore(declarationNode);
97+
context.registry.addDeclaration((node) {
98+
final isIgnored = config.parameters.exclude.shouldIgnore(node);
99+
100+
if (!isIgnored) {
100101
final visitor = AvoidUnusedParametersVisitor();
101102
node.accept(visitor);
102103

103-
if (!isIgnored) {
104-
for (final element in visitor.unusedParameters) {
105-
reporter.atNode(element, code);
106-
}
104+
for (final element in visitor.unusedParameters) {
105+
reporter.atNode(element, code);
107106
}
108-
});
107+
}
109108
});
110109
}
111110
}

lib/src/lints/avoid_unused_parameters/models/avoid_unused_parameters.dart

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import 'package:solid_lints/src/models/excluded_identifiers_list_parameter.dart';
1+
import 'package:solid_lints/src/common/parameters/excluded_identifiers_list_parameter.dart';
22

33
/// A data model class that represents the "avoid returning widgets" input
44
/// parameters.
@@ -14,10 +14,7 @@ class AvoidUnusedParameters {
1414
/// Method for creating from json data
1515
factory AvoidUnusedParameters.fromJson(Map<String, dynamic> json) {
1616
return AvoidUnusedParameters(
17-
exclude: ExcludedIdentifiersListParameter.fromJson(
18-
excludeList:
19-
json[ExcludedIdentifiersListParameter.excludeParameterName] as Iterable? ?? [],
20-
),
17+
exclude: ExcludedIdentifiersListParameter.defaultFromJson(json),
2118
);
2219
}
2320
}

lib/src/lints/cyclomatic_complexity/cyclomatic_complexity_rule.dart

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,18 @@ class CyclomaticComplexityRule
5151
ErrorReporter reporter,
5252
CustomLintContext context,
5353
) {
54-
context.registry.addDeclaration((declarationNode) {
55-
context.registry.addBlockFunctionBody((node) {
54+
context.registry.addBlockFunctionBody((node) {
55+
context.registry.addDeclaration((declarationNode) {
5656
final isIgnored =
5757
config.parameters.exclude.shouldIgnore(declarationNode);
58-
final visitor = CyclomaticComplexityFlowVisitor();
59-
node.visitChildren(visitor);
58+
if (!isIgnored) {
59+
final visitor = CyclomaticComplexityFlowVisitor();
60+
node.visitChildren(visitor);
6061

61-
if (!isIgnored &&
62-
visitor.complexityEntities.length + 1 >
63-
config.parameters.maxComplexity) {
64-
reporter.atNode(node, code);
62+
if (visitor.complexityEntities.length + 1 >
63+
config.parameters.maxComplexity) {
64+
reporter.atNode(node, code);
65+
}
6566
}
6667
});
6768
});

lib/src/lints/cyclomatic_complexity/models/cyclomatic_complexity_parameters.dart

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import 'package:solid_lints/src/models/excluded_identifiers_list_parameter.dart';
1+
import 'package:solid_lints/src/common/parameters/excluded_identifiers_list_parameter.dart';
22

33
/// Cyclomatic complexity metric limits configuration.
44
class CyclomaticComplexityParameters {
@@ -21,11 +21,6 @@ class CyclomaticComplexityParameters {
2121
factory CyclomaticComplexityParameters.fromJson(Map<String, Object?> json) =>
2222
CyclomaticComplexityParameters(
2323
maxComplexity: json['max_complexity'] as int? ?? _defaultMaxComplexity,
24-
exclude: ExcludedIdentifiersListParameter.fromJson(
25-
excludeList:
26-
json[ExcludedIdentifiersListParameter.excludeParameterName]
27-
as Iterable? ??
28-
[],
29-
),
24+
exclude: ExcludedIdentifiersListParameter.defaultFromJson(json),
3025
);
3126
}

lib/src/lints/function_lines_of_code/models/function_lines_of_code_parameters.dart

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import 'package:solid_lints/src/models/excluded_identifiers_list_parameter.dart';
1+
import 'package:solid_lints/src/common/parameters/excluded_identifiers_list_parameter.dart';
22

33
/// A data model class that represents the "function lines of code" input
44
/// parameters.
@@ -22,11 +22,6 @@ class FunctionLinesOfCodeParameters {
2222
factory FunctionLinesOfCodeParameters.fromJson(Map<String, Object?> json) =>
2323
FunctionLinesOfCodeParameters(
2424
maxLines: json['max_lines'] as int? ?? _defaultMaxLines,
25-
exclude: ExcludedIdentifiersListParameter.fromJson(
26-
excludeList:
27-
json[ExcludedIdentifiersListParameter.excludeParameterName]
28-
as Iterable? ??
29-
[],
30-
),
25+
exclude: ExcludedIdentifiersListParameter.defaultFromJson(json),
3126
);
3227
}

lib/src/lints/no_empty_block/models/no_empty_block_parameters.dart

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import 'package:solid_lints/src/models/excluded_identifiers_list_parameter.dart';
1+
import 'package:solid_lints/src/common/parameters/excluded_identifiers_list_parameter.dart';
22

33
/// A data model class that represents the "avoid returning widgets" input
44
/// parameters.
@@ -14,11 +14,7 @@ class NoEmptyBlockParameters {
1414
/// Method for creating from json data
1515
factory NoEmptyBlockParameters.fromJson(Map<String, dynamic> json) {
1616
return NoEmptyBlockParameters(
17-
exclude: ExcludedIdentifiersListParameter.fromJson(
18-
excludeList: json[ExcludedIdentifiersListParameter.excludeParameterName]
19-
as Iterable? ??
20-
[],
21-
),
17+
exclude: ExcludedIdentifiersListParameter.defaultFromJson(json),
2218
);
2319
}
2420
}

lib/src/lints/no_empty_block/no_empty_block_rule.dart

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -77,19 +77,16 @@ class NoEmptyBlockRule extends SolidLintRule<NoEmptyBlockParameters> {
7777
ErrorReporter reporter,
7878
CustomLintContext context,
7979
) {
80-
context.registry.addCompilationUnit((node) {
81-
context.registry.addDeclaration((declarationNode) {
82-
final isIgnored =
83-
config.parameters.exclude.shouldIgnore(declarationNode);
80+
context.registry.addDeclaration((node) {
81+
final isIgnored = config.parameters.exclude.shouldIgnore(node);
82+
if (!isIgnored) {
8483
final visitor = NoEmptyBlockVisitor();
8584
node.accept(visitor);
86-
87-
if (!isIgnored) {
88-
for (final emptyBlock in visitor.emptyBlocks) {
89-
reporter.atNode(emptyBlock, code);
90-
}
85+
86+
for (final emptyBlock in visitor.emptyBlocks) {
87+
reporter.atNode(emptyBlock, code);
9188
}
92-
});
89+
}
9390
});
9491
}
9592
}

0 commit comments

Comments
 (0)