Skip to content

機能仕様書: apply_patch不要を目指すC#編集ワークフロー強化 #107

@akiojin

Description

@akiojin

Spec

背景

unity-cli を C# 編集の主経路にして、apply_patch をフォールバックに落としたいです。実際に Unity プロジェクトを編集してみると、読み取りはかなり良い一方で、書き込みはまだ apply_patch を完全には置き換えられていません。

関連:

課題

  1. LSP 書き込みがデフォルトで使えない
  • insert_before_symbol などが UNITY_CLI_LSP_MODE=auto or required を要求する
  • 書き込み系だけ追加の前提が必要で UX が不連続
  1. 書き込み結果が null になることがある
  • replace_symbol_body / insert_before_symbol 実行後に null が返るケースがある
  • 成功・no-op・失敗の判別がしづらい
  1. symbol ベース挿入が不安定
  • insert_before_symbol / insert_after_symbol が、対象シンボルが見えていても実ファイルに反映されないケースがある
  • 成功判定と実際の変更がずれると厳しい
  1. get_symbols が編集判断に十分でないことがある
  • ファイルによっては、メソッドが十分に列挙されず field/class 中心になるケースがある
  • namePath をそのまま write tool に渡せる一貫性が必要
  1. 任意の C# ファイル新規作成が足りない
  • create_class は便利だが、interface / enum / test file / 複数型を含むファイル / editor utility の作成には不足
  1. 全文置換の validated write が欲しい
  • validate_text_edits と別手段の apply を組み合わせる必要があり、ワークフローが分かれる
  1. 複数ファイルを一括で atomic に編集したい
  • interface + implementation + tests を同時に変えることが多い
  • 1 ファイルずつだと途中失敗時に整合が崩れる
  1. 編集後の再インデックス / 再コンパイル待機を一体化したい
  • write -> refresh -> compile state poll -> symbols re-check を毎回やる必要がある
  1. Project Settings / SettingsManagement を触る API が欲しい
  • Code Coverage 設定のようなユースケースで editor utility を別途書く必要がある
  • SettingsManagement ベースの project/user settings を直接触れれば、C# utility を増やさずに済む

欲しいコマンド案

  • write_csharp_file(relative, newText, validate=true, apply=true)
  • create_csharp_file(relative, text, validate=true, apply=true)
  • apply_csharp_edits(files, validate=true, apply=true)
  • write 系既存 tool の stronger contract
  • get_project_setting / set_project_setting
  • get_package_setting / set_package_setting

受け入れ基準

  • UNITY_CLI_LSP_MODE を明示しなくても書き込み系が動作する
  • 書き込み系コマンドが null を返さない
  • symbol 挿入/置換で、実際に変更が入ったかを確実に判定できる
  • interface / enum / test / utility を含む任意 C# ファイルを apply_patch なしで新規作成できる
  • 3 ファイル以上の関連修正を atomic に適用できる
  • 書き込み後に compile diagnostics まで受け取れる
  • package/project settings の変更のために追加の editor utility を書かずに済む

Plan

  1. issue 機能仕様書: apply_patch不要を目指すC#編集ワークフロー強化 #107gwt-spec 化し、Spec/Plan/Tasks/TDD を単一情報源として維持する
  2. write 系の default LSP 化、共通レスポンス contract、namePath 正規化を先に実装する
  3. write_csharp_file / create_csharp_file / apply_csharp_edits と post-write pipeline を実装する
  4. get_project_setting / set_project_setting / get_package_setting / set_package_setting を追加する
  5. Rust / LSP / Unity bridge のテストを追加し、品質ゲートを通す

Tasks

  • issue 機能仕様書: apply_patch不要を目指すC#編集ワークフロー強化 #107gwt-spec ラベルを付け、進捗コメント運用を開始する
  • write 系の default LSP 化を実装する
  • write 系レスポンスを success/applied/changedFiles/changedSymbols/diagnostics/diffPreview/reason/backend に統一する
  • get_symbols と write tool の namePath 整合を修正する
  • write_csharp_file を追加する
  • create_csharp_file を追加する
  • apply_csharp_edits を追加する
  • post-write の refresh / compile wait / index update を共通化する
  • get_project_setting / set_project_setting を追加する
  • get_package_setting / set_package_setting を追加する
  • Rust / LSP / Unity bridge の回帰テストを追加する
  • cargo fmt --all -- --check
  • cargo clippy --all-targets -- -D warnings
  • cargo test --all-targets
  • dotnet test lsp/Server.Tests.csproj

TDD

  • RED: まず write contract、namePath、新 API、settings API の失敗テストを追加する
  • GREEN: 既存 LSP / Unity bridge の基盤を再利用して最小実装で通す
  • REFACTOR: multi-file apply helper、post-write pipeline、settings handler を整理する
  • 受け入れ基準に対応する統合テストを最後に揃える

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions