reachableNamesOf function

Set<String> reachableNamesOf(
  1. String entryPoint
)

What entryPoint links, named the way a rule names it: a package name for package: URIs, the bare library for dart: ones (dart:io).

The two live in one set because a seam rule does not care which kind of boundary it is guarding — dart:io and tom_github_api are both "something this entry point must not reach", and splitting them would mean two rule fields that are always written together.

Implementation

Set<String> reachableNamesOf(String entryPoint) => {
  for (final uri in externalImportsOf(entryPoint))
    uri.startsWith('dart:') ? uri.split('/')[0] : packageOf(uri),
};