VS Code のコードアクション電球

リファクタリングとコードアクション

SharpLsp は、C# と F# の標準 LSP コードアクションに対応しています。アクションはコンテキストに依存し、サイドカーは、そのコンパイラーまたはプロバイダーが現在の診断、カーソル位置、選択範囲に対して実行できる修正やリファクタリングだけを返します。

VS Code では、電球または Quick Fix コマンド(Windows/Linux では Ctrl+.、macOS では Cmd+.)を使用します。

C# のアクション

C# サイドカーは、同梱された Roslyn 機能アセンブリから Roslyn のコード修正プロバイダーとリファクタリングプロバイダーを検出します。要求された範囲について各プロバイダーにアクションを問い合わせ、選択されたアクションをワークスペース編集へ解決します。

動作を確認済みの例は次のとおりです。

  • 不足しているインポートを追加する
  • 未使用のローカル変数を削除する
  • 不足しているメソッドを生成する
  • 有効な型または選択範囲に対して提示される Roslyn リファクタリング

厳密な一覧は、構文、診断、Roslyn のバージョン、利用できるプロバイダーによって異なります。空行や非対応の位置では、アクションが返されないのが正しい動作です。カテゴリが存在していても、Visual Studio のすべてのリファクタリングを利用できるとは限りません。

F# のアクション

F# サイドカーは、コンパイラーに基づくアクションと生成アクションのうち、明確に定義された一式を提供します。

トリガーまたはコンテキスト アクション
FS0039 名前空間を特定できる場合に、解決に必要な open を追加する
FS1182 未使用のバインディングに接頭辞を付ける:_
FS0020 `
FS0025 ワイルドカードの match アームを追加する
FS0026 冗長なパターンを削除する
対応している FS0001 の不一致 既知の変換を挿入する
判別共用体の match 不足しているケースを生成する
レコード式 不足しているフィールドを生成する
インターフェイスの実装 メンバーのスタブを生成する
SLSPF0102 / SLSPF0103 未使用の open を削除する/名前を簡略化する

コンパイラーによるタイプミスの修正と一部の FSAC アクションは、まだ実装されていません。詳しくは F# 言語サポート を参照してください。

解決と適用

textDocument/codeAction は軽量な項目を返します。codeAction/resolve は、選択されたアクションについてのみ編集内容を計算します。解決済みのワークスペース編集は、複数の既存ドキュメントを変更できます。

アクションの有効期限が切れた場合、サイドカーが再起動した場合、またはプロバイダーが適用操作を生成できない場合、解決処理は推測で補うのではなく、編集なしの結果を返します。

名前変更は別の機能

名前変更はコードアクションではありません。SharpLsp は textDocument/prepareRenametextDocument/rename を公開します。

  • C# の名前変更では、読み込み済みの Roslyn ソリューションを使用します。
  • F# の名前変更では、読み込み済みの F# プロジェクトを使用し、複数のファイルを編集できます。

エディターの Rename Symbol コマンドを使用してください。

書式設定と Sort Members

SharpLsp は意図的に LSP の書式設定機能を公開していません。書式設定には CSharpier または Fantomas を使用してください。VS Code の Sort Members コマンドは、アクセシビリティ、カテゴリ、アルファベット順を設定できる、独立した C# の tree-sitter 操作です。