Skip to content

Commit 135f0a1

Browse files
committed
CLI: report error if the first argument for "-script" is not kts
#KT-3045 Fixed
1 parent 85d1bef commit 135f0a1

File tree

6 files changed

+40
-9
lines changed

6 files changed

+40
-9
lines changed

compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import org.jetbrains.kotlin.javac.JavacWrapper
4444
import org.jetbrains.kotlin.load.java.JvmAbi
4545
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents
4646
import org.jetbrains.kotlin.script.KotlinScriptDefinitionFromAnnotatedTemplate
47+
import org.jetbrains.kotlin.script.KotlinScriptDefinitionProvider
4748
import org.jetbrains.kotlin.script.StandardScriptDefinition
4849
import org.jetbrains.kotlin.util.PerformanceCounter
4950
import org.jetbrains.kotlin.utils.KotlinPaths
@@ -88,14 +89,7 @@ class K2JVMCompiler : CLICompiler<K2JVMCompilerArguments>() {
8889
return INTERNAL_ERROR
8990
}
9091

91-
if (arguments.script) {
92-
if (arguments.freeArgs.isEmpty()) {
93-
messageCollector.report(ERROR, "Specify script source path to evaluate")
94-
return COMPILATION_ERROR
95-
}
96-
configuration.addKotlinSourceRoot(arguments.freeArgs[0])
97-
}
98-
else if (arguments.module == null) {
92+
if (!arguments.script && arguments.module == null) {
9993
for (arg in arguments.freeArgs) {
10094
val file = File(arg)
10195
if (file.extension == JavaFileType.DEFAULT_EXTENSION) {
@@ -116,6 +110,10 @@ class K2JVMCompiler : CLICompiler<K2JVMCompilerArguments>() {
116110
configuration.put(CommonConfigurationKeys.MODULE_NAME, arguments.moduleName ?: JvmAbi.DEFAULT_MODULE_NAME)
117111

118112
if (arguments.module == null && arguments.freeArgs.isEmpty() && !arguments.version) {
113+
if (arguments.script) {
114+
messageCollector.report(ERROR, "Specify script source path to evaluate")
115+
return COMPILATION_ERROR
116+
}
119117
ReplFromTerminal.run(rootDisposable, configuration)
120118
return ExitCode.OK
121119
}
@@ -174,13 +172,26 @@ class K2JVMCompiler : CLICompiler<K2JVMCompilerArguments>() {
174172
KotlinToJVMBytecodeCompiler.compileModules(environment, directory)
175173
}
176174
else if (arguments.script) {
177-
val scriptArgs = arguments.freeArgs.subList(1, arguments.freeArgs.size)
175+
val sourcePath = arguments.freeArgs.first()
176+
configuration.addKotlinSourceRoot(sourcePath)
178177

179178
configuration.put(JVMConfigurationKeys.RETAIN_OUTPUT_IN_MEMORY, true)
180179

181180
val environment = createEnvironmentWithScriptingSupport(rootDisposable, configuration, arguments, messageCollector)
182181
?: return COMPILATION_ERROR
183182

183+
val scriptDefinitionProvider = KotlinScriptDefinitionProvider.getInstance(environment.project)!!
184+
val scriptFile = File(sourcePath)
185+
if (scriptFile.isDirectory || !scriptDefinitionProvider.isScript(scriptFile)) {
186+
val extensionHint =
187+
if (configuration.get(JVMConfigurationKeys.SCRIPT_DEFINITIONS) == listOf(StandardScriptDefinition)) " (.kts)"
188+
else ""
189+
messageCollector.report(ERROR, "Specify path to the script file$extensionHint as the first argument")
190+
return COMPILATION_ERROR
191+
}
192+
193+
val scriptArgs = arguments.freeArgs.subList(1, arguments.freeArgs.size)
194+
184195
return KotlinToJVMBytecodeCompiler.compileAndExecuteScript(environment, paths, scriptArgs)
185196
}
186197
else {
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-script
2+
$TESTDATA_DIR$/wrongAbiVersionLib
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
error: specify path to the script file (.kts) as the first argument
2+
COMPILATION_ERROR
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-script
2+
$TESTDATA_DIR$/simple.kt
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
error: specify path to the script file (.kts) as the first argument
2+
COMPILATION_ERROR

compiler/tests/org/jetbrains/kotlin/cli/CliTestGenerated.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,18 @@ public void testWrongJvmTargetVersion() throws Exception {
416416
doJvmTest(fileName);
417417
}
418418

419+
@TestMetadata("wrongScriptWithDirectory.args")
420+
public void testWrongScriptWithDirectory() throws Exception {
421+
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/cli/jvm/wrongScriptWithDirectory.args");
422+
doJvmTest(fileName);
423+
}
424+
425+
@TestMetadata("wrongScriptWithKtSource.args")
426+
public void testWrongScriptWithKtSource() throws Exception {
427+
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/cli/jvm/wrongScriptWithKtSource.args");
428+
doJvmTest(fileName);
429+
}
430+
419431
@TestMetadata("wrongScriptWithNoSource.args")
420432
public void testWrongScriptWithNoSource() throws Exception {
421433
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/cli/jvm/wrongScriptWithNoSource.args");

0 commit comments

Comments
 (0)