发布

  • fix: JS/Kotlin/Swift/SQL extractor correctness batch; bump to 0.9.38 (#2568, #2565, #2561, #2577, #2575)

    frostbyte_neo 发布于 2026-08-09 22:19:08 +00:00

    These changes are interleaved across engine.py/extract.py by function, so
    they land as one batch.

    #2568 (thanks @imagineers-tyler): the 0.9.37 #2552 callback-body fix
    unioned sibling closures' local names under the shared declaration, so a
    local in one callback suppressed a real indirect_call in a sibling. Locals
    are now scoped per body (keyed by body id, via walk_calls' extra_locals).
    Restore-only, never fabricates; #2552 capture preserved.

    #2565 (thanks @kskchaitanya1993): Kotlin property initializers — class,
    top-level, companion, and by lazy {} — now seed call extraction, so
    val repo = createRepo() produces a calls edge; literal initializers
    produce none; FQ calls compose with the #2550 resolver.

    #2561 (thanks @fakewaffle): Swift receiver typing now handles
    @Environment(Store.self) (whitelisted; @Query/keypath/dotted skipped to
    avoid a wrong edge) and in-corpus factory bindings via a marked concrete
    return type; opaque/array/out-of-corpus returns stay unresolved.

    #2577 (thanks @wilyan09007, PR #2579): the SQL extractor no longer emits a
    reads_from edge to a CTE name. WITH names are scoped per query (a subquery
    CTE no longer suppresses an outer real table of the same name), so a CTE
    no longer mints a bare stub that binds to an unrelated same-named symbol.

    #2575 (thanks @phudayyy, PR #2574): a dynamic import('…') inside a nested
    function or at module scope now produces an edge, dynamic_import is
    included in affected, and calls inside nested named functions are
    collected; a dynamic import already captured as a deferred imports_from is
    not double-counted.

    Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

    下载附件