ナレーション、オリジナル音楽、字幕付きのレッスン。スライドで各ステップを解説し、エディターの映像はすべてリファクタリングのウォークスルーで VS Code から収録した実際の映像です。早送りの部分は画面上に表示されます。

レッスン: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 のドキュメントにあります。さあ、コードを直しに行きましょう!