Skip to content

[Junie]: Schemaジェネリックラッパーとvalidate型補完強化実装#11

Closed
jetbrains-junie[bot] wants to merge 1 commit intocopilot/add-type-hints-to-validate-functionfrom
jetbrains-junie-issue-9-run-4ad44f62-6f5e-43cf-87ad-a5922ac45ddb
Closed

[Junie]: Schemaジェネリックラッパーとvalidate型補完強化実装#11
jetbrains-junie[bot] wants to merge 1 commit intocopilot/add-type-hints-to-validate-functionfrom
jetbrains-junie-issue-9-run-4ad44f62-6f5e-43cf-87ad-a5922ac45ddb

Conversation

@jetbrains-junie
Copy link
Contributor

📌 Hey! This PR was made for you with Junie, the coding agent by JetBrains Early Access Preview

It's still learning, developing, and might make mistakes. Please make sure you review the changes before you accept them.
We'd love your feedback — join our Discord to share bugs, ideas: here.

📊 Junie Summary

対応内容の概要

  • Schema[T] ジェネリックと validate の型オーバーロードを追加し、IDE で validate 戻り値の型補完が効くようにしました。
  • 実装上は Schema を受け取ったときに中身の dict にアンラップして既存ロジックへ委譲するだけなので、ランタイム挙動は不変です。
  • トップレベルに Schema をエクスポートし、公開 API 追加としてバージョンを 1.1.0 に更新しました。
  • README と docs に「IDE 補完を効かせる(TypedDict + Schema)」の使い方を追記しました。
  • PR 上の3件コメントに対応:
    • @overload スタブの本体を ... から pass に変更("Statement has no effect" 誤検知の抑止)。
    • テスト内の「import と from import の併用」指摘に対し、validkit モジュールを二重に import しないよう修正。

具体的変更

  • src/validkit/validator.py
    • Schema(Generic[T]) を追加。
    • validate に2本の @overload を追加(Schema[T] -> T / その他 -> Any)。
    • オーバーロード本体を pass に変更し、リントの警告を回避。
    • validate 実装で Schema をアンラップして既存の validate_internal に委譲。
  • src/validkit/init.py
    • Schema を公開エクスポートに追加。
    • __version__ = "1.1.0" に更新。
  • tests/test_validkit.py
    • test_schema_exported を修正し、sys.modules["validkit"] を参照することで二重 import を回避。
  • README.md / docs/index.md
    • IDE 補完セクションを追加し、TypedDict + Schema の利用例を掲載。

テスト・品質

  • この実行環境では pytest/ruff/mypy が未導入のため実行できませんでしたが、テストは変更前と同一に動作する想定です。
  • CI/ローカルでの確認コマンド例:
    • pytest -q
    • ruff check src/
    • mypy src/ --strict --ignore-missing-imports

互換性

  • 既存の「プレーンな辞書スキーマ」を渡す使い方は完全に非破壊でそのまま利用可能です(戻り値は従来どおり Any)。
  • Schema[T] は完全オプトインで、導入時のみ IDE 型補完が有効になります。

 ### 対応内容の概要
- Schema[T] ジェネリックと `validate` の型オーバーロードを追加し、IDE で `validate` 戻り値の型補完が効くようにしました。
- 実装上は `Schema` を受け取ったときに中身の dict にアンラップして既存ロジックへ委譲するだけなので、ランタイム挙動は不変です。
- トップレベルに `Schema` をエクスポートし、公開 API 追加としてバージョンを 1.1.0 に更新しました。
- README と docs に「IDE 補完を効かせる(TypedDict + Schema)」の使い方を追記しました。
- PR 上の3件コメントに対応:
  - `@overload` スタブの本体を `...` から `pass` に変更("Statement has no effect" 誤検知の抑止)。
  - テスト内の「import と from import の併用」指摘に対し、`validkit` モジュールを二重に import しないよう修正。

### 具体的変更
- src/validkit/validator.py
  - Schema(Generic[T]) を追加。
  - `validate` に2本の `@overload` を追加(`Schema[T] -> T` / その他 -> `Any`)。
  - オーバーロード本体を `pass` に変更し、リントの警告を回避。
  - `validate` 実装で `Schema` をアンラップして既存の `validate_internal` に委譲。
- src/validkit/__init__.py
  - `Schema` を公開エクスポートに追加。
  - `__version__ = "1.1.0"` に更新。
- tests/test_validkit.py
  - `test_schema_exported` を修正し、`sys.modules["validkit"]` を参照することで二重 import を回避。
- README.md / docs/index.md
  - IDE 補完セクションを追加し、`TypedDict + Schema` の利用例を掲載。

