web-dev-qa-db-ja.com

カスタムIntellisense拡張

Visual StudioでIntelliSenseに追加機能を記述したいと考えています。

私の研究から、インテリセンス拡張に関するサンプルやドキュメントを見つけていませんが、まったく拡張することは可能ですか?.

Intellisenseに次のような単純なHelloWorldメッセージを表示するにはどうすればよいですか(hello worldが実行時にStringのintellisenseに追加されます)。

enter image description here

28
Not loved

したがって、Visual Studio 2010以降では、必要な拡張APIはMicrosoft.VisualStudio.Languages.IntelliSense名前空間の下にあります。高レベルでは、必要なアイテムを提供するICompletionSourceProviderをMEFエクスポートする必要があります。基本的なテクニックを示す2つの優れたブログ投稿 here および here があります。

スクリーンショットを現実のものにしたい場合、2つの問題が発生します。 (ここで私のアドバイスが変わるため、私がシナリオを求めたのはこのためです。)最初に、この方法では、既存の補完セットに合法的に追加するのではなく、新しい補完セットを提供します。 UIでは、これはVisual Basic Editorの[Common]/[All]タブのように2つのタブとして表示されます。これは現在のAPIの制限です。 AugmentCompletionSourceの既存の補完セットの1つを変更することもできますが、それがうまくいくかどうかはわかりません。いずれにしても、それは明らかにサポートされていません。

第二に、いつどこで物事をすすめるかを知るのが本当に難しい。あなたの例では、「stringのIntelliSense」と言いました。残念ながら、VSには(現在のところ)ドットの前に何があるかを知らせるAPIがありません。いくつかの簡単なヒューリスティックを実行するか、シナリオにGood Enough™のパーサーを実装してみることができますが、完璧な結果が得られないので、今は受け入れる必要があります。

Roslyn プロジェクトは2番目の問題を修正することを目的としているため、もう少し詳しく調べると便利です。多くの人が補完を拡張したいと思うので、他の拡張性APIを提供することも考えているので、ICompletionSourceProviderを最初からロールバックする必要はありませんが、そのようなAPIは現在のCTPにはありません。

[免責事項:私はIntelliSenseに取り組むRoslynチームのメンバーです。]

30