linter: Move two top-level functions to be shared extensions

Cq-Include-Trybots: luci.dart.try:flutter-analyze-try,analyzer-win-release-try,pkg-win-release-try
Change-Id: I4a9dc49c6593af899de07787fd77bc0bc9d4a6d8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/372184
Reviewed-by: Phil Quitslund <pquitslund@google.com>
Auto-Submit: Sam Rawlins <srawlins@google.com>
Commit-Queue: Phil Quitslund <pquitslund@google.com>
This commit is contained in:
Sam Rawlins 2024-06-24 21:29:39 +00:00 committed by Commit Queue
parent fbf0b08568
commit 4babb9deb1
5 changed files with 36 additions and 39 deletions

View file

@ -130,19 +130,6 @@ Element? getWriteOrReadElement(SimpleIdentifier node) {
bool hasConstantError(Expression node) =>
node.computeConstantValue().errors.isNotEmpty;
/// Returns `true` if this [node] is the child of a private compilation unit
/// member.
bool inPrivateMember(AstNode node) {
var parent = node.parent;
if (parent is NamedCompilationUnitMember) {
return isPrivate(parent.name);
}
if (parent is ExtensionDeclaration) {
return parent.name == null || isPrivate(parent.name);
}
return false;
}
/// Returns `true` if this element is the `==` method declaration.
bool isEquals(ClassMember element) =>
element is MethodDeclaration && element.name.lexeme == '==';
@ -193,10 +180,6 @@ bool isKeyWord(String id) => Keyword.keywords.containsKey(id);
/// Returns `true` if the given [ClassMember] is a method.
bool isMethod(ClassMember m) => m is MethodDeclaration;
/// Check if the given identifier has a private name.
bool isPrivate(Token? name) =>
name != null ? Identifier.isPrivateName(name.lexeme) : false;
/// Returns `true` if the given [ClassMember] is a public method.
bool isPublicMethod(ClassMember m) {
var declaredElement = m.declaredElement;

View file

@ -29,6 +29,16 @@ class EnumLikeClassDescription {
extension AstNodeExtension on AstNode {
Iterable<AstNode> get childNodes => childEntities.whereType<AstNode>();
/// Whether this is the child of a private compilation unit member.
bool get inPrivateMember {
var parent = this.parent;
return switch (parent) {
NamedCompilationUnitMember() => parent.name.isPrivate,
ExtensionDeclaration() => parent.name == null || parent.name.isPrivate,
_ => false,
};
}
bool get isAugmentation {
var self = this;
return switch (self) {
@ -644,6 +654,12 @@ extension StringExtension on String {
extension TokenExtension on Token? {
bool get isFinal => this?.keyword == Keyword.FINAL;
/// Whether the given identifier has a private name.
bool get isPrivate {
var self = this;
return self != null ? Identifier.isPrivateName(self.lexeme) : false;
}
}
extension TokenTypeExtension on TokenType {

View file

@ -9,7 +9,6 @@ import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import '../analyzer.dart';
import '../ast.dart';
import '../extensions.dart';
import '../util/flutter_utils.dart';
@ -129,7 +128,7 @@ class _Visitor extends SimpleAstVisitor {
}
bool skipForDiagnostic({Element? element, DartType? type, Token? name}) =>
isPrivate(name) || _isOverridingMember(element) || isWidgetProperty(type);
name.isPrivate || _isOverridingMember(element) || isWidgetProperty(type);
@override
void visitClassDeclaration(ClassDeclaration node) {

View file

@ -132,7 +132,7 @@ class _Visitor extends SimpleAstVisitor {
// Identify getter/setter pairs.
for (var member in members) {
if (member is MethodDeclaration && !isPrivate(member.name)) {
if (member is MethodDeclaration && !member.name.isPrivate) {
if (member.isGetter) {
getters[member.name.lexeme] = member;
} else if (member.isSetter) {
@ -176,7 +176,7 @@ class _Visitor extends SimpleAstVisitor {
@override
void visitClassTypeAlias(ClassTypeAlias node) {
if (!isPrivate(node.name)) {
if (!node.name.isPrivate) {
check(node);
}
}
@ -195,7 +195,7 @@ class _Visitor extends SimpleAstVisitor {
for (var member in node.declarations) {
if (member is FunctionDeclaration) {
var name = member.name;
if (!isPrivate(name) && name.lexeme != 'main') {
if (!name.isPrivate && name.lexeme != 'main') {
if (member.isGetter) {
getters[member.name.lexeme] = member;
} else if (member.isSetter) {
@ -231,7 +231,7 @@ class _Visitor extends SimpleAstVisitor {
@override
void visitConstructorDeclaration(ConstructorDeclaration node) {
if (inPrivateMember(node) || isPrivate(node.name)) return;
if (node.inPrivateMember || node.name.isPrivate) return;
var parent = node.parent;
if (parent is EnumDeclaration) return;
if (parent != null && parent.isEffectivelyPrivate) return;
@ -244,14 +244,14 @@ class _Visitor extends SimpleAstVisitor {
// TODO(pq): update this to be called from the parent (like with visitMembers)
if (node.isInternal) return;
if (!inPrivateMember(node) && !isPrivate(node.name)) {
if (!node.inPrivateMember && !node.name.isPrivate) {
check(node);
}
}
@override
void visitEnumDeclaration(EnumDeclaration node) {
if (isPrivate(node.name)) return;
if (node.name.isPrivate) return;
if (node.isInternal) return;
check(node);
@ -260,7 +260,7 @@ class _Visitor extends SimpleAstVisitor {
@override
void visitExtensionDeclaration(ExtensionDeclaration node) {
if (node.name == null || isPrivate(node.name)) return;
if (node.name == null || node.name.isPrivate) return;
if (node.isInternal) return;
check(node);
@ -278,11 +278,11 @@ class _Visitor extends SimpleAstVisitor {
void visitFieldDeclaration(FieldDeclaration node) {
// TODO(pq): update this to be called from the parent (like with visitMembers)
if (node.isInternal) return;
if (inPrivateMember(node)) return;
if (node.inPrivateMember) return;
if (node.isInvalidExtensionTypeField) return;
for (var field in node.fields.variables) {
if (!isPrivate(field.name)) {
if (!field.name.isPrivate) {
check(field);
}
}
@ -290,14 +290,14 @@ class _Visitor extends SimpleAstVisitor {
@override
void visitFunctionTypeAlias(FunctionTypeAlias node) {
if (!isPrivate(node.name)) {
if (!node.name.isPrivate) {
check(node);
}
}
@override
void visitGenericTypeAlias(GenericTypeAlias node) {
if (!isPrivate(node.name)) {
if (!node.name.isPrivate) {
check(node);
}
}
@ -310,15 +310,15 @@ class _Visitor extends SimpleAstVisitor {
@override
void visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
for (var decl in node.variables.variables) {
if (!isPrivate(decl.name)) {
check(decl);
for (var variable in node.variables.variables) {
if (!variable.name.isPrivate) {
check(variable);
}
}
}
void _visitMembers(Declaration node, Token name, List<ClassMember> members) {
if (isPrivate(name)) return;
if (name.isPrivate) return;
check(node);
checkMethods(members);

View file

@ -7,7 +7,6 @@ import 'package:analyzer/dart/ast/visitor.dart';
import 'package:analyzer/dart/element/type.dart';
import '../analyzer.dart';
import '../ast.dart';
import '../extensions.dart';
import '../util/ascii_utils.dart';
@ -95,7 +94,7 @@ class _Visitor extends SimpleAstVisitor<void> {
void visitFunctionDeclaration(FunctionDeclaration node) {
if (node.isAugmentation) return;
if (!isPrivate(node.name) &&
if (!node.name.isPrivate &&
// Only report on top-level functions, not those declared within the
// scope of another function.
node.parent is CompilationUnit) {
@ -109,7 +108,7 @@ class _Visitor extends SimpleAstVisitor<void> {
@override
void visitFunctionTypeAlias(FunctionTypeAlias node) {
if (!isPrivate(node.name)) {
if (!node.name.isPrivate) {
if (node.returnType == null) {
rule.reportLintForToken(node.name);
} else {
@ -122,7 +121,7 @@ class _Visitor extends SimpleAstVisitor<void> {
void visitMethodDeclaration(MethodDeclaration node) {
if (node.isAugmentation) return;
if (!isPrivate(node.name)) {
if (!node.name.isPrivate) {
if (node.returnType == null && !node.isSetter) {
rule.reportLintForToken(node.name);
} else {
@ -165,7 +164,7 @@ class _VisitorHelper extends RecursiveAstVisitor {
@override
void visitVariableDeclaration(VariableDeclaration node) {
if (!isPrivate(node.name) &&
if (!node.name.isPrivate &&
!node.isConst &&
!(node.isFinal && hasInferredType(node))) {
rule.reportLintForToken(node.name);