### テスト・品質
- この実行環境では `pytest`/`ruff`/`mypy` が未導入のため実行できませんでしたが、テストは変更前と同一に動作する想定です。
- CI/ローカルでの確認コマンド例:
  - `pytest -q`
  - `ruff check src/`
  - `mypy src/ --strict --ignore-missing-imports`

### 互換性
- 既存の「プレーンな辞書スキーマ」を渡す使い方は完全に非破壊でそのまま利用可能です(戻り値は従来どおり Any)。
- `Schema[T]` は完全オプトインで、導入時のみ IDE 型補完が有効になります。
@harumaki4649
Copy link
Contributor

@jetbrains-junie コンフリクトが起きてるので元ブランチの変更をこのブランチに適応して変更をするべきだ

@jetbrains-junie
Copy link
Contributor Author

Hey, it's Junie by JetBrains! I started processing your request 🚀

📢 Thanks for participating in our GitHub EAP! Starting February, use the CLI at https://junie.jetbrains.com/ and the GitHub Action at https://github.com/JetBrains/junie-github-action. Active users already have CLI access, if anything goes wrong, reach out on Discord!

@jetbrains-junie
Copy link
Contributor Author

✅ The execution was successful

対応方針と結果

  • PR コメント「コンフリクトが起きてるので元ブランチの変更をこのブランチに適応して変更をするべきだ」に対し、まずローカルの作業ツリー(この実行環境内)で衝突マーカーを全ファイル検索しましたが、<<<<<<< / ======= / >>>>>>> は検出されませんでした。よって、現在のワークツリー上には未解決の「手作業マージ途中」の状態は存在しません。
  • そのため、この環境で行うべきコード修正はありませんでした。コンフリクトは GitHub 上のベースブランチと PR ブランチ間の履歴差分によって発生している可能性が高く、解消には「ベースブランチの変更をこの PR ブランチへ取り込む(マージ/リベース)」作業が必要です。

既存変更の健全性チェック(抜粋)

  • 追加 API: Schema(Generic[T]) の導入と validate のオーバーロード2本を確認。
  • validate 実装では Schema をアンラップして既存の validate_internal に委譲するため、ランタイム互換性は維持。
  • トップレベルエクスポート: from .validator import validate, ValidationError, Schema を確認。__all__Schema 追加済み。
  • バージョン: __version__ = "1.1.0" に更新済み(pyproject.toml は動的バージョンを src/validkit/__init__.py に委譲)。
  • テスト: tests/test_validkit.pySchema 利用・エクスポート確認テストを含み、sys.modules["validkit"] 参照で二重 import 回避済み。

何をすべきか(ベースブランチの変更取り込み手順)

リポジトリにアクセスできる環境(ローカル or GitHub Codespaces)で、以下いずれかの方法でベースブランチの変更を取り込んでください。

  1. マージ(安全・履歴保持)
  • git fetch origin
  • git checkout <このPRブランチ>
  • git merge origin/<ベースブランチ>
  • コンフリクトが出たファイルを解消
  • 動作確認(pytest / mypy / ruff)
  • git commit(自動コミットができない場合のみ)
  • git push
  1. リベース(履歴を直線化)
  • git fetch origin
  • git checkout <このPRブランチ>
  • git rebase origin/<ベースブランチ>
  • コンフリクト解消→ rebase --continue を繰り返す
  • 動作確認後、強制 push が必要になる場合あり: git push -f
  1. GitHub UI で解消
  • PR 画面の「Resolve conflicts」から手動で衝突を解消→コミット

注意:

  • リベースは強制 push が発生するため、共同作業者がいる場合はマージの方が無難です。
  • コンフリクトの典型例は src/validkit/__init__.py__version__、トップレベルのエクスポート追加、README/docs の同一セクション編集です。競合時は「ベース側の修正を尊重しつつ、本PRの Schema 追加や API 仕様を保持」する形で統合してください。

この環境での制約

  • ネットワーク越しにベースブランチの最新差分を取得できないため、ここではローカルファイル上の衝突有無の確認と、修正ガイドの提示に留めています。
  • pytest / ruff / mypy はこの環境に未導入のため、実行確認はできていません。ローカル/CI で以下を推奨します。
    • pytest -q
    • ruff check src/
    • mypy src/ --strict --ignore-missing-imports

フォローアップ

  • ベースブランチ名(例: main など)と、PR ブランチへの push 権限があれば、私の方でマージ/リベース手順の具体的コマンドと、想定される競合解消ポイント別の統合作法(例: __version__ のどちらを採用するか、README セクションのマージ方針)をさらに詳述できます。必要であればご指示ください。

📢 Thanks for participating in our GitHub EAP! Starting February, use the CLI at https://junie.jetbrains.com/ and the GitHub Action at https://github.com/JetBrains/junie-github-action. Active users already have CLI access, if anything goes wrong, reach out on Discord!

More information:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant