Skip to content
This repository was archived by the owner on Nov 20, 2024. It is now read-only.

Commit fd323ad

Browse files
committed
address review comments
1 parent 0f12d55 commit fd323ad

File tree

1 file changed

+10
-16
lines changed

1 file changed

+10
-16
lines changed

lib/src/rules/unused_top_members_in_executable_libraries.dart

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@ const _desc = 'Unused top-level members in executable libraries.';
1515
const _details = r'''
1616
1717
Top-level members in an executable library should be used directly inside this
18-
library. Executable library are usually never used as dependency and it's better
19-
to avoid defining unused members.
18+
library. Executable libraries are usually never used as dependency and it's
19+
better to avoid defining unused members.
20+
21+
This rule assumes that an executable library shouldn't be imported by other
22+
files except to execute its `main` function.
2023
2124
**BAD:**
2225
@@ -32,7 +35,7 @@ main() {
3235
f();
3336
}
3437
void f() {}
35-
``
38+
```
3639
3740
''';
3841

@@ -66,8 +69,6 @@ class _Visitor extends SimpleAstVisitor<void> {
6669
if (node.directives.whereType<PartOfDirective>().isNotEmpty) return;
6770
if (node.directives.whereType<PartDirective>().isNotEmpty) return;
6871

69-
if (!_isInsideExecutableLibrary(node)) return;
70-
7172
var topDeclarations = node.declarations
7273
.expand((e) => [
7374
if (e is TopLevelVariableDeclaration)
@@ -77,6 +78,8 @@ class _Visitor extends SimpleAstVisitor<void> {
7778
])
7879
.toSet();
7980

81+
if (!topDeclarations.any(_isEntryPoint)) return;
82+
8083
var declarationByElement = <Element, Declaration>{};
8184
for (var declaration in topDeclarations) {
8285
var element = declaration.declaredElement;
@@ -118,9 +121,8 @@ class _Visitor extends SimpleAstVisitor<void> {
118121
while (toTraverse.isNotEmpty) {
119122
var declaration = toTraverse.removeLast();
120123
for (var dep in dependencies[declaration]!) {
121-
if (!usedMembers.contains(dep)) {
122-
usedMembers.add(dep);
123-
if (!toTraverse.contains(dep)) toTraverse.add(dep);
124+
if (usedMembers.add(dep)) {
125+
toTraverse.add(dep);
124126
}
125127
}
126128
}
@@ -161,12 +163,4 @@ class _Visitor extends SimpleAstVisitor<void> {
161163
}
162164
return false;
163165
}
164-
165-
bool _isInsideExecutableLibrary(AstNode node) {
166-
var root = node.root;
167-
if (root is! CompilationUnit) return false;
168-
var library = root.declaredElement?.library;
169-
return library != null &&
170-
library.exportNamespace.definedNames.containsKey('main');
171-
}
172166
}

0 commit comments

Comments
 (0)