Как создать Kotlin DSL с использованием kts-файлов, таких как Gradle - PullRequest
1 голос
/ 08 июля 2019

Я пытаюсь создать файл конфигурации, очень похожий на сценарии сборки Gradle, но я не знаю, как оценить файл .kts, использующий DSL

. Я уже пытался использовать KotlinJsr223JvmLocalScriptEngineFactory, но этоочень некрасиво, когда дело доходит до привязки переменных, и я понятия не имею, можно ли установить контекст для чего-то другого для DSL.

Я пробовал это:

import org.jetbrains.kotlin.script.jsr223.KotlinJsr223JvmLocalScriptEngineFactory

fun main() {
    val source = """
        println("Hi!")
        println(bindings["a"])
    """.trimIndent()
    val engine = KotlinJsr223JvmLocalScriptEngineFactory().scriptEngine
    engine.eval(source, engine.createBindings().apply {
        put("a", "b")
    })
}

но это нене поддерживает многие вещи, такие как импорт по умолчанию, установка контекста this (я не уверен, как он на самом деле называется) и хорошо.Я попытался выполнить , чтобы автоматическое завершение работало в сценариях kotlin , но это не сработало.

...