Skip to content

Commit 53f2113

Browse files
srawlinsCommit Queue
authored andcommitted
linter: add isEnabled to LinterContext directly
This was previously available as an extension on this class, but we control the class quite directly. Seems like it should just be an API of LinterContext. Change-Id: I9fb61ab4471e859c39d9fa963eed2a3839fca617 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/428925 Commit-Queue: Samuel Rawlins <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]>
1 parent bc3e0ad commit 53f2113

17 files changed

+39
-33
lines changed

pkg/analyzer/lib/src/lint/linter.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5+
import 'package:analyzer/dart/analysis/features.dart';
56
import 'package:analyzer/dart/analysis/results.dart';
67
import 'package:analyzer/dart/ast/ast.dart';
78
import 'package:analyzer/dart/ast/token.dart';
@@ -247,6 +248,9 @@ abstract class LinterContext {
247248

248249
TypeSystem get typeSystem;
249250

251+
/// Whether the given [feature] is enabled in this linter context.
252+
bool isFeatureEnabled(Feature feature);
253+
250254
static bool _isInLibDir(String? filePath, WorkspacePackage? package) {
251255
if (package == null) return false;
252256
if (filePath == null) return false;
@@ -298,6 +302,12 @@ final class LinterContextWithParsedResults implements LinterContext {
298302
throw UnsupportedError(
299303
'LinterContext with parsed results does not include a TypeSystem',
300304
);
305+
306+
@override
307+
bool isFeatureEnabled(Feature feature) =>
308+
throw UnsupportedError(
309+
'LinterContext with parsed results does not include a LibraryElement',
310+
);
301311
}
302312

303313
/// A [LinterContext] for a library, resolved into [ResolvedUnitResult]s.
@@ -347,6 +357,10 @@ final class LinterContextWithResolvedResults implements LinterContext {
347357
@override
348358
LibraryElement get libraryElement2 =>
349359
definingUnit.unit.declaredFragment!.element;
360+
361+
@override
362+
bool isFeatureEnabled(Feature feature) =>
363+
libraryElement2.featureSet.isEnabled(feature);
350364
}
351365

352366
/// Provides access to information needed by lint rules that is not available

pkg/linter/lib/src/extensions.dart

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
import 'package:analyzer/dart/analysis/features.dart';
65
import 'package:analyzer/dart/ast/ast.dart';
76
import 'package:analyzer/dart/ast/token.dart';
87
import 'package:analyzer/dart/constant/value.dart';
@@ -16,7 +15,6 @@ import 'package:analyzer/src/dart/element/type.dart' // ignore: implementation_i
1615
show InvalidTypeImpl;
1716
import 'package:collection/collection.dart';
1817

19-
import 'analyzer.dart';
2018
import 'util/dart_type_utilities.dart';
2119

2220
class EnumLikeClassDescription {
@@ -584,12 +582,6 @@ extension InterfaceTypeExtension on InterfaceType {
584582
setters.firstWhereOrNull((s) => s.canonicalName == name);
585583
}
586584

587-
extension LinterContextExtension on LinterContext {
588-
/// Whether the given [feature] is enabled in this linter context.
589-
bool isEnabled(Feature feature) =>
590-
libraryElement2!.featureSet.isEnabled(feature);
591-
}
592-
593585
extension MethodDeclarationExtension on MethodDeclaration {
594586
bool get hasInheritedMethod => lookUpInheritedMethod() != null;
595587

pkg/linter/lib/src/rules/avoid_renaming_method_parameters.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ class _Visitor extends SimpleAstVisitor<void> {
4545
final LintRule rule;
4646

4747
_Visitor(this.rule, LinterContext context)
48-
: _wildCardVariablesEnabled = context.isEnabled(Feature.wildcard_variables);
48+
: _wildCardVariablesEnabled = context.isFeatureEnabled(
49+
Feature.wildcard_variables,
50+
);
4951

5052
bool isWildcardIdentifier(String lexeme) =>
5153
_wildCardVariablesEnabled && lexeme == '_';

pkg/linter/lib/src/rules/avoid_shadowing_type_parameters.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import 'package:analyzer/dart/ast/visitor.dart';
88
import 'package:analyzer/error/error.dart';
99

1010
import '../analyzer.dart';
11-
import '../extensions.dart';
1211

1312
const _desc = r'Avoid shadowing type parameters.';
1413

@@ -42,7 +41,9 @@ class _Visitor extends SimpleAstVisitor<void> {
4241
final LintRule rule;
4342

4443
_Visitor(this.rule, LinterContext context)
45-
: _wildCardVariablesEnabled = context.isEnabled(Feature.wildcard_variables);
44+
: _wildCardVariablesEnabled = context.isFeatureEnabled(
45+
Feature.wildcard_variables,
46+
);
4647

4748
@override
4849
void visitFunctionDeclarationStatement(FunctionDeclarationStatement node) {

pkg/linter/lib/src/rules/invalid_case_patterns.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import 'package:analyzer/error/error.dart';
1010
import 'package:analyzer/src/dart/ast/token.dart'; // ignore: implementation_imports
1111

1212
import '../analyzer.dart';
13-
import '../extensions.dart';
1413

1514
const _desc = r'Use case expressions that are valid in Dart 3.0.';
1615

@@ -34,7 +33,7 @@ class InvalidCasePatterns extends LintRule {
3433
) {
3534
// This lint rule is only meant for code which does not have 'patterns'
3635
// enabled.
37-
if (context.isEnabled(Feature.patterns)) return;
36+
if (context.isFeatureEnabled(Feature.patterns)) return;
3837

3938
var visitor = _Visitor(this);
4039
registry.addSwitchCase(this, visitor);

pkg/linter/lib/src/rules/library_prefixes.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import 'package:analyzer/dart/ast/visitor.dart';
88
import 'package:analyzer/error/error.dart';
99

1010
import '../analyzer.dart';
11-
import '../extensions.dart';
1211
import '../utils.dart';
1312

1413
const _desc =
@@ -38,7 +37,9 @@ class _Visitor extends SimpleAstVisitor<void> {
3837
final LintRule rule;
3938

4039
_Visitor(this.rule, LinterContext context)
41-
: _wildCardVariablesEnabled = context.isEnabled(Feature.wildcard_variables);
40+
: _wildCardVariablesEnabled = context.isFeatureEnabled(
41+
Feature.wildcard_variables,
42+
);
4243

4344
@override
4445
void visitImportDirective(ImportDirective node) {

pkg/linter/lib/src/rules/no_leading_underscores_for_library_prefixes.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import 'package:analyzer/dart/ast/visitor.dart';
88
import 'package:analyzer/error/error.dart';
99

1010
import '../analyzer.dart';
11-
import '../extensions.dart';
1211
import '../util/ascii_utils.dart';
1312

1413
const _desc = r'Avoid leading underscores for library prefixes.';
@@ -41,7 +40,9 @@ class _Visitor extends SimpleAstVisitor<void> {
4140
final LintRule rule;
4241

4342
_Visitor(this.rule, LinterContext context)
44-
: _wildCardVariablesEnabled = context.isEnabled(Feature.wildcard_variables);
43+
: _wildCardVariablesEnabled = context.isFeatureEnabled(
44+
Feature.wildcard_variables,
45+
);
4546

4647
void checkIdentifier(SimpleIdentifier? id) {
4748
if (id == null) return;

pkg/linter/lib/src/rules/strict_top_level_inference.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,9 @@ class _Visitor extends SimpleAstVisitor<void> {
4949
final LinterContext context;
5050

5151
_Visitor(this.rule, this.context)
52-
: _wildCardVariablesEnabled = context.isEnabled(Feature.wildcard_variables);
52+
: _wildCardVariablesEnabled = context.isFeatureEnabled(
53+
Feature.wildcard_variables,
54+
);
5355

5456
bool isWildcardIdentifier(String lexeme) =>
5557
_wildCardVariablesEnabled && lexeme == '_';

pkg/linter/lib/src/rules/switch_on_type.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import 'package:analyzer/dart/element/type.dart';
1111
import 'package:analyzer/error/error.dart';
1212

1313
import '../analyzer.dart';
14-
import '../extensions.dart';
1514

1615
const _desc = "Avoid switch statements on a 'Type'.";
1716

@@ -31,7 +30,7 @@ class SwitchOnType extends LintRule {
3130
NodeLintRegistry registry,
3231
LinterContext context,
3332
) {
34-
if (!context.isEnabled(Feature.patterns)) return;
33+
if (!context.isFeatureEnabled(Feature.patterns)) return;
3534
var visitor = _Visitor(this, context);
3635
registry.addSwitchExpression(this, visitor);
3736
registry.addSwitchStatement(this, visitor);

pkg/linter/lib/src/rules/unnecessary_breaks.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import 'package:analyzer/dart/ast/visitor.dart';
88
import 'package:analyzer/error/error.dart';
99

1010
import '../analyzer.dart';
11-
import '../extensions.dart';
1211

1312
const _desc = r"Don't use explicit `break`s when a break is implied.";
1413

@@ -24,7 +23,7 @@ class UnnecessaryBreaks extends LintRule {
2423
NodeLintRegistry registry,
2524
LinterContext context,
2625
) {
27-
if (!context.isEnabled(Feature.patterns)) return;
26+
if (!context.isFeatureEnabled(Feature.patterns)) return;
2827

2928
var visitor = _Visitor(this);
3029
registry.addBreakStatement(this, visitor);

0 commit comments

Comments
 (0)