Skip to content

Commit 261d661

Browse files
committed
extension ignored by parameter
1 parent ea40baa commit 261d661

File tree

4 files changed

+45
-4
lines changed

4 files changed

+45
-4
lines changed

lib/analysis_options.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,8 @@ custom_lint:
9393

9494
- prefer_first
9595
- prefer_last
96-
- prefer_match_file_name
96+
- prefer_match_file_name:
97+
ignore_extensions: true
9798
- proper_super_calls
9899

99100
linter:
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/// A data model class that represents the "prefer factmatch file name" input
2+
/// parameters
3+
class PreferMatchFileNameParameters {
4+
/// A variable that indicates whether to ignore extensions
5+
final bool ignoreExtensions;
6+
7+
static const bool _defaultIgnoreExtensionsValue = false;
8+
9+
/// Constructor for [PreferMatchFileNameParameters] model
10+
const PreferMatchFileNameParameters({
11+
required this.ignoreExtensions,
12+
});
13+
14+
/// Method for creating from json data
15+
factory PreferMatchFileNameParameters.fromJson(Map<String, Object?> json) =>
16+
PreferMatchFileNameParameters(
17+
ignoreExtensions:
18+
json['ignore_extensions'] as bool? ?? _defaultIgnoreExtensionsValue,
19+
);
20+
}

lib/src/lints/prefer_match_file_name/prefer_match_file_name_rule.dart

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
import 'package:analyzer/error/listener.dart';
22
import 'package:custom_lint_builder/custom_lint_builder.dart';
33
import 'package:path/path.dart' as p;
4+
import 'package:solid_lints/src/lints/prefer_match_file_name/models/prefer_match_file_name_parameters.dart';
45
import 'package:solid_lints/src/lints/prefer_match_file_name/visitors/prefer_match_file_name_visitor.dart';
56
import 'package:solid_lints/src/models/rule_config.dart';
67
import 'package:solid_lints/src/models/solid_lint_rule.dart';
78
import 'package:solid_lints/src/utils/node_utils.dart';
89

10+
import '../number_of_parameters/models/number_of_parameters_parameters.dart';
11+
912
/// Warns about a mismatch between file name and first declared element inside.
1013
///
1114
/// This improves navigation by matching file content and file name.
@@ -48,7 +51,8 @@ import 'package:solid_lints/src/utils/node_utils.dart';
4851
/// class SomethingPublic {} // OK
4952
/// ```
5053
///
51-
class PreferMatchFileNameRule extends SolidLintRule {
54+
class PreferMatchFileNameRule
55+
extends SolidLintRule<PreferMatchFileNameParameters> {
5256
/// This lint rule represents the error if iterable
5357
/// access can be simplified.
5458
static const String lintName = 'prefer_match_file_name';
@@ -62,6 +66,7 @@ class PreferMatchFileNameRule extends SolidLintRule {
6266
final config = RuleConfig(
6367
configs: configs,
6468
name: lintName,
69+
paramsParser: PreferMatchFileNameParameters.fromJson,
6570
problemMessage: (value) =>
6671
'File name does not match with first declared element name.',
6772
);
@@ -76,7 +81,9 @@ class PreferMatchFileNameRule extends SolidLintRule {
7681
CustomLintContext context,
7782
) {
7883
context.registry.addCompilationUnit((node) {
79-
final visitor = PreferMatchFileNameVisitor();
84+
final isIgnored = config.parameters.ignoreExtensions;
85+
86+
final visitor = PreferMatchFileNameVisitor(ignoreExtensions: isIgnored);
8087

8188
node.accept(visitor);
8289

lib/src/lints/prefer_match_file_name/visitors/prefer_match_file_name_visitor.dart

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@ import 'package:solid_lints/src/lints/prefer_match_file_name/models/declaration_
77
class PreferMatchFileNameVisitor extends RecursiveAstVisitor<void> {
88
final _declarations = <DeclarationTokenInfo>[];
99

10+
/// Variable for making sure if extensions should be ignored
11+
final bool ignoreExtensions;
12+
13+
/// Constructor of [PreferMatchFileNameVisitor] class
14+
PreferMatchFileNameVisitor({
15+
required this.ignoreExtensions,
16+
});
17+
1018
/// List of all declarations
1119
Iterable<DeclarationTokenInfo> get declarations => _declarations
1220
..sort(
@@ -27,7 +35,12 @@ class PreferMatchFileNameVisitor extends RecursiveAstVisitor<void> {
2735
void visitExtensionDeclaration(ExtensionDeclaration node) {
2836
super.visitExtensionDeclaration(node);
2937

30-
return;
38+
if (!ignoreExtensions) {
39+
final name = node.name;
40+
if (name != null) {
41+
_declarations.add((token: name, parent: node));
42+
}
43+
}
3144
}
3245

3346
@override

0 commit comments

Comments
 (0)