現象
Markdown ソースで [m:Kernel?.binding] のように ?. 表記で書いたメソッド参照が、4.0 以降の DB から描画してもリンクテキストは Kernel.#binding(旧表記)になります 。#277 でエントリの見出しは 4.0 以降 ?. 表示になったため、同じページ内で見出し(Kernel?.local_variables)と SEE・インライン参照(Kernel.#global_variables)の表記が混在しています。本番 https://docs.ruby-lang.org/ja/4.0/ 以降の各ページで発生している想定です。
再現(ミニ markdowntree で確認済み):
manual/api/_builtin/Binding.md の [m:Kernel?.binding] → 4.0 DB の class/Binding ページで <a href="../method/Kernel/m/binding.html">Kernel.#binding</a>
functions.md の - **SEE** [m:Kernel?.global_variables] → 4.0 DB の method/Kernel/m/local_variables ページで Kernel.#global_variables
原因
lib/bitclust/markdown_to_rrd.rb の convert_md_ref_to_rrd が参照を RRD 形式へ復元する際に
# ? → .# (モジュール関数参照)
unescaped = unescaped . sub ( /\? \. / , '.#' )
で ?. を .# に正規化しています。RRD 側の MethodSpec パーサが ?. を受けないための正規化自体は必要ですが、表示ラベルまで .# に変わってしまう のが問題です(bracket_link → method_link(spec, label || arg) の arg が正規化後の文字列)。
修正方向の候補
表示時に畳む: method_link のデフォルトラベル(label || spec)を、DB バージョンが 4.0 以上のとき .# → ?. に畳む(4.0 以降のドキュメントでモジュール関数の表示を ?. にする #277 の display_typemark/display_* 系と同じ choke point に寄せる)。RRD 時代の旧ソース([[m:Kernel.#x]] 直書き)にも一貫して効く
変換時にラベルを保持: convert_md_ref_to_rrd で spec の正規化とは別に元表記をラベルとして渡す形にする(RRD 構文にラベル分離の受け皿が必要で大きめ)
1 が #277 の設計(表示だけ選択・識別子は不変)と揃っていて素直だと思います。
発見経緯
doctree#3264 のレビューで 3.4/4.0 両 DB 描画検証をした際に検出(当該 PR とは無関係の既存挙動)。
refs #250 , #277
🤖 Generated with Claude Code
現象
Markdown ソースで
[m:Kernel?.binding]のように?.表記で書いたメソッド参照が、4.0 以降の DB から描画してもリンクテキストはKernel.#binding(旧表記)になります。#277 でエントリの見出しは 4.0 以降?.表示になったため、同じページ内で見出し(Kernel?.local_variables)と SEE・インライン参照(Kernel.#global_variables)の表記が混在しています。本番 https://docs.ruby-lang.org/ja/4.0/ 以降の各ページで発生している想定です。再現(ミニ markdowntree で確認済み):
manual/api/_builtin/Binding.mdの[m:Kernel?.binding]→ 4.0 DB の class/Binding ページで<a href="../method/Kernel/m/binding.html">Kernel.#binding</a>functions.mdの- **SEE** [m:Kernel?.global_variables]→ 4.0 DB の method/Kernel/m/local_variables ページでKernel.#global_variables原因
lib/bitclust/markdown_to_rrd.rbのconvert_md_ref_to_rrdが参照を RRD 形式へ復元する際にで
?.を.#に正規化しています。RRD 側の MethodSpec パーサが?.を受けないための正規化自体は必要ですが、表示ラベルまで.#に変わってしまうのが問題です(bracket_link→method_link(spec, label || arg)のargが正規化後の文字列)。修正方向の候補
method_linkのデフォルトラベル(label || spec)を、DB バージョンが 4.0 以上のとき.#→?.に畳む(4.0 以降のドキュメントでモジュール関数の表示を ?. にする #277 のdisplay_typemark/display_*系と同じ choke point に寄せる)。RRD 時代の旧ソース([[m:Kernel.#x]]直書き)にも一貫して効くconvert_md_ref_to_rrdで spec の正規化とは別に元表記をラベルとして渡す形にする(RRD 構文にラベル分離の受け皿が必要で大きめ)1 が #277 の設計(表示だけ選択・識別子は不変)と揃っていて素直だと思います。
発見経緯
doctree#3264 のレビューで 3.4/4.0 両 DB 描画検証をした際に検出(当該 PR とは無関係の既存挙動)。
refs #250, #277
🤖 Generated with Claude Code