レッスン:SharpLsp のコードアクション。Cmd+. から F# のクイックフィックス、match ケースの生成、ファイルをまたぐ名前の変更、C# のメソッド生成と using の追加まで
文字起こし
SharpLsp のコードアクションのクイックレッスンへようこそ!数分で、コードの修正、コードの生成、ファイルをまたいだ名前の変更を、F# と C# で、どの OS でも学べます。
まずは、覚えるべきショートカットはひとつだけ。Mac では Command+. を押します。
Windows と Linux では Ctrl+. です。
または電球アイコンをクリックするだけです。
どの方法でも、メニューにはカーソル、選択範囲、またはその下の診断に当てはまるアクションだけが表示されます。
では、アクションはどこから来るのでしょう?三つあります。
診断:警告やエラーが、それ自身の修正を求めます。
カーソル:作り変えられる型やメンバー。
そして選択範囲:選択したコードに働くリファクタリングです。
空行では、メニューは空です。SharpLsp は推測しません。
F# から始めましょう。この describe 関数は stage で match していますが、共用体ケースがひとつ足りません。
コンパイラーは警告 FS0025、不完全なパターンマッチとして知らせます。
Command+. を押して「Generate missing union case」を選べば、SharpLsp がその分岐を書いてくれます。
すべてを受け止めたいなら、「Add wildcard case」もすぐ隣にあります。
これが結果です。新しい分岐は、足りなかったケースにぴったり一致します。
F# コンパイラーが共用体のすべてのケースを知っているからです。あなたは本体を書くだけです。
これは F# の修正ツールキットのひとつにすぎず、どれもコンパイラーの診断に結びついています。
名前が解決できない?open を追加。未使用の束縛?アンダースコアを付ける。捨てられた値?ignore にパイプする。
match 以外にも、SharpLsp は足りないレコードのフィールドや、インターフェイスのメンバーのスタブを生成します。
名前の変更はコードアクションとは別です。シンボルにカーソルを置いて F2 を押します。
新しい名前を入力して Enter を押します。
すべての参照が追従します。別のファイルでもです。ここでは Program.fs の呼び出しも更新されます。
C# では Roslyn が読み込んだソリューションで、F# では読み込んだ F# プロジェクトで名前を変更します。
次は C# です。お気に入りのやり方:あったらいいなと思う呼び出しを書きます。Receipt(invoice) です。
まだ存在しないので、コンパイラーはエラーを報告します。
Command+.、「Generate method」。
Roslyn がスタブを書き、パラメーターの型は呼び出しから決めます。
次に、名前空間をインポートせずに型を使います。たとえば StringBuilder。
クイックフィックスは using System.Text をいちばん上に出します。
その場で完全修飾したり、新しいクラスを生成したりもできます。
これらは SharpLsp に同梱された Roslyn 自身のコード修正プロバイダーから直接来ています。
では、裏で何が起きているのでしょう?エディターがカーソル位置のコードアクションを問い合わせます。
Roslyn または F# コンパイラーがタイトルの一覧を返します。だからメニューは速いのです。
ひとつ選んだときに初めて、SharpLsp がそれを解決して編集を計算します。
結果はひとつのワークスペース編集で、複数のファイルに及ぶこともあります。
そしてアクションが古くなっていたら、編集は返りません。推測はしません。
コードアクションではないものが二つあります。
SharpLsp はコードを整形しません。C# には CSharpier、F# には Fantomas を使ってください。
そして Sort Members は独立したコマンドです。ソリューションエクスプローラーで C# の型を右クリックすると、メンバーを並べ替えられます。
おさらいしましょう。Command+. または Ctrl+. で、当てはまるすべてのアクションが開きます。
F# の修正はコンパイラーの診断に従い、match のケースを丸ごと書けます。
F2 でファイルをまたいで名前を変更できます。
そして C# では、先に呼び出しを書き、あとから生成できます。
レッスンの全文は SharpLsp のドキュメントにあります。さあ、コードを直しに行きましょう!