in src/Linters/UnusedUseClauseLinter.hack [42:97]
private function getUnusedClauses(
?Token $kind,
vec<NamespaceUseClause> $clauses,
): vec<(string, NamespaceUseClause)> {
$used = $this->getUnresolvedReferencedNames();
$unused = vec[];
foreach ($clauses as $clause) {
$as = $clause->getAlias();
if ($as !== null) {
$as = $as->getText();
} else {
$name = $clause->getName();
if ($name is NameToken) {
$as = $name->getText();
} else {
invariant($name is QualifiedName, 'Unhandled name type');
$as = $name->getParts()->getChildrenOfItemsOfType(NameToken::class)
|> (C\lastx($$) as nonnull)->getText();
}
}
if ($kind is NamespaceToken) {
if (!C\contains($used['namespaces'], $as)) {
$unused[] = tuple($as, $clause);
}
continue;
}
if ($kind is TypeToken) {
if (!C\contains($used['types'], $as)) {
$unused[] = tuple($as, $clause);
}
continue;
}
if ($kind is FunctionToken) {
if (!C\contains($used['functions'], $as)) {
$unused[] = tuple($as, $clause);
}
continue;
}
if ($kind is ConstToken) {
// unsupported
continue;
}
invariant($kind === null, 'Unhandled kind: %s', \get_class($kind));
if (C\contains($used['namespaces'], $as)) {
continue;
}
if (C\contains($used['types'], $as)) {
continue;
}
$unused[] = tuple($as, $clause);
}
return $unused;
}