发布

  • fix(extract): affected traverses in-function dynamic imports; Python member-call gating; ObjC resolver arm; bump to 0.9.39 (#2584, #2586, #2589, #2591)

    frostbyte_neo 发布于 2026-08-10 17:07:20 +00:00

    These land together because they are interleaved in extract.py/engine.py.

    #2584 (PR #2588, thanks @phudayyy): the 0.9.38 dynamic-import dedupe keyed
    only on target, so an in-function import() suppressed the file-level edge
    affected follows. Dedupe now keys on the importing file, emitting one
    file-level dynamic_import edge per file/target while keeping the call-site
    edge.

    #2586 / #2417 (PR #2586, thanks @EZZEASY): a Python member call on an
    untyped receiver (x.get(...)) no longer binds by name to a same-named
    module function. walk_calls now defers non-self/cls/super Python member
    calls to the evidence-gated resolver; super().method() still resolves.
    Known trade: same-file x = Thing(); x.method() loses its evidence-free
    edge (precision over recall, per #2553).

    #2589/#2591 resolver arm (in _resolve_objc_member_calls): the @protocol
    exclusion and the self.field/_ivar receiver resolution (paired with the
    objc.py extractor changes committed separately).

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

    下载附件