2016-10-08 194 views
0

kotlin是否幫助構建以下dsl?使用kotlin進行內容輔助的動態dsl

test 'test_01' { 
    description " test that a user by name tom is present 
    author : xyz 
    GET /userstore/users/user(name=tom) { 
    verify(/first-name == 'Tom') 
    } 
} 
在該DSL

,以下是靜態部分

測試,描述,作者,GET,驗證

但是,表達

/userstore/users/user(name = tom)

將被動態支持。意思是,應用程序知道可以通過'/'分隔語法導航的各種域模型。 IDE(Intellij)在我調用它時應該爲我提供內容幫助。例如,如果我鍵入 '/' 並調用CA獲取後,它應該給我下面的選項

  1. userstore
  2. 書店
  3. 建築 等

事實是,我在開發時不知道這些條目。我可以編寫可以返回這些條目的代碼。我需要編輯調用我的代碼並獲取內容幫助候選人。

而且,如果表達式由無效標記形成,我需要構建標記錯誤。因此,我需要編輯器繼續檢查我的代碼,並且在返回的候選列表中找不到令牌時,應在編輯器中標記錯誤。

回答

4

首先,你的例子的語法不是有效的Kotlin,所以不能,你不能把它作爲Kotlin DSL來構建。如果您可以更改語法,以便將路徑存儲在字符串文字中,那麼這將是有效的Kotlin。其次,您可以爲IntelliJ IDEA構建一個插件,它可以爲任何語言(Java,Kotlin或其他任何語言)提供此類內容幫助和即時驗證。構建這樣的插件所需的努力並不取決於您所支持的語言;使用Kotlin不會讓它更容易創建這樣的插件。

+0

謝謝。你的回答幫助我進一步。 – user19937

+0

所以,你在暗示的是:調整語法朝向宿主語言(kotlin/Groovy),並且擴展編輯器內容僅用於語法位(例如,路徑表達式)的內容。 – user19937

+0

是的,你可以做到這一點。 – yole