动态dsl使用kotlin和内容辅助

时间:2016-10-08 21:24:31

标签: kotlin

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中,以下是静态部分

  

测试,描述,作者,获取,验证

但是,表达式

  

/ userstore /用户/用户(名称= TOM)

是动态支持的。这意味着,应用程序知道可通过'/'分隔语法导航的各种域模型。 IDE(Intellij),在我调用它时应该给我内容辅助。例如,在GET之后如果我输入'/'并调用ca,它应该给我以下选项

  1. userstore
  2. 书店
  3. 建筑物 等
  4. 事实是,我在开发时并不知道这些条目。我可以编写可以返回这些条目的代码。我需要编辑器调用我的代码并获得内容辅助候选者。

    而且,如果表达式由无效标记组成,我需要构建标记错误。所以,我需要编辑器继续检查我的代码,如果在返回的候选列表中找不到令牌,则应在编辑器中标记错误。

1 个答案:

答案 0 :(得分:4)

首先,您的示例的语法无效Kotlin,所以不,您不能将其构建为Kotlin DSL。如果您可以更改语法以便将路径存储在字符串文字中,那么这将是有效的Kotlin。

其次,您可以为IntelliJ IDEA构建一个插件,它可以为任何语言(Java,Kotlin或其他任何语言)提供此类内容辅助和动态验证。构建这样一个插件所需的努力并不在很大程度上取决于你所支持的语言;使用Kotlin不会让创建这样的插件变得更容易。