Skip to content

[m:] の ?. 参照のリンクテキストが 4.0 以降でも .# 表示になる #282

Description

@znz

現象

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.rbconvert_md_ref_to_rrd が参照を RRD 形式へ復元する際に

# ? → .# (モジュール関数参照)
unescaped = unescaped.sub(/\?\./, '.#')

?..# に正規化しています。RRD 側の MethodSpec パーサが ?. を受けないための正規化自体は必要ですが、表示ラベルまで .# に変わってしまうのが問題です(bracket_linkmethod_link(spec, label || arg)arg が正規化後の文字列)。

修正方向の候補

  1. 表示時に畳む: method_link のデフォルトラベル(label || spec)を、DB バージョンが 4.0 以上のとき .#?. に畳む(4.0 以降のドキュメントでモジュール関数の表示を ?. にする #277display_typemark/display_* 系と同じ choke point に寄せる)。RRD 時代の旧ソース([[m:Kernel.#x]] 直書き)にも一貫して効く
  2. 変換時にラベルを保持: convert_md_ref_to_rrd で spec の正規化とは別に元表記をラベルとして渡す形にする(RRD 構文にラベル分離の受け皿が必要で大きめ)

1 が #277 の設計(表示だけ選択・識別子は不変)と揃っていて素直だと思います。

発見経緯

doctree#3264 のレビューで 3.4/4.0 両 DB 描画検証をした際に検出(当該 PR とは無関係の既存挙動)。

refs #250, #277

🤖 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