Skip to content

Commit f9c5944

Browse files
srawlinsCommit Queue
authored andcommitted
linter: public_member_api_docs: dont report internal top-level variable
Fixes #60617 This includes a bit of clean-up of the other cases where we are concerned with `@internal`. Change-Id: I506725c2280ab90fd5e1014eb8478497de8a0480 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/427340 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Samuel Rawlins <[email protected]>
1 parent ad3e20a commit f9c5944

File tree

3 files changed

+25
-19
lines changed

3 files changed

+25
-19
lines changed

pkg/linter/lib/src/extensions.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,14 @@ extension AstNodeExtension on AstNode {
7777
}
7878

7979
bool get isInternal {
80+
var self = this;
81+
if (self is VariableDeclaration) {
82+
var element = self.declaredFragment?.element;
83+
if (element is TopLevelVariableElement) {
84+
return element.metadata2.hasInternal;
85+
}
86+
}
87+
8088
var parent = thisOrAncestorOfType<CompilationUnitMember>();
8189
if (parent == null) return false;
8290

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

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ class _Visitor extends SimpleAstVisitor<void> {
5858
_Visitor(this.rule, this.context);
5959

6060
bool check(Declaration node) {
61+
if (node.isInternal) return false;
62+
6163
if (node.documentationComment == null && !isOverridingMember(node)) {
6264
var errorNode = getNodeToAnnotate(node);
6365
rule.reportAtOffset(errorNode.offset, errorNode.length);
@@ -67,8 +69,6 @@ class _Visitor extends SimpleAstVisitor<void> {
6769
}
6870

6971
void checkMethods(List<ClassMember> members) {
70-
// Check methods
71-
7272
var getters = <String, MethodDeclaration>{};
7373
var setters = <MethodDeclaration>[];
7474

@@ -117,8 +117,7 @@ class _Visitor extends SimpleAstVisitor<void> {
117117

118118
@override
119119
void visitClassDeclaration(ClassDeclaration node) {
120-
var element = node.declaredFragment?.element;
121-
if (element == null || element.metadata2.hasInternal) return;
120+
if (node.declaredFragment?.element == null) return;
122121
_visitMembers(node, node.name, node.members);
123122
}
124123

@@ -134,8 +133,6 @@ class _Visitor extends SimpleAstVisitor<void> {
134133
var getters = <String, FunctionDeclaration>{};
135134
var setters = <FunctionDeclaration>[];
136135

137-
// Check functions.
138-
139136
// Non-getters/setters.
140137
var functions = <FunctionDeclaration>[];
141138

@@ -172,11 +169,7 @@ class _Visitor extends SimpleAstVisitor<void> {
172169
}
173170

174171
// Check remaining functions.
175-
for (var function in functions) {
176-
if (!function.isEffectivelyPrivate) {
177-
check(function);
178-
}
179-
}
172+
functions.forEach(check);
180173

181174
super.visitCompilationUnit(node);
182175
}
@@ -193,9 +186,6 @@ class _Visitor extends SimpleAstVisitor<void> {
193186

194187
@override
195188
void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
196-
// TODO(pq): update this to be called from the parent (like with visitMembers)
197-
if (node.isInternal) return;
198-
199189
if (!node.inPrivateMember && !node.name.isPrivate) {
200190
check(node);
201191
}
@@ -204,7 +194,6 @@ class _Visitor extends SimpleAstVisitor<void> {
204194
@override
205195
void visitEnumDeclaration(EnumDeclaration node) {
206196
if (node.name.isPrivate) return;
207-
if (node.isInternal) return;
208197

209198
check(node);
210199
checkMethods(node.members);
@@ -221,8 +210,7 @@ class _Visitor extends SimpleAstVisitor<void> {
221210

222211
@override
223212
void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
224-
var element = node.declaredFragment?.element;
225-
if (element == null || element.metadata2.hasInternal) return;
213+
if (node.declaredFragment?.element == null) return;
226214
_visitMembers(node, node.name, node.members);
227215
}
228216

@@ -256,7 +244,6 @@ class _Visitor extends SimpleAstVisitor<void> {
256244

257245
@override
258246
void visitMixinDeclaration(MixinDeclaration node) {
259-
if (node.isInternal) return;
260247
_visitMembers(node, node.name, node.members);
261248
}
262249

@@ -271,6 +258,7 @@ class _Visitor extends SimpleAstVisitor<void> {
271258

272259
void _visitMembers(Declaration node, Token name, List<ClassMember> members) {
273260
if (name.isPrivate) return;
261+
if (node.isInternal) return;
274262

275263
check(node);
276264
checkMethods(members);

pkg/linter/test/rules/public_member_api_docs_test.dart

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,16 @@ mixin M {
346346
);
347347
}
348348

349+
/// https://github.com/dart-lang/linter/issues/5030
350+
test_internalTopLevelVariable() async {
351+
await assertNoDiagnostics(r'''
352+
import 'package:meta/meta.dart';
353+
354+
@internal
355+
var f = 1;
356+
''');
357+
}
358+
349359
test_mixin_method() async {
350360
await assertDiagnostics(
351361
r'''
@@ -393,7 +403,7 @@ final class A extends S {}
393403
''',
394404
[
395405
lint(13, 1),
396-
// No lint on `S()` declaration
406+
// No lint on `S()` constructor declaration.
397407
lint(39, 1),
398408
],
399409
);

0 commit comments

Comments
 (0)