現象
静的検索(各ページの検索ボックス)で、修飾付きのメソッド検索が 0 件になります。モジュール関数に限りません。
File.open → 0 件(open なら出る)
Kernel.#open / Kernel?.open → 0 件
String#size のようなインスタンスメソッド指定(#)は動作します
原因
vendored している Aliki の search_ranker.js は、クエリ中の . を一律 :: に書き換えます(RDoc では クラスメソッドの full_name が Foo::bar 形式のため)。一方 bitclust のインデックスの full_name は File.open・Kernel.#open(Ruby 4.0 以降のインデックスでは #277 により Kernel?.open)のように . / .# / ?. をそのまま持つため、書き換え後のクエリがマッチしません。
#250 の ?. クエリ対応の調査中に判明しました。サーバー検索(動的 /search の SimpleSearcher)側は両記法とも対応済みです。
制約と対応の選択肢
search_ranker.js は Aliki からの verbatim vendor 方針(改変せず上流追従を容易に保つ)のため、直接パッチは避けたいところです。選択肢:
- rurema 所有の
search_init.js 側でクエリ前処理・インデックス読み込み時のエントリ前処理を行う(ランカー内部の computeScore に触れずに実現できる範囲かは要検証)
- ランカーをローカルパッチ付き fork にする(ヘッダに改変内容を明示して追従コストを受容)
- 上流 RDoc(Aliki)に「
full_name の形式差を吸収する正規化フック」を提案する(汎用機能なら受け入れられる可能性)
- 現状を受容する(修飾なし検索は正常なため)
補足: highlightMatch() も同様に記法正規化非対応のため、対応時はハイライトも合わせて検討が必要です。
🤖 Generated with Claude Code
現象
静的検索(各ページの検索ボックス)で、修飾付きのメソッド検索が 0 件になります。モジュール関数に限りません。
File.open→ 0 件(openなら出る)Kernel.#open/Kernel?.open→ 0 件String#sizeのようなインスタンスメソッド指定(#)は動作します原因
vendored している Aliki の
search_ranker.jsは、クエリ中の.を一律::に書き換えます(RDoc では クラスメソッドのfull_nameがFoo::bar形式のため)。一方 bitclust のインデックスのfull_nameはFile.open・Kernel.#open(Ruby 4.0 以降のインデックスでは #277 によりKernel?.open)のように./.#/?.をそのまま持つため、書き換え後のクエリがマッチしません。#250 の
?.クエリ対応の調査中に判明しました。サーバー検索(動的/searchの SimpleSearcher)側は両記法とも対応済みです。制約と対応の選択肢
search_ranker.jsは Aliki からの verbatim vendor 方針(改変せず上流追従を容易に保つ)のため、直接パッチは避けたいところです。選択肢:search_init.js側でクエリ前処理・インデックス読み込み時のエントリ前処理を行う(ランカー内部のcomputeScoreに触れずに実現できる範囲かは要検証)full_nameの形式差を吸収する正規化フック」を提案する(汎用機能なら受け入れられる可能性)補足:
highlightMatch()も同様に記法正規化非対応のため、対応時はハイライトも合わせて検討が必要です。🤖 Generated with Claude Code