2016-09-09 42 views
4

片段是否可以在Visual Studio代碼中插入動態計算的完成或片段?VSCode中的動態片段評估

我想插入各種格式的日期和時間字符串的代碼片段。例如,如果輸入date,則ISO格式的當前日期將自動擴展。

example of dynamic snippet expansion with dates

中有崇高的文本設施通過在EventListeneron_query_completions方法來做到這一點蟒蛇的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的文件,但現在看來,用戶在填寫一次只能插入一個製表站和變量預先定義的文本

如果通過snippet API公開的功能無法實現,我是否可以通過更低級別的插件/擴展API實現類似的功能?

我知道有一個名爲Insert Date and Time的現有擴展,但是這是通過命令托盤而不是動態擴展工作的。

回答

2

絕對不可能在代碼段中執行腳本或類似的東西。

您可以改爲爲Visual Studio代碼編寫擴展。該分機必須執行CompletionItemProvider

provideCompletionItems方法將返回CompletionItems的列表。他們的filterText屬性將設置爲在建議框中顯示的文本(例如「日期」或「時間」),並將其屬性設置爲動態計算的值。

最後,您需要使用registerCompletionItemProvider註冊完成提供商。

你絕對應該採取如何,然後再開始創建擴展一下:https://code.visualstudio.com/docs/extensions/example-hello-world

+0

謝謝,我指出了正確的方向。對於這種用例,使用CompletionItem來實現並不像ST那麼簡單,但它確實提供了更多的靈活性。 –

+2

@ chris-scott,我正在尋找如何做同樣的事情(出於同樣的原因 - 不同格式的時間戳)。既然聽起來像你有它的工作,關心分享你的擴展或把它放在VS代碼市場? :) – Dullroar

+1

@Dullroar,是的,我打算。我沒有在開發模式之外測試它,這就是爲什麼我還沒有發佈它,但我會上傳到github,以便您可以看看。 –