メソッド属性行で名前別の since/until を指定できるようにする#273
Merged
Merged
Conversation
bitclust#132 P4。RD/MD 両パーサーが共有する Context#method_attributes
を拡張し、予約語だった {: since="X"} / {: until="X"} を受理するように
した。X は数字とドットのみ(typo 検出用。1.6 のようなラダー外の値も
フロア救済のため意図的に許可)。
- kv 属性はシグネチャ単位で束縛され(kramdown IAL のまま)、nomethod/undef
と違って全シグネチャ一致を要求しない。別名ごとに異なる追加/削除時期を
持てるのが本来の用途。同じシグネチャ上でキーが重複したらエラー
- 対象の名前はシグネチャ行(rd の `--- ...` / md の `### def ...` 等)を
MethodSignature.parse で読み直して求める。md 側は mdcompiler/mdparser
と同じ接頭辞正規化を再利用する
- method_attributes の返り値を Array[String] から
Context::MethodAttributes(flags, since_until)に拡張。define_method は
chunk.names を確定させた後に fill_since/fill_until を呼ぶ(未設定時のみ
書き込むため、methodsince サブコマンド(P2)の算出値をパース時の明示値が
常に上書きする側になる)
- MARKUP_SPEC.md §4 の「予約」記述を実際の構文・意味・優先順位の説明に
差し替え
案a(#@SInCE 分岐のパース時取得)は実装しない: バージョンラダー(P2)が
既に全版横断で存在を算出しており、#@SInCE で追加されたメソッドは対象
バージョンの DB に「存在する」という形でそのまま反映されるため、算出は
同じ since に到達する。パース時に必要なのは算出が届かない場合の明示的な
上書き手段(このコミット)だけで足りる。
rbs validate / steep check ともエラー0。既存の巡回で見つかる
lib/bitclust/whole_file_gate.rb の背景 ERROR ログはこの変更前から出ている
無関係な既知ノイズ(最終結果は変更前後とも "No type error detected")。
refs rurema#132
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
bitclust#132 P4 の査読で発見した名前規約の食い違いを補正する。特殊変数の
シグネチャ行から MethodSignature.parse で取り出した名前は "$SAFE" のように
$ 付きだが、エントリの names(= since_by_name/until_by_name のキー)は
先頭の $ を除いた形("SAFE"。"$$" なら "$")で格納されている
(rrdparser の method_signature が Signature.new(nil, '$', name[1..-1]) と
する規約)。
- 属性の紐付け先名(method_attribute_target_name)とバッジ描画の
マップ参照(VersionBadges)の両方で先頭の $ を1つ剥がす。正規化が
無いと、特殊変数への {: since} は参照されないキーで格納され、算出
バッジも mixed 経路とサーバーのメソッド表で黙って消えていた
- 安全網として、since/until の紐付け先名が chunk.names に無い場合は
黙って捨てずに ParseError にする(名前導出の規約ずれを CI で検出)。
紐付け先シグネチャ名が導出できない場合の raise も ParseError に変更
- 判別テスト2本(パーサ側=$0/$PROGRAM_NAME 別名の since 格納先、
描画側=mixed 経路で該当 dt にバッジが付くこと)。どちらも正規化を
外すと失敗することをミューテーションで確認済み
refs rurema#132
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
#132 の P4:
{: since="X"}/{: until="X"}メソッド属性の実装です(予約 → 解禁。2コミット)。ベースはマージ済みの P3 なので diff は P4 分のみです。Context#method_attributesを拡張し、{: since="3.2"}/{: until="4.0"}を受理。値は数字とドットのみ(typo 検出。"1.6"のようなラダー外の値は floor 救済のため意図的に許可)nomethod/undefと違い全シグネチャ一致を要求せず、別名ごとに異なる追加/削除時期を書けるのが本来の用途。同一シグネチャ上のキー重複・非引用値・空値・未知キーはビルドエラーfill_since/fill_until経由なので、methodsince(P2)の算出値より明示値が常に優先されます(算出側は既存値を上書きしない)#@sinceのパース時取得)は実装しません: 完全なバージョンラダー(db-1.8.7〜4.1)がある今、#@since Xは「X 未満の DB にエントリ/名前が存在しない」という形でそのまま反映され、算出が同じ since に到達します。パース時に必要なのは算出が届かない場合の明示上書き手段(本 PR)だけです$SAFEのように$付きですが、エントリのnames(= マップのキー)は$を剥がした形(SAFE。$$なら$)で格納されるため、属性の紐付け先とバッジ描画の参照の両方で先頭の$を1つ剥がします。これにより P3 の潜在バグ(特殊変数の算出バッジが版差別名の経路とサーバーのメソッド表で黙って消える)も同時に修正。紐付け先名がnamesに無い場合は黙って捨てずに ParseError にする安全網付き検証
rbs validate・steep checkエラーなし{: since="2.5"}→ DB 構築 → method_screen 描画でバッジ表示。特殊変数$0/$PROGRAM_NAMEの別名エントリでは$PROGRAM_NAMEの dt にだけバッジが付き、names/since_mapのキーが一致することを確認refs #132
🤖 Generated with Claude Code