📝

VisualStudioのソースコードスニペット用拡張機能作成Tips

2020/01/25に公開

はじめに

VisualStudio のスニペットではできない入力時の日時を入れたりすることが拡張機能ならできるようになります.
その拡張機能を作るうえでここだけサンプルから変えれば簡単なものが作れるといった内容を記載していきます.
以降は以下サイトの手順が完了しているものとします.
https://docs.microsoft.com/ja-jp/visualstudio/extensibility/walkthrough-displaying-statement-completion?view=vs-2017
※ 手順通りに行い using の追加を行ってもエラーが残っている場合は参照に追加したもののバージョンに誤りがないか確認してみてください.時々同一名称の別バージョンのものを追加してしまっており,エラーとなってしまうことがあったりします.

Tips

対象ファイル指定

TestCompletionSourceProvider クラスと TestCompletionHandlerProvider クラスの[ContentType()]に対象を記載。


 [ContentType("TypeScript")]

挿入したい文字列の生成を行う箇所

TestCompletionSource クラスの以下メソッド内

void ICompletionSource.AugmentCompletionSession(ICompletionSession session, IList<CompletionSet> completionSets)

現在のエディタ内のテキスト取得

文字を入力した際のエディタ内のテキストを取得できます.

m_textBuffer.CurrentSnapshot.GetText()

現在の文字挿入位置取得

(session.TextView.Caret.Position.BufferPosition - 1).Position

受付可能な文字の変更

TestCompletionCommandHandler クラスの Exec メソッド内の以下条件にて、10 進の数字か文字のみ受け付けられるようになっています。
例えば「/」を使用したい場合はこの条件を書き換えることで使用できるようになります.

if (!typedChar.Equals(char.MinValue) && char.IsLetterOrDigit(typedChar))

設定より挿入する文字列を切り替える

以下チュートリアルを参考に設定項目を追加し,その値を使用する.
細かい話は気が向いたら書くかもしれません……
https://docs.microsoft.com/ja-jp/visualstudio/extensibility/extending-user-settings-and-options?view=vs-2017

Discussion