Skip to content

静的検索で修飾付きのメソッド検索が 0 件になる(File.open / Kernel.#open など) #279

Description

@znz

現象

静的検索(各ページの検索ボックス)で、修飾付きのメソッド検索が 0 件になります。モジュール関数に限りません。

  • File.open → 0 件(open なら出る)
  • Kernel.#open / Kernel?.open → 0 件
  • String#size のようなインスタンスメソッド指定(#)は動作します

原因

vendored している Aliki の search_ranker.js は、クエリ中の . を一律 :: に書き換えます(RDoc では クラスメソッドの full_nameFoo::bar 形式のため)。一方 bitclust のインデックスの full_nameFile.openKernel.#open(Ruby 4.0 以降のインデックスでは #277 により Kernel?.open)のように . / .# / ?. をそのまま持つため、書き換え後のクエリがマッチしません。

#250?. クエリ対応の調査中に判明しました。サーバー検索(動的 /search の SimpleSearcher)側は両記法とも対応済みです。

制約と対応の選択肢

search_ranker.js は Aliki からの verbatim vendor 方針(改変せず上流追従を容易に保つ)のため、直接パッチは避けたいところです。選択肢:

  1. rurema 所有の search_init.js 側でクエリ前処理・インデックス読み込み時のエントリ前処理を行う(ランカー内部の computeScore に触れずに実現できる範囲かは要検証)
  2. ランカーをローカルパッチ付き fork にする(ヘッダに改変内容を明示して追従コストを受容)
  3. 上流 RDoc(Aliki)に「full_name の形式差を吸収する正規化フック」を提案する(汎用機能なら受け入れられる可能性)
  4. 現状を受容する(修飾なし検索は正常なため)

補足: highlightMatch() も同様に記法正規化非対応のため、対応時はハイライトも合わせて検討が必要です。

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions