diff --git a/src/main/kotlin/kscript/app/AppHelpers.kt b/src/main/kotlin/kscript/app/AppHelpers.kt index 4379004b..8cad13a6 100644 --- a/src/main/kotlin/kscript/app/AppHelpers.kt +++ b/src/main/kotlin/kscript/app/AppHelpers.kt @@ -200,7 +200,7 @@ private fun bytesToHex(buffer: ByteArray): String { fun numLines(str: String) = str.split("\r\n|\r|\n".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray().size -fun launchIdeaWithKscriptlet(scriptFile: File, dependencies: List, customRepos: List, includeURLs: List): String { +fun launchIdeaWithKscriptlet(scriptFile: File, userArgs: List, dependencies: List, customRepos: List, includeURLs: List): String { requireInPath("idea", "Could not find 'idea' in your PATH. It can be created in IntelliJ under `Tools -> Create Command-line Launcher`") infoMsg("Setting up idea project from ${scriptFile}") @@ -218,6 +218,28 @@ fun launchIdeaWithKscriptlet(scriptFile: File, dependencies: List, custo // .run { File(this, "kscript_tmp_project") } // .apply { mkdir() } + File(tmpProjectDir, ".idea/runConfigurations/") + .run { + mkdirs() + } + File(tmpProjectDir, ".idea/runConfigurations/Main.xml").writeText( + """ + + + + + """.trimIndent() + ) + val stringifiedDeps = dependencies.map { " compile \"$it\"" }.joinToString("\n") val stringifiedRepos = customRepos.map { " maven {\n url '${it.url}'\n }\n" }.joinToString("\n") @@ -270,7 +292,7 @@ private fun URL.fileName() = this.toURI().path.split("/").last() private fun createSymLink(link: File, target: File) { try { - Files.createSymbolicLink(link.toPath(), target.absoluteFile.toPath()); + Files.createSymbolicLink(link.toPath(), target.absoluteFile.toPath()) } catch (e: IOException) { errorMsg("Failed to create symbolic link to script. Copying instead...") target.copyTo(link) diff --git a/src/main/kotlin/kscript/app/Kscript.kt b/src/main/kotlin/kscript/app/Kscript.kt index e9d30d43..157ff3f6 100644 --- a/src/main/kotlin/kscript/app/Kscript.kt +++ b/src/main/kotlin/kscript/app/Kscript.kt @@ -150,7 +150,7 @@ fun main(args: Array) { // Create temporary dev environment if (docopt.getBoolean("idea")) { - println(launchIdeaWithKscriptlet(rawScript, dependencies, customRepos, includeURLs)) + println(launchIdeaWithKscriptlet(rawScript, userArgs, dependencies, customRepos, includeURLs)) exitProcess(0) } diff --git a/test/test_suite.sh b/test/test_suite.sh index 94106ff0..f064ca68 100755 --- a/test/test_suite.sh +++ b/test/test_suite.sh @@ -268,7 +268,7 @@ export -f kscript_nocall assert_raises 'tmpDir=$(kscript_nocall --idea test/resources/includes/include_variations.kts | cut -f2 -d" " | xargs echo); cd $tmpDir && gradle build' 0 ## Ensure relative includes with in shebang mode -assert_raises resources/includes/shebang_mode_includes 0 +assert_raises "${KSCRIPT_HOME}/test/resources/includes/shebang_mode_includes" 0 ## support diamond-shaped include schemes (see #133) assert_raises 'tmpDir=$(kscript_nocall --idea test/resources/includes/diamond.kts | cut -f2 -d" " | xargs echo); cd $tmpDir && gradle build' 0