Skip to content

feat: Python の Protocol 引数変更を実装クラスの適合証拠で閉じる - #40

Merged
owayo merged 1 commit into
mainfrom
feat/issue-38-python-protocol-callers
Oct 8, 2026
Merged

owayo merged 1 commit into
mainfrom
feat/issue-38-python-protocol-callers

Conversation

@owayo

@owayo owayo commented Oct 8, 2026

Copy link
Copy Markdown
Owner

概要

Python の Poster | None から複合 Port | None への引数注釈変更で、Client が新しい契約を満たしていても、無変更の run(client) が blocking に残っていた。注釈付きローカル変数の実装クラスが全必須メソッドに適合する場合は api.mod_closed と informational な impact に分類する。既に適合していたクラスも扱う。

原因と変更内容

従来の判定は呼び出しの変更行を主な追随証拠にしていた。Python 専用の追加証拠を ClosureArgEvidence に統合し、既存の変更行と TypeScript の共有 const の判定を維持する。

  • 引数名・型・既定値・戻り型・async の契約を厳密に照合する。名前だけの適合判定は採用しない。
  • 曖昧な束縛、再代入、メンバーの書き換えや削除、別名 import、未知の型、スタブ等は blocking に残す。
  • 引数内コメントを位置計算から除外する。呼び出し元と実装クラスの検査結果を解析中に再利用する。

セカンドオピニオンの設計案から、契約の型照合、既存の適合クラスの許容、解析中の証拠再利用を採用した。レビューで指摘されたコメントの位置ずれ、反復走査、引数ごとのキャッシュ対照を修正し、再レビューは LGTM。

追加証拠はローカルの静的な宣言契約に限定する。動的・推移的な名前解決、相対 import、継承した実装、変更対象の既定引数を省略する呼び出しは対象外とし、証明できない場合の既存判定を維持する。README と Architecture に範囲を記載した。

検証

  • ローカル全体検証: make ci 通過。
  • レビュー修正後: cargo test --locked protocol_、最終の呼び出し回帰テスト、cargo fmt --check、全ターゲット・全機能の Clippy(警告をエラー扱い)通過。
  • Issue の再現と引数コメントの誤判定は、修正前の失敗と修正後の成功を確認。メソッド不足・型不一致・複数引数の異なる契約・別名 import・スタブ・再束縛・メンバー削除の負例を追加。
  • debug ビルドで1,200呼び出しを約28秒で解析(時間は参考値)。
  • astro-sight review / impact と公開内容の検査を実施。

Closes #38

呼び出し側を変更せずに実装クラスが新しい Protocol に適合しても、変更行だけを追う判定では API 変更が blocking に残っていた。
注釈付きローカル変数から一意な実装クラスを解決し、継承したメソッド契約の厳密一致を追加証拠として使う。未知の型や束縛は保守的に保持し、既存の TS 証拠と変更行の判定を維持する。
コメントを除く引数位置対応、引数ごとの契約、再束縛・削除・スタブの対照を回帰テストで固定する。解析中のファイル・関数・引数ごとの結果を再利用する。
@owayo owayo self-assigned this Oct 8, 2026
@coderabbitai

coderabbitai Bot commented Oct 8, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: c0abba1c-1d7d-4e38-9da7-8d5b0f5eb1ce
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@owayo
owayo merged commit 6f84a54 into main Oct 8, 2026
9 checks passed
@owayo
owayo deleted the feat/issue-38-python-protocol-callers branch October 8, 2026 13:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant