コンテンツにスキップ

11. Lint と制約検証

コンパイラは行番号付きの警告/エラーを返します。エラー報告の形式と粒度は仕様のファーストクラスの 要素で、メッセージは自己修正ループに乗る形でなければなりません (評価フレームワーク)。 「何が間違っているか / ターゲットで有効な候補 / 推奨される修正」の三つ組です。

  • 構文: parse / 型 / key=value の妥当性。
  • ジオメトリ: AABB 展開で「壁の外の窓」「空中に浮くドア」などを検出。
  • attachment: 額縁/絵画/看板/ボタン/レバー/松明が有効な取り付け面に乗っているか (空気への取り 付けを検出)。
  • entity_aabb: armor_stand/villager/display が壁/通路にめり込んでいないか、ドアの開閉弧を塞いで いないか、エンティティの過密 (密度)。
  • support: 吊りランタン、松明、キャンプファイア、砂利などの重力ブロックの支持条件。
  • fluid: 水源 / 流れ / waterlogged の整合性。
  • version_caps / parity: 状態/エンティティのスキーマがターゲットで使えるか (バージョンとエディション)。
  • edit_stability: intent_state の変更が無関係なメンバの resolved_state に波及しないか。
  • redstone: 合成された回路を tick 単位でシミュレートし、宣言された真理値表/時相アサーションと 突き合わせる。タイミング衝突、QC 依存、配線輻輳 (レッドストーン)。
  • AABB 干渉: 重なった場合は優先マージか lint エラーで拒否する。境界ブロックステートの再解決 (内角階段など) は IR 層の責務。
  • 放置すると意図しない結果になるもの (概念の不在、未知 ID、ドメイン外の状態) は エラー (サイレント 置換と暗黙の削除は禁止)。
  • バージョン/エディション間の意味ドリフト、レッドストーン挙動の非保証などは 警告
  • autofix を提供するかは実装で定義します。

ゲーム内制約 (重力ブロック、取り付け条件、流体挙動、許容されない組み合わせなど) はカタログ化し、 バージョンごとに管理します (バージョンとエディション)。「額縁はガラス に掛けられない」のような制約はここに入ります。