Skip to content

逆依存検索の追加 (--importers / --used-by) #118

@Kewton

Description

@Kewton

概要

「このファイルをimportしているファイルは?」という逆方向の依存検索を追加する。

背景・課題

anvildev + commandindexdev の8パターン性能検証で、CommandIndexが提供する情報にLLMが実装に必要とする情報が含まれていないという根本的な問題が判明した。

具体例: Issue #301(iPad横置きターミナルフルスクリーン)

LLMが実装に必要とした情報:

  • useFullscreen.ts の使用例 → MarkdownEditor.tsx が既にフルスクリーンを実装している
  • useSwipeGesture.ts の使用例 → 同上

CommandIndex related TerminalDisplay.tsx が提供した情報:

  • TerminalSearchBar, useTerminalSearch, useTerminalScroll, sanitize(全て既存import先
  • useFullscreen, MarkdownEditor は提供されなかった(TerminalDisplayからのimport関係がないため)

原因

related / context / impact は全て順方向の依存グラフ(「このファイルが何をimportしているか」)のみを辿る。逆方向(「このファイルを誰がimportしているか」)は検索できない。

逆方向があれば解決できた

# もし逆依存検索があれば:
commandindexdev search --importers src/hooks/useFullscreen.ts
# → MarkdownEditor.tsx が即座に見つかる
# → 「MarkdownEditorがフルスクリーンをどう実装しているか」という参考実装に到達

全テストパターンでLLMが自力で辿ったパス(useFullscreen → MarkdownEditor)を、CommandIndexが直接提供できるようになる。

提案

commandindexdev search --importers src/hooks/useFullscreen.ts --format json

期待される出力:

{"path": "src/components/worktree/MarkdownEditor.tsx", "import_line": "import { useFullscreen } from '@/hooks/useFullscreen';"}
{"path": "tests/unit/hooks/useFullscreen.test.ts", "import_line": "import { useFullscreen } from '@/hooks/useFullscreen';"}

実装方針

既存のインデックスにはimportグラフの情報が含まれている。これを逆引きするだけで実装可能(新たな解析は不要)。

オプション案

  • --importers <FILE>: 指定ファイルをimportしているファイル一覧
  • --used-by <SYMBOL>: 指定シンボルを使用しているファイル一覧(より細かい粒度)
  • --format json|path|compact: 出力フォーマット
  • --limit N: 結果件数制限

期待効果

  • LLMが「参考実装」に到達するための情報を直接提供できる
  • 既存のrelated/context/impactでは到達不可能だった「パターン類似ファイル」の発見が可能になる

優先度

高(実装難度: 低、期待効果: 高)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions