Skip to content

feat: Java / Kotlin / Ruby 対応を追加 (#12)#14

Open
k-buchi4696 wants to merge 2 commits into
mainfrom
feature/issue-12-java-kotlin-ruby-support
Open

feat: Java / Kotlin / Ruby 対応を追加 (#12)#14
k-buchi4696 wants to merge 2 commits into
mainfrom
feature/issue-12-java-kotlin-ruby-support

Conversation

@k-buchi4696

Copy link
Copy Markdown
Collaborator

Summary

#12 対応。既存の Go/Rust パターンを踏襲し polyglot scorer/fixer を 3 言語拡張。

  • 対応言語: Python, JS/TS, Go, Rust → + Java, Kotlin, Ruby
  • scorer: .java / .kt / .rb の関数定義を検出し、Javadoc / KDoc / YARD カバレッジを AI-Readiness に反映
  • fixer: 未ドキュメント関数の直上に 1 行スタブコメントを自動挿入
  • init: pom.xml / build.gradle.kts / Gemfile を依存ファイルとして認識、Maven/Gradle を区別した test コマンドを提案

実装の要点

  1. _scan_block_comment_functions 汎用ヘルパを新設し Javadoc/KDoc は JSDoc 検出 (/** */) を流用
  2. Ruby は _scan_line_comment_functions (# line prefix) を流用
  3. 新語追加を 1 行で済ませるため _BLOCK_LANG_DISPATCH / _BLOCK_FIX_DISPATCH の辞書駆動に統合

コードレビュー対応 (2 コミット目)

初回コミット後のレビューで挙がった CRITICAL/HIGH/MEDIUM/LOW 全件を同ブランチ内で対応済み:

  • CRITICAL C1: Java regex がメソッド本体の return doFoo(x) / throw new X() を誤検出していた問題を修正 (負の先読みに制御フロー語を追加、パラメータリスト+{/; を要求する構造に厳格化)
  • HIGH H1: _is_ruby_test_file / _is_jvm_test_file を repo 相対パスに限定。lib/inspector/test/runner.rb のような本番コードの誤除外を修正
  • HIGH H2: Ruby setter def foo=(v)= 捕捉
  • MEDIUM M2/M3, LOW L1/L2/L5/L6: 詳細はコミット f59aeeb 参照

Test plan

  • 検出 unit tests (Java/Kotlin/Ruby): 15 件
  • scorer 統合 tests: 6 件
  • fixer unit tests: 10 件
  • エンドツーエンド auto_fix tests: 3 件
  • エッジケース (abstract / interface / throws / annotation / setter): 8 件
  • 冪等性 tests (2 回目は no-op): 3 件
  • src/test/ 除外統合 tests: 2 件
  • Maven/Gradle test_command 切り替え tests: 3 件
  • テストファイル判定 helper tests: 9 件
  • 既存 548 + 新規 64 = 612 件全パス
  • ruff check . クリーン

既知の制約

  • /* plain block comment */ を Javadoc と区別しない (既存 JS scanner と挙動統一、pinning test で明文化)
  • Spring/Maven 混在プロジェクトなど実 Java OSS での挙動は未検証 → 後続タスク案件

Closes #12

既存の Go/Rust パターンを踏襲し、polyglot scorer/fixer を 3 言語追加:

- score.py: _JAVA_FUNC_RE / _KOTLIN_FUNC_RE / _RUBY_FUNC_RE と各
  _scan_* ヘルパ、_scan_block_comment_functions 汎用ヘルパ
  (Javadoc / KDoc は JSDoc の /** */ 検出を流用)、_is_jvm_test_file
  / _is_ruby_test_file を追加。_compute_ai_readiness に is_java
  / is_kotlin / is_ruby 分岐を追加
- fix.py: _fix_block_comment_file 汎用ヘルパと言語別ラッパーを追加。
  _fix_function_docstrings にテストファイルスキップ付きで dispatch
- init.py: test_file_patterns / test_setup_signals / dep_files /
  lint_tools / file_globs / test_commands を拡張
- tests/harness/test_java_kotlin_ruby_support.py: 新規 37 テスト
  (検出 / scorer / fixer / エンドツーエンド)

対応言語: Python, JS/TS, Go, Rust, Java, Kotlin, Ruby

テスト 585 件パス (既存 548 + 新規 37)。ruff check クリーン。

注: コードレビューで CRITICAL/HIGH 指摘あり (Java regex のメソッド
本体誤検出、Ruby テストファイル判定が過剰、Ruby setter 名キャプチャ)。
同ブランチの後続コミットで対応予定。
コードレビューで挙がった全指摘への対応:

CRITICAL
- C1: Java regex がメソッド本体の return doFoo(x) / throw new X() /
  if() / for() 等を誤ってメソッド宣言と判定していた問題を修正。
  negative lookahead に制御フロー語 (return/throw/new/if/else/for/
  while/do/switch/case/try/catch/finally/yield/assert/break/continue)
  を追加し、パラメータリスト + 閉じ括弧 + 任意 throws 句 + { か ;
  を要求するよう regex を厳格化

HIGH
- H1: _is_ruby_test_file / _is_jvm_test_file を repo 相対パスに限定。
  Rails 系の lib/inspector/test/runner.rb のような本番コード配下の
  "test"/"spec" セグメントが誤検出されていたのを修正。トップレベル
  の spec/ / test/ と src/test/ のみを対象とする
- H2: Ruby setter def foo=(v) の `=` を捕捉するため _RUBY_FUNC_RE
  の末尾を [?!=]? に変更

MEDIUM
- M2: Java return-type char class から ? を削除 (Kotlin nullable との
  混同)
- M3: score.py / fix.py の java/kotlin/ruby 分岐を _BLOCK_LANG_DISPATCH
  / _BLOCK_FIX_DISPATCH の辞書に集約。次の言語追加は 1 行の登録で済む

LOW
- L1: 非 Javadoc ブロックコメント (/* plain */) を documented と
  みなす既存挙動を pinning test として明文化
- L2: _is_jvm_test_file の冗長な境界ガードを削除
- L5/L6: Maven-only プロジェクト (pom.xml のみ) に ./gradlew test を
  提案していた不具合を修正。dependency_file == "pom.xml" のとき
  mvn test を出力

新規テスト 27 件 (計 612 件):
- C1 回帰 (method body false-positive)
- Java edge case: abstract / interface / throws / annotation 別行
- Kotlin edge case: fun interface / annotation
- Ruby setter (def foo=)
- _is_jvm_test_file / _is_ruby_test_file 直接テスト
- src/test/ 除外統合テスト (Java / Kotlin)
- 冪等性テスト (2 回目の fixer は no-op)
- 混在ファイル (一部ドキュメント済み → 未ドキュメントのみ追加)
- Maven/Gradle test_command 切り替え

ruff check クリーン。
@k-buchi4696

Copy link
Copy Markdown
Collaborator Author

CI 失敗は #15 起因で本 PR のスコープとは無関係です。

  • 失敗ジョブ: lint / test (3.11) / test (3.12) — いずれも uv pip install --system が PEP 668 で拒否される環境問題
  • 本 PR は .github/ 配下を一切変更していない
  • main でも過去 5 コミット連続で同じ失敗が発生中 (PR feat: Java / Kotlin / Ruby 対応を追加 (#12) #14 が導入した問題ではない)
  • ローカルでは 612/612 テスト緑 + ruff check . クリーン

#15 (CI 修正) をマージ後、本 PR の CI を再実行すれば通るはずです。

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: Java / Kotlin / Ruby 言語対応

1 participant