Implement filePathPattern in the script configuration with handling
also - tests - extending kdoc for the definitions
This commit is contained in:
committed by
Natalia Selezneva
parent
dface77b5c
commit
0cc40440fb
@@ -0,0 +1,8 @@
|
|||||||
|
|
||||||
|
// KOTLIN_SCRIPT_DEFINITION: org.jetbrains.kotlin.codegen.TestScriptWithPathPattern
|
||||||
|
|
||||||
|
// param: World
|
||||||
|
|
||||||
|
val res = "Hello $name2"
|
||||||
|
|
||||||
|
// expected: res=Hello World
|
||||||
@@ -149,3 +149,7 @@ abstract class TestScriptWithSimpleEnvVars
|
|||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
@KotlinScript(fileExtension = "customext")
|
@KotlinScript(fileExtension = "customext")
|
||||||
abstract class TestScriptWithNonKtsExtension(val name: String)
|
abstract class TestScriptWithNonKtsExtension(val name: String)
|
||||||
|
|
||||||
|
@Suppress("unused")
|
||||||
|
@KotlinScript(filePathPattern = "(.*/)?pathPattern[0-9]\\..+")
|
||||||
|
abstract class TestScriptWithPathPattern(val name2: String)
|
||||||
|
|||||||
+5
@@ -29,6 +29,11 @@ public class CustomScriptCodegenTestGenerated extends AbstractCustomScriptCodege
|
|||||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/customScript"), Pattern.compile("^(.*)$"), TargetBackend.ANY, true);
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/customScript"), Pattern.compile("^(.*)$"), TargetBackend.ANY, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("pathPattern5.kts")
|
||||||
|
public void testPathPattern5_kts() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/customScript/pathPattern5.kts");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("simpleEnvVars.kts")
|
@TestMetadata("simpleEnvVars.kts")
|
||||||
public void testSimpleEnvVars_kts() throws Exception {
|
public void testSimpleEnvVars_kts() throws Exception {
|
||||||
runTest("compiler/testData/codegen/customScript/simpleEnvVars.kts");
|
runTest("compiler/testData/codegen/customScript/simpleEnvVars.kts");
|
||||||
|
|||||||
+4
@@ -25,6 +25,9 @@ import kotlin.script.experimental.api.ScriptEvaluationConfiguration
|
|||||||
* @param fileExtension distinct filename extension for the script type being defined, stored in the configuration
|
* @param fileExtension distinct filename extension for the script type being defined, stored in the configuration
|
||||||
* as {@link ScriptCompilationConfigurationKeys#fileExtension},
|
* as {@link ScriptCompilationConfigurationKeys#fileExtension},
|
||||||
* default - "kts"
|
* default - "kts"
|
||||||
|
* @param filePathPattern additional (to the filename extension) RegEx pattern with that the script file path is checked
|
||||||
|
* as {@link ScriptCompilationConfigurationKeys#filePathPattern},
|
||||||
|
* default - empty - pattern is not used
|
||||||
* @param compilationConfiguration an object or a class with default constructor containing initial script compilation configuration
|
* @param compilationConfiguration an object or a class with default constructor containing initial script compilation configuration
|
||||||
* default - {@link ScriptCompilationConfiguration#Default}
|
* default - {@link ScriptCompilationConfiguration#Default}
|
||||||
* @param evaluationConfiguration an object or a class with default constructor containing initial script evaluation configuration
|
* @param evaluationConfiguration an object or a class with default constructor containing initial script evaluation configuration
|
||||||
@@ -47,6 +50,7 @@ import kotlin.script.experimental.api.ScriptEvaluationConfiguration
|
|||||||
annotation class KotlinScript(
|
annotation class KotlinScript(
|
||||||
val displayName: String = "Kotlin script",
|
val displayName: String = "Kotlin script",
|
||||||
val fileExtension: String = "kts",
|
val fileExtension: String = "kts",
|
||||||
|
val filePathPattern: String = "",
|
||||||
val compilationConfiguration: KClass<out ScriptCompilationConfiguration> = ScriptCompilationConfiguration.Default::class,
|
val compilationConfiguration: KClass<out ScriptCompilationConfiguration> = ScriptCompilationConfiguration.Default::class,
|
||||||
val evaluationConfiguration: KClass<out ScriptEvaluationConfiguration> = ScriptEvaluationConfiguration.Default::class
|
val evaluationConfiguration: KClass<out ScriptEvaluationConfiguration> = ScriptEvaluationConfiguration.Default::class
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@file:Suppress("unused")
|
@file:Suppress("unused", "RemoveExplicitTypeArguments")
|
||||||
|
|
||||||
package kotlin.script.experimental.api
|
package kotlin.script.experimental.api
|
||||||
|
|
||||||
@@ -59,9 +59,21 @@ val ScriptCompilationConfigurationKeys.displayName by PropertiesCollection.key<S
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* The script filename extension
|
* The script filename extension
|
||||||
|
* Used for the primary script definition selection as well as to assign a kotlin-specific file type to the files with the extension in Intellij IDEA
|
||||||
|
* For Intellij IDEA support, it is important to have this extension set to a non-ambiguous name.
|
||||||
|
* See also {@link ScriptCompilationConfigurationKeys#filePathPattern} parameter for more fine-grained script definition selection
|
||||||
*/
|
*/
|
||||||
val ScriptCompilationConfigurationKeys.fileExtension by PropertiesCollection.key<String>("kts")
|
val ScriptCompilationConfigurationKeys.fileExtension by PropertiesCollection.key<String>("kts")
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Additional (to the filename extension) RegEx pattern with that the script file path is checked
|
||||||
|
* It is used in the hosts that may have several script definitions registered and need to distinguish script file types not only by extension
|
||||||
|
* The argument passed to the RegEx matcher is equivalent to the File.path, taken relatively from a base path defined by the host
|
||||||
|
* (usually should be the project root or the current directory)
|
||||||
|
* See also {@link ScriptCompilationConfigurationKeys#fileExtension} parameter for the primary script definition selection
|
||||||
|
*/
|
||||||
|
val ScriptCompilationConfigurationKeys.filePathPattern by PropertiesCollection.key<String>()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The superclass for target script class
|
* The superclass for target script class
|
||||||
*/
|
*/
|
||||||
|
|||||||
+3
@@ -78,6 +78,9 @@ private fun ScriptCompilationConfiguration.Builder.propertiesFromTemplate(
|
|||||||
if (fileExtension() == null) {
|
if (fileExtension() == null) {
|
||||||
fileExtension(mainAnnotation.fileExtension)
|
fileExtension(mainAnnotation.fileExtension)
|
||||||
}
|
}
|
||||||
|
if (filePathPattern() == null) {
|
||||||
|
filePathPattern(mainAnnotation.filePathPattern)
|
||||||
|
}
|
||||||
if (displayName() == null) {
|
if (displayName() == null) {
|
||||||
displayName(mainAnnotation.displayName)
|
displayName(mainAnnotation.displayName)
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-1
@@ -120,7 +120,15 @@ abstract class ScriptDefinition : UserDataHolderBase() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun isScript(file: File): Boolean = file.name.endsWith(".$fileExtension")
|
private val filePathPattern by lazy {
|
||||||
|
compilationConfiguration[ScriptCompilationConfiguration.filePathPattern]?.takeIf { it.isNotBlank() }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun isScript(file: File): Boolean =
|
||||||
|
file.name.endsWith(".$fileExtension") &&
|
||||||
|
(filePathPattern?.let {
|
||||||
|
Regex(it).matches(file.path)
|
||||||
|
} ?: true)
|
||||||
|
|
||||||
override val fileExtension: String get() = compilationConfiguration[ScriptCompilationConfiguration.fileExtension]!!
|
override val fileExtension: String get() = compilationConfiguration[ScriptCompilationConfiguration.fileExtension]!!
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user