2016-09-09 56 views
4

スニペットでVisual Studio Codeで動的に計算された補完またはスニペットを挿入することは可能ですか?VSCodeでの動的スニペット評価

さまざまな形式の日付と時刻文字列を挿入するためのスニペットが必要です。たとえば、dateと入力すると、ISO形式の現在の日付が自動的に展開されます。

example of dynamic snippet expansion with dates

EventListenerクラスのon_query_completionsメソッドを経由してのpython APIでこれを行うには崇高テキスト内施設があります。実装は非常に単純な存在のようになります。

def on_query_completions(self, view, prefix, locations): 
    if prefix == 'date': 
    val = datetime.now().strftime('%Y-%m-%d') 
    return [(prefix, prefix, val)] if val else [] 

私はUser Defined Snippets上のドキュメントを読みましたが、1つがユーザーのみが埋めていること、タブストップと変数との事前定義されたテキストを挿入できることが表示されます

スニペットAPIで公開されている機能ではこれが不可能な場合は、低レベルのプラグイン/拡張APIを使用して同様の機能を実装できますか?

私は、既存の拡張子がInsert Date and Timeであることを認識していますが、これは動的拡張の代わりにコマンドパレットを介して機能します。

答えて

2

スニペット内でスクリプトなどを実行することは間違いありません。

代わりにVisual Studioコードの拡張機能を記述することができます。拡張機能にはCompletionItemProviderを実装する必要があります。

provideCompletionItemsメソッドは、CompletionItemsのリストを返します。それらのfilterTextプロパティは、提案ボックスに表示されるテキスト(たとえば、 "date"または "time")に設定され、そのプロパティのinsertTextは動的に計算された値に設定されます。

最後にregisterCompletionItemProviderを使用して補完プロバイダを登録する必要があります。

あなたが開始する前に、あなたは絶対に拡張機能を作成する方法について見てみる必要があります。正しい方向に私を指摘https://code.visualstudio.com/docs/extensions/example-hello-world

+0

おかげで、。実装に 'CompletionItem'を使用することは、このユースケースではSTほど単純ではありませんが、より柔軟性があります。 –

+2

@ chris-scott、私は同じことを(同じ理由で - 異なるフォーマットのタイムスタンプで)行う方法を探していました。あなたはそれが働いているように聞こえるので、あなたの内線を共有したり、VSコードマーケットプレイスに置いたりしてください。 :) – Dullroar

+1

@Dullroar、はい私は予定しています。私はdevモードの外でそれをテストしていないので、まだ公開していませんが、あなたは見てみることができるようにgithubにアップロードします。 –

関連する問題