* Stream method + function nodes lazily. The synthesizers only scan-and-filter * down to a tiny matched subset, so materializing every function/method (which * is gigabytes on a symbol-dense project) just to iterate it once is what OOM'd * #610. Iterating keeps memory O(1) in the node count.
(queries: QueryBuilder)
| 171 | * #610. Iterating keeps memory O(1) in the node count. |
| 172 | */ |
| 173 | function* methodAndFunctionNodes(queries: QueryBuilder): IterableIterator<Node> { |
| 174 | yield* queries.iterateNodesByKind('method'); |
| 175 | yield* queries.iterateNodesByKind('function'); |
| 176 | } |
| 177 | |
| 178 | /** Phase 1: field-backed observer channels (registrar/dispatcher share a store). */ |
| 179 | async function fieldChannelEdges(queries: QueryBuilder, ctx: ResolutionContext, onYield: MaybeYield): Promise<Edge[]> { |
no test coverage detected