
ナビゲーション
SharpLsp は、C# と F# の両方で LSP のナビゲーション機能群を実装しています。C# のクエリには読み込まれたソリューション全体を対象に Roslyn を使用し、F# のクエリには読み込まれた F# プロジェクト全体を対象に FCS を使用します。
メソッド
| LSP メソッド | 結果 |
|---|---|
textDocument/definition |
シンボルのソース宣言 |
textDocument/typeDefinition |
シンボルの型の宣言 |
textDocument/declaration |
基底宣言またはインターフェイス宣言が別に存在する場合は、その宣言 |
textDocument/implementation |
C# では具象実装またはオーバーライド。F# では現在、選択したシンボル自身の宣言 |
textDocument/references |
読み込まれたソリューションまたはプロジェクト内でのシンボルの使用箇所 |
textDocument/documentHighlight |
現在のドキュメント内での使用箇所 |
SharpLsp はナビゲーション用のキーバインドを提供しません。エディター標準の LSP キーバインドが適用されます。
名前の変更、コール階層、ワークスペースシンボルは、同じサイドカーのシンボル情報を基盤としますが、それぞれ独自の LSP メソッドを使用します。
ソースの範囲
- C#: 定義、実装、参照、名前の変更には、
MSBuildWorkspaceによって読み込まれた Roslyn ソリューションを使用します。 - F#: ナビゲーションと名前の変更には FCS のプロジェクトチェックを使用します。参照と名前の変更の範囲は、現在読み込まれている F# プロジェクト全体です。実装検索はまだ具体的な実装やオーバーライドを列挙せず、選択したシンボル自身の宣言を返します。
- 未保存のファイル: クエリを実行する前に、現在のエディターバッファーが両方のサイドカーに送信されます。
複数プロジェクトにまたがる F# の状態と、言語間をまたぐ完全な階層エッジは、現在も実装が進められています。
メタデータをソースとして表示
シンボルが BCL または参照アセンブリに由来する場合、両方のサイドカーは共有の ICSharpCode.Decompiler 統合機能を使用して読み取り専用のソースファイルを生成し、該当する宣言へ移動できます。これにより、ソースドキュメントが読み込まれていない多くのフレームワークおよび NuGet シンボルに対応します。
失敗時の動作
指定位置からシンボルを解決できない場合、または必要なサイドカーを利用できない場合、ナビゲーションは位置情報を返しません。C# では tree-sitter によってコメントと文字列を事前検証できます。ホストに F# の tree-sitter 文法がないため、F# は現在 FCS に依存しています。