Skip to content

Commit f7e4b80

Browse files
committed
Add parameter for minimum number of type parameters
1 parent 7c54c79 commit f7e4b80

File tree

3 files changed

+34
-5
lines changed

3 files changed

+34
-5
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/// A data model class that represents the
2+
/// "use descriptive names for type parameters" input parameters.
3+
class UseDescriptiveNamesForTypeParametersParameters {
4+
static const _defaultMinTypeParameters = 3;
5+
6+
/// Minimum number of type parameters required before the rule is enforced.
7+
final int minTypeParameters;
8+
9+
/// Constructor for [UseDescriptiveNamesForTypeParametersParameters] model
10+
const UseDescriptiveNamesForTypeParametersParameters({
11+
required this.minTypeParameters,
12+
});
13+
14+
/// Method for creating from json data
15+
factory UseDescriptiveNamesForTypeParametersParameters.fromJson(
16+
Map<String, Object?> json,
17+
) =>
18+
UseDescriptiveNamesForTypeParametersParameters(
19+
minTypeParameters:
20+
json['min_type_parameters'] as int? ?? _defaultMinTypeParameters,
21+
);
22+
}

lib/src/lints/use_descriptive_names_for_type_parameters/use_descriptive_names_for_type_parameters_rule.dart

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import 'package:analyzer/dart/ast/ast.dart';
22
import 'package:analyzer/error/listener.dart';
33
import 'package:custom_lint_builder/custom_lint_builder.dart';
4+
import 'package:solid_lints/src/lints/use_descriptive_names_for_type_parameters/models/use_descriptive_names_for_type_parameters_parameters.dart';
45
import 'package:solid_lints/src/models/rule_config.dart';
56
import 'package:solid_lints/src/models/solid_lint_rule.dart';
67

78
/// A `use_descriptive_names_for_type_parameters` rule which
89
/// warns about single-letter type parameter names when there are
910
/// three or more type parameters.
10-
class UseDescriptiveNamesForTypeParametersRule extends SolidLintRule {
11+
class UseDescriptiveNamesForTypeParametersRule
12+
extends SolidLintRule<UseDescriptiveNamesForTypeParametersParameters> {
1113
/// The lint rule name.
1214
static const lintName = 'use_descriptive_names_for_type_parameters';
1315

@@ -21,9 +23,11 @@ class UseDescriptiveNamesForTypeParametersRule extends SolidLintRule {
2123
final rule = RuleConfig(
2224
configs: configs,
2325
name: lintName,
24-
problemMessage: (_) =>
26+
paramsParser: UseDescriptiveNamesForTypeParametersParameters.fromJson,
27+
problemMessage: (value) =>
2528
'Type parameters should have descriptive names instead '
26-
'of single letters when there are three or more type parameters.',
29+
'of single letters when there are ${value.minTypeParameters} or '
30+
'more type parameters.',
2731
);
2832

2933
return UseDescriptiveNamesForTypeParametersRule._(rule);
@@ -56,7 +60,9 @@ class UseDescriptiveNamesForTypeParametersRule extends SolidLintRule {
5660
TypeParameterList? typeParameters,
5761
ErrorReporter reporter,
5862
) {
59-
if (typeParameters == null || typeParameters.typeParameters.length < 3) {
63+
if (typeParameters == null ||
64+
typeParameters.typeParameters.length <
65+
config.parameters.minTypeParameters) {
6066
return;
6167
}
6268

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
custom_lint:
22
rules:
3-
- use_descriptive_names_for_type_parameters
3+
- use_descriptive_names_for_type_parameters:
4+
min_type_parameters: 3

0 commit comments

Comments
 (0)