Skip to content

Commit 6e3342d

Browse files
author
shaark
committed
issue-167. added ingore parametrs to some lints
1 parent 90e083f commit 6e3342d

File tree

10 files changed

+134
-47
lines changed

10 files changed

+134
-47
lines changed

lib/src/lints/avoid_unused_parameters/avoid_unused_parameters_rule.dart

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:analyzer/error/listener.dart';
22
import 'package:custom_lint_builder/custom_lint_builder.dart';
3+
import 'package:solid_lints/src/lints/avoid_unused_parameters/models/avoid_unused_parameters.dart';
34
import 'package:solid_lints/src/lints/avoid_unused_parameters/visitors/avoid_unused_parameters_visitor.dart';
45
import 'package:solid_lints/src/models/rule_config.dart';
56
import 'package:solid_lints/src/models/solid_lint_rule.dart';
@@ -64,7 +65,7 @@ import 'package:solid_lints/src/models/solid_lint_rule.dart';
6465
/// };
6566
///
6667
/// ```
67-
class AvoidUnusedParametersRule extends SolidLintRule {
68+
class AvoidUnusedParametersRule extends SolidLintRule<AvoidUnusedParameters> {
6869
/// This lint rule represents
6970
/// the error whether we use bad formatted double literals.
7071
static const String lintName = 'avoid_unused_parameters';
@@ -79,6 +80,7 @@ class AvoidUnusedParametersRule extends SolidLintRule {
7980
final rule = RuleConfig(
8081
configs: configs,
8182
name: lintName,
83+
paramsParser: AvoidUnusedParameters.fromJson,
8284
problemMessage: (_) => 'Parameter is unused.',
8385
);
8486

@@ -92,12 +94,18 @@ class AvoidUnusedParametersRule extends SolidLintRule {
9294
CustomLintContext context,
9395
) {
9496
context.registry.addCompilationUnit((node) {
95-
final visitor = AvoidUnusedParametersVisitor();
96-
node.accept(visitor);
97+
context.registry.addDeclaration((declarationNode) {
98+
final isIgnored =
99+
config.parameters.exclude.shouldIgnore(declarationNode);
100+
final visitor = AvoidUnusedParametersVisitor();
101+
node.accept(visitor);
97102

98-
for (final element in visitor.unusedParameters) {
99-
reporter.atNode(element, code);
100-
}
103+
if (!isIgnored) {
104+
for (final element in visitor.unusedParameters) {
105+
reporter.atNode(element, code);
106+
}
107+
}
108+
});
101109
});
102110
}
103111
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import 'package:solid_lints/src/models/excluded_identifiers_list_parameter.dart';
2+
3+
/// A data model class that represents the "avoid returning widgets" input
4+
/// parameters.
5+
class AvoidUnusedParameters {
6+
/// A list of methods that should be excluded from the lint.
7+
final ExcludedIdentifiersListParameter exclude;
8+
9+
/// Constructor for [AvoidUnusedParameters] model
10+
AvoidUnusedParameters({
11+
required this.exclude,
12+
});
13+
14+
/// Method for creating from json data
15+
factory AvoidUnusedParameters.fromJson(Map<String, dynamic> json) {
16+
return AvoidUnusedParameters(
17+
exclude: ExcludedIdentifiersListParameter.fromJson(
18+
excludeList:
19+
json[ExcludedIdentifiersListParameter.excludeParameterName] as Iterable? ?? [],
20+
),
21+
);
22+
}
23+
}

lib/src/lints/cyclomatic_complexity/cyclomatic_complexity_rule.dart

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,19 @@ class CyclomaticComplexityRule
5151
ErrorReporter reporter,
5252
CustomLintContext context,
5353
) {
54-
context.registry.addBlockFunctionBody((node) {
55-
final visitor = CyclomaticComplexityFlowVisitor();
56-
node.visitChildren(visitor);
54+
context.registry.addDeclaration((declarationNode) {
55+
context.registry.addBlockFunctionBody((node) {
56+
final isIgnored =
57+
config.parameters.exclude.shouldIgnore(declarationNode);
58+
final visitor = CyclomaticComplexityFlowVisitor();
59+
node.visitChildren(visitor);
5760

58-
if (visitor.complexityEntities.length + 1 >
59-
config.parameters.maxComplexity) {
60-
reporter.atNode(node, code);
61-
}
61+
if (!isIgnored &&
62+
visitor.complexityEntities.length + 1 >
63+
config.parameters.maxComplexity) {
64+
reporter.atNode(node, code);
65+
}
66+
});
6267
});
6368
}
6469
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,31 @@
1+
import 'package:solid_lints/src/models/excluded_identifiers_list_parameter.dart';
2+
13
/// Cyclomatic complexity metric limits configuration.
24
class CyclomaticComplexityParameters {
35
/// Threshold cyclomatic complexity level, exceeding it triggers a warning.
46
final int maxComplexity;
57

8+
/// A list of methods that should be excluded from the lint.
9+
final ExcludedIdentifiersListParameter exclude;
10+
611
/// Reference: NIST 500-235 item 2.5
712
static const _defaultMaxComplexity = 10;
813

914
/// Constructor for [CyclomaticComplexityParameters] model
1015
const CyclomaticComplexityParameters({
1116
required this.maxComplexity,
17+
required this.exclude,
1218
});
1319

1420
/// Method for creating from json data
1521
factory CyclomaticComplexityParameters.fromJson(Map<String, Object?> json) =>
1622
CyclomaticComplexityParameters(
1723
maxComplexity: json['max_complexity'] as int? ?? _defaultMaxComplexity,
24+
exclude: ExcludedIdentifiersListParameter.fromJson(
25+
excludeList:
26+
json[ExcludedIdentifiersListParameter.excludeParameterName]
27+
as Iterable? ??
28+
[],
29+
),
1830
);
1931
}

lib/src/lints/function_lines_of_code/function_lines_of_code_rule.dart

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -50,22 +50,22 @@ class FunctionLinesOfCodeRule
5050
) {
5151
void checkNode(AstNode node) => _checkNode(resolver, reporter, node);
5252

53-
context.registry.addMethodDeclaration(checkNode);
54-
context.registry.addFunctionDeclaration(checkNode);
55-
context.registry.addFunctionExpression(checkNode);
53+
context.registry.addDeclaration((declarationNode) {
54+
final isIgnored = config.parameters.exclude.shouldIgnore(declarationNode);
55+
56+
if (!isIgnored) {
57+
context.registry.addMethodDeclaration(checkNode);
58+
context.registry.addFunctionDeclaration(checkNode);
59+
context.registry.addFunctionExpression(checkNode);
60+
}
61+
});
5662
}
5763

5864
void _checkNode(
5965
CustomLintResolver resolver,
6066
ErrorReporter reporter,
6167
AstNode node,
6268
) {
63-
final functionName = _getFunctionName(node);
64-
if (functionName != null &&
65-
config.parameters.excludeNames.contains(functionName)) {
66-
return;
67-
}
68-
6969
final visitor = FunctionLinesOfCodeVisitor(resolver.lineInfo);
7070
node.visitChildren(visitor);
7171

@@ -84,16 +84,4 @@ class FunctionLinesOfCodeRule
8484
);
8585
}
8686
}
87-
88-
String? _getFunctionName(AstNode node) {
89-
if (node is FunctionDeclaration) {
90-
return node.name.lexeme;
91-
} else if (node is MethodDeclaration) {
92-
return node.name.lexeme;
93-
} else if (node is FunctionExpression) {
94-
return node.declaredElement?.name;
95-
} else {
96-
return null;
97-
}
98-
}
9987
}
Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,32 @@
1+
import 'package:solid_lints/src/models/excluded_identifiers_list_parameter.dart';
2+
13
/// A data model class that represents the "function lines of code" input
24
/// parameters.
35
class FunctionLinesOfCodeParameters {
46
/// Maximum allowed number of lines of code (LoC) per function,
57
/// exceeding this limit triggers a warning.
68
final int maxLines;
79

8-
/// Function names to be excluded from the rule check
9-
final List<String> excludeNames;
10+
/// A list of methods that should be excluded from the lint.
11+
final ExcludedIdentifiersListParameter exclude;
1012

1113
static const _defaultMaxLines = 200;
1214

1315
/// Constructor for [FunctionLinesOfCodeParameters] model
1416
const FunctionLinesOfCodeParameters({
1517
required this.maxLines,
16-
required this.excludeNames,
18+
required this.exclude,
1719
});
1820

1921
/// Method for creating from json data
2022
factory FunctionLinesOfCodeParameters.fromJson(Map<String, Object?> json) =>
2123
FunctionLinesOfCodeParameters(
2224
maxLines: json['max_lines'] as int? ?? _defaultMaxLines,
23-
excludeNames:
24-
List<String>.from(json['excludeNames'] as Iterable? ?? []),
25+
exclude: ExcludedIdentifiersListParameter.fromJson(
26+
excludeList:
27+
json[ExcludedIdentifiersListParameter.excludeParameterName]
28+
as Iterable? ??
29+
[],
30+
),
2531
);
2632
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import 'package:solid_lints/src/models/excluded_identifiers_list_parameter.dart';
2+
3+
/// A data model class that represents the "avoid returning widgets" input
4+
/// parameters.
5+
class NoEmptyBlockParameters {
6+
/// A list of methods that should be excluded from the lint.
7+
final ExcludedIdentifiersListParameter exclude;
8+
9+
/// Constructor for [NoEmptyBlockParameters] model
10+
NoEmptyBlockParameters({
11+
required this.exclude,
12+
});
13+
14+
/// Method for creating from json data
15+
factory NoEmptyBlockParameters.fromJson(Map<String, dynamic> json) {
16+
return NoEmptyBlockParameters(
17+
exclude: ExcludedIdentifiersListParameter.fromJson(
18+
excludeList: json[ExcludedIdentifiersListParameter.excludeParameterName]
19+
as Iterable? ??
20+
[],
21+
),
22+
);
23+
}
24+
}

lib/src/lints/no_empty_block/no_empty_block_rule.dart

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:analyzer/error/listener.dart';
22
import 'package:custom_lint_builder/custom_lint_builder.dart';
3+
import 'package:solid_lints/src/lints/no_empty_block/models/no_empty_block_parameters.dart';
34
import 'package:solid_lints/src/lints/no_empty_block/visitors/no_empty_block_visitor.dart';
45
import 'package:solid_lints/src/models/rule_config.dart';
56
import 'package:solid_lints/src/models/solid_lint_rule.dart';
@@ -49,7 +50,7 @@ import 'package:solid_lints/src/models/solid_lint_rule.dart';
4950
/// } catch (_) {} // ignored by this rule
5051
/// }
5152
/// ```
52-
class NoEmptyBlockRule extends SolidLintRule {
53+
class NoEmptyBlockRule extends SolidLintRule<NoEmptyBlockParameters> {
5354
/// This lint rule represents
5455
/// the error whether left empty block.
5556
static const String lintName = 'no_empty_block';
@@ -62,6 +63,7 @@ class NoEmptyBlockRule extends SolidLintRule {
6263
final config = RuleConfig(
6364
configs: configs,
6465
name: lintName,
66+
paramsParser: NoEmptyBlockParameters.fromJson,
6567
problemMessage: (_) =>
6668
'Block is empty. Empty blocks are often indicators of missing code.',
6769
);
@@ -76,12 +78,18 @@ class NoEmptyBlockRule extends SolidLintRule {
7678
CustomLintContext context,
7779
) {
7880
context.registry.addCompilationUnit((node) {
79-
final visitor = NoEmptyBlockVisitor();
80-
node.accept(visitor);
81-
82-
for (final emptyBlock in visitor.emptyBlocks) {
83-
reporter.atNode(emptyBlock, code);
84-
}
81+
context.registry.addDeclaration((declarationNode) {
82+
final isIgnored =
83+
config.parameters.exclude.shouldIgnore(declarationNode);
84+
final visitor = NoEmptyBlockVisitor();
85+
node.accept(visitor);
86+
87+
if (!isIgnored) {
88+
for (final emptyBlock in visitor.emptyBlocks) {
89+
reporter.atNode(emptyBlock, code);
90+
}
91+
}
92+
});
8593
});
8694
}
8795
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,31 @@
1+
import 'package:solid_lints/src/models/excluded_identifiers_list_parameter.dart';
2+
13
/// A data model class that represents the "number of parameters" input
24
/// parameters.
35
class NumberOfParametersParameters {
46
/// Maximum number of parameters allowed before a warning is triggered.
57
final int maxParameters;
68

9+
/// A list of methods that should be excluded from the lint.
10+
final ExcludedIdentifiersListParameter exclude;
11+
712
static const _defaultMaxParameters = 2;
813

914
/// Constructor for [NumberOfParametersParameters] model
1015
const NumberOfParametersParameters({
1116
required this.maxParameters,
17+
required this.exclude,
1218
});
1319

1420
/// Method for creating from json data
1521
factory NumberOfParametersParameters.fromJson(Map<String, Object?> json) =>
1622
NumberOfParametersParameters(
1723
maxParameters: json['max_parameters'] as int? ?? _defaultMaxParameters,
24+
exclude: ExcludedIdentifiersListParameter.fromJson(
25+
excludeList:
26+
json[ExcludedIdentifiersListParameter.excludeParameterName]
27+
as Iterable? ??
28+
[],
29+
),
1830
);
1931
}

lib/src/lints/number_of_parameters/number_of_parameters_rule.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ class NumberOfParametersRule
6565
CustomLintContext context,
6666
) {
6767
context.registry.addDeclaration((node) {
68+
final isIgnored = config.parameters.exclude.shouldIgnore(node);
6869
final parameters = switch (node) {
6970
(final MethodDeclaration node) =>
7071
node.parameters?.parameters.length ?? 0,
@@ -73,7 +74,7 @@ class NumberOfParametersRule
7374
_ => 0,
7475
};
7576

76-
if (parameters > config.parameters.maxParameters) {
77+
if (!isIgnored && parameters > config.parameters.maxParameters) {
7778
reporter.atOffset(
7879
offset: node.firstTokenAfterCommentAndMetadata.offset,
7980
length: node.end,

0 commit comments

Comments
 (0)