
Alpha 版 VS Code 拡張機能での C# ホバー情報。
ホバーとクイック情報
C# シンボルにマウスを重ねると、Roslyn サイドカーから型シグネチャとドキュメントが表示されます。F# ホバーは SharpLsp の方向性に含まれますが、現在のサイトのスクリーンショットは VS Code 拡張機能の alpha 状態を反映しています。
表示される内容
シンボルにホバーすると、SharpLsp は Markdown レンダリングされたツールチップを返します。
| セクション | 内容 |
|---|---|
| シグネチャ | 構文ハイライト付きの完全修飾シンボルシグネチャ |
| 含まれる型 | メンバーの ContainingType.Name |
| XML ドキュメント | <summary>、<param>、<returns>、<remarks>、<example> |
| 例外 | XML ドキュメントの <exception> タグ |
| nullable | nullable 注釈状態 |
| アクセス修飾子 | public、internal、protected など |
| 非推奨 | 警告付きの [Obsolete] メッセージ |
C# ホバー(Roslyn)
C# サイドカーは SemanticModel.GetSymbolInfo() でシンボルを解決し、次の優先順位で XML ドキュメントをレンダリングします。
- ソースコードの
///コメント - NuGet パッケージの XML ドキュメントファイル(アセンブリ横の
.xml) - Roslyn の組み込みドキュメントプロバイダー
特殊ケース
| ホバー対象 | 動作 |
|---|---|
var キーワード |
推論された型を完全なシグネチャで表示 |
await 式 |
unwrap された Task<T> 戻り値型を表示 |
nameof(Foo) |
参照先シンボルを表示 |
| 文字列リテラル | null を返す(ツールチップなし) |
| ラムダパラメーター | 推論されたパラメーター型を表示 |
| タプル要素 | 要素名と型を表示 |
| パターン変数 | パターンマッチされた型を表示 |
[Obsolete] メンバー |
非推奨メッセージを表示 |
例
var result = Enumerable.Range(0, 10).Select(x => x * x).ToList();
// ↑ ホバー表示:
// IEnumerable<int> Enumerable.Range(int start, int count)
// 指定された範囲内の整数シーケンスを生成します。
// Parameters:
// start: シーケンス内の最初の整数の値。
// count: 生成する連続した整数の数。
F# ホバー
F# ホバーは SharpLsp のロードマップとサイドカーアーキテクチャに含まれます。現在のサイトでは beta-ready な機能として扱っていません。
ソリューションエクスプローラーのホバー
ソリューションエクスプローラーのツリービューは、コードエディターと同じホバーパイプラインを使います。ツリー内のシンボルにホバーすると、コードエディターに表示されるものと同じツールチップが表示されます。
| ツリーノード種別 | ツールチップのソース |
|---|---|
| シンボル(クラス、メソッド、プロパティなど) | LSP hover — コードエディターと同じ |
| 名前空間 | LSP hover — コードエディターと同じ |
| NuGet パッケージ | パッケージ名 + バージョン |
| プロジェクト参照 | 参照名 |
キャッシュ
ホバー結果は Rust ホストにより salsa のインクリメンタル計算でキャッシュされます。
| キャッシュキー | 無効化されるタイミング |
|---|---|
(document_uri, document_version, position) |
文書が編集されたとき |
キャッシュヒットは 1ms 未満で返ります。古い文書バージョンに対するホバーリクエストは即座にキャンセルされます。
パフォーマンス目標
| 指標 | 目標 |
|---|---|
| ホバーレイテンシ(p50) | <150ms |
| ホバーレイテンシ(p95) | <300ms |
| キャッシュ済み位置 | <1ms |
| tree-sitter 事前検証(空白をスキップ) | <1ms |
エラー処理
ホバーはエラーを返したり、エディターをブロックしたりしません。サイドカー未準備、シンボル解決失敗、IPC タイムアウトなど、どの失敗でも SharpLsp は null(ツールチップなし)を返します。サイドカーのクラッシュ時は 3 秒以内に自動復旧を開始します。