使用kotlin和内容辅助的动态dsl

使用kotlin和内容辅助的动态dsl,kotlin,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/users/username=

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/users/username=tom

是动态支持的。也就是说,应用程序知道可以通过“/”分隔语法导航的各种域模型。IDEIntelliJ应该在我调用它时为我提供内容帮助。例如,在GET之后,如果我键入“/”并调用ca,它应该给我以下选项

用户商店 书店 建筑 等 事实上,我在开发时不知道这些条目。我可以编写可以返回这些条目的代码。我需要编辑器调用我的代码并获取内容


而且,如果表达式是由无效标记构成的,我需要构建来标记错误。因此,我需要编辑器不断检查我的代码,当在返回的候选列表中找不到令牌时,应该在编辑器中标记error

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


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

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


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

因此,您暗示的是:将语法调整为宿主语言Kotlin/Groovy,并将编辑器内容辅助功能仅扩展为ex(路径表达式)的语法。是的,您可以这样做。因此,您所暗示的是:将语法调整为宿主语言kotlin/Groovy,并将编辑器内容辅助扩展为仅用于ex(路径表达式)的语法位。是的,您可以这样做。