Core interfaces and data structures for Kotlin script compilation, evaluation, and IDE integration
—
Script definition system using annotations to configure script compilation and evaluation behavior. The @KotlinScript annotation serves as the primary mechanism for defining script templates and their associated configurations.
Main annotation for defining script templates with compilation, evaluation, and host configurations.
/**
* Annotation for defining Kotlin script templates
* @param displayName Human-readable name for the script type
* @param fileExtension File extension for scripts of this type (default: "kts")
* @param filePathPattern Pattern for matching script file paths
* @param compilationConfiguration Class providing compilation configuration
* @param evaluationConfiguration Class providing evaluation configuration
* @param hostConfiguration Class providing host configuration
*/
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
annotation class KotlinScript(
val displayName: String = "",
val fileExtension: String = "kts",
val filePathPattern: String = "",
val compilationConfiguration: KClass<out ScriptCompilationConfiguration> = ScriptCompilationConfiguration.Default::class,
val evaluationConfiguration: KClass<out ScriptEvaluationConfiguration> = ScriptEvaluationConfiguration.Default::class,
val hostConfiguration: KClass<out ScriptingHostConfiguration> = ScriptingHostConfiguration::class
)Usage Examples:
// Basic script template
@KotlinScript(
displayName = "Basic Script",
fileExtension = "basic.kts"
)
abstract class BasicScript
// Advanced script template with custom configurations
@KotlinScript(
displayName = "Data Processing Script",
fileExtension = "data.kts",
filePathPattern = "scripts/data/.*\\.data\\.kts",
compilationConfiguration = DataScriptCompilationConfiguration::class,
evaluationConfiguration = DataScriptEvaluationConfiguration::class
)
abstract class DataScript
// Configuration classes referenced by the annotation
class DataScriptCompilationConfiguration : ScriptCompilationConfiguration({
defaultImports("kotlin.collections.*", "kotlin.io.*")
dependencies.append(JvmDependency("org.apache.commons:commons-csv:1.9.0"))
})
class DataScriptEvaluationConfiguration : ScriptEvaluationConfiguration({
contextVariables.put("dataDir", File("./data"))
})Creating script templates involves defining an abstract class annotated with @KotlinScript and providing associated configuration classes.
Template Structure:
// 1. Define the script template class
@KotlinScript(
displayName = "My Script Type",
fileExtension = "my.kts",
compilationConfiguration = MyCompilationConfig::class,
evaluationConfiguration = MyEvaluationConfig::class
)
abstract class MyScriptTemplate
// 2. Define compilation configuration
class MyCompilationConfig : ScriptCompilationConfiguration({
// Compilation settings
defaultImports("kotlin.math.*")
dependencies.append(JvmDependency("my.library:core:1.0"))
})
// 3. Define evaluation configuration
class MyEvaluationConfig : ScriptEvaluationConfiguration({
// Evaluation settings
contextVariables.put("version", "1.0")
})The filePathPattern property supports regex patterns for matching script files:
@KotlinScript(
filePathPattern = ".*\\.config\\.kts" // Matches *.config.kts
)
abstract class ConfigScript
@KotlinScript(
filePathPattern = "scripts/build/.*\\.build\\.kts" // Matches build scripts
)
abstract class BuildScriptConfiguration classes referenced in @KotlinScript must:
class CustomCompilationConfig : ScriptCompilationConfiguration({
// Use configuration DSL here
defaultImports("my.package.*")
dependencies {
append(JvmDependency("group:artifact:version"))
}
})Install with Tessl CLI
npx tessl i tessl/maven-org-jetbrains-kotlin--kotlin-scripting-common