Do not insert additional new lines in REPL

This commit is contained in:
Natalia Selezneva
2018-10-26 09:23:27 +03:00
parent 468404c6c3
commit e48fbe4aa3
5 changed files with 7 additions and 13 deletions
@@ -24,8 +24,8 @@ import java.io.File
import java.net.URLClassLoader import java.net.URLClassLoader
// using '#' to avoid collisions with xml escaping // using '#' to avoid collisions with xml escaping
private val SOURCE_CHARS: List<String> = listOf("\n", "#") private val SOURCE_CHARS: List<String> = listOf("\r", "\n", "#")
private val XML_REPLACEMENTS: List<String> = listOf("#n", "#diez") private val XML_REPLACEMENTS: List<String> = listOf("#r", "#n", "#diez")
private val END_LINE: String = LineSeparator.getSystemLineSeparator().separatorString private val END_LINE: String = LineSeparator.getSystemLineSeparator().separatorString
private const val XML_PREAMBLE = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" private const val XML_PREAMBLE = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
@@ -45,6 +45,7 @@ fun String.replInputAsXml(): String {
fun String.replAddLineBreak() = this + END_LINE fun String.replAddLineBreak() = this + END_LINE
fun String.replRemoveLineBreaksInTheEnd() = trimEnd(*END_LINE.toCharArray()) fun String.replRemoveLineBreaksInTheEnd() = trimEnd(*END_LINE.toCharArray())
fun String.replNormalizeLineBreaks() = replace(END_LINE, "\n")
fun makeScriptBaseName(codeLine: ReplCodeLine) = fun makeScriptBaseName(codeLine: ReplCodeLine) =
"Line_${codeLine.no}${if (codeLine.generation > REPL_CODE_LINE_FIRST_GEN) "_gen_${codeLine.generation}" else ""}" "Line_${codeLine.no}${if (codeLine.generation > REPL_CODE_LINE_FIRST_GEN) "_gen_${codeLine.generation}" else ""}"
@@ -21,6 +21,7 @@ import com.intellij.execution.process.OSProcessHandler
import com.intellij.execution.process.ProcessOutputTypes import com.intellij.execution.process.ProcessOutputTypes
import com.intellij.openapi.util.Key import com.intellij.openapi.util.Key
import org.jetbrains.kotlin.cli.common.repl.replInputAsXml import org.jetbrains.kotlin.cli.common.repl.replInputAsXml
import org.jetbrains.kotlin.cli.common.repl.replNormalizeLineBreaks
import org.jetbrains.kotlin.cli.common.repl.replRemoveLineBreaksInTheEnd import org.jetbrains.kotlin.cli.common.repl.replRemoveLineBreaksInTheEnd
import org.jetbrains.kotlin.cli.common.repl.replUnescapeLineBreaks import org.jetbrains.kotlin.cli.common.repl.replUnescapeLineBreaks
import org.jetbrains.kotlin.console.KotlinConsoleKeeper import org.jetbrains.kotlin.console.KotlinConsoleKeeper
@@ -123,7 +124,7 @@ class KtScratchReplExecutor(file: ScratchFile) : ScratchExecutor(file) {
val root = output.firstChild as Element val root = output.firstChild as Element
val outputType = root.getAttribute("type") val outputType = root.getAttribute("type")
val content = root.textContent.replUnescapeLineBreaks().replRemoveLineBreaksInTheEnd() val content = root.textContent.replUnescapeLineBreaks().replNormalizeLineBreaks().replRemoveLineBreaksInTheEnd()
LOG.printDebugMessage("REPL output: $outputType $content") LOG.printDebugMessage("REPL output: $outputType $content")
@@ -20,6 +20,7 @@ import com.intellij.execution.process.OSProcessHandler
import com.intellij.execution.process.ProcessOutputTypes import com.intellij.execution.process.ProcessOutputTypes
import com.intellij.openapi.util.Key import com.intellij.openapi.util.Key
import com.intellij.openapi.util.TextRange import com.intellij.openapi.util.TextRange
import org.jetbrains.kotlin.cli.common.repl.replNormalizeLineBreaks
import org.jetbrains.kotlin.cli.common.repl.replUnescapeLineBreaks import org.jetbrains.kotlin.cli.common.repl.replUnescapeLineBreaks
import org.jetbrains.kotlin.console.actions.logError import org.jetbrains.kotlin.console.actions.logError
import org.jetbrains.kotlin.diagnostics.Severity import org.jetbrains.kotlin.diagnostics.Severity
@@ -75,7 +76,7 @@ class ReplOutputHandler(
val root = output.firstChild as Element val root = output.firstChild as Element
val outputType = ReplEscapeType.valueOfOrNull(root.getAttribute("type")) val outputType = ReplEscapeType.valueOfOrNull(root.getAttribute("type"))
val content = root.textContent.replUnescapeLineBreaks() val content = root.textContent.replUnescapeLineBreaks().replNormalizeLineBreaks()
when (outputType) { when (outputType) {
INITIAL_PROMPT -> buildWarningIfNeededBeforeInit(content) INITIAL_PROMPT -> buildWarningIfNeededBeforeInit(content)
-2
View File
@@ -1,6 +1,4 @@
foo() // ERROR: error: unresolved reference: foo... foo() // ERROR: error: unresolved reference: foo...
/** unresolved.kts:1 error: unresolved reference: foo /** unresolved.kts:1 error: unresolved reference: foo
foo() foo()
^ */ ^ */
-7
View File
@@ -6,20 +6,13 @@ fun goo(a: String) { // ERROR: error: unresolved reference: goo...
super.goo(a) super.goo(a)
} }
/** unresolvedMultiline.kts:1 error: unresolved reference: foo /** unresolvedMultiline.kts:1 error: unresolved reference: foo
foo.forEach { foo.forEach {
^ ^
error: cannot choose among the following candidates without completing type inference: error: cannot choose among the following candidates without completing type inference:
@HidesMembers public inline fun <T> Iterable<???>.forEach(action: (???) -> Unit): Unit defined in kotlin.collections @HidesMembers public inline fun <T> Iterable<???>.forEach(action: (???) -> Unit): Unit defined in kotlin.collections
@HidesMembers public inline fun <K, V> Map<out ???, ???>.forEach(action: (Map.Entry<???, ???>) -> Unit): Unit defined in kotlin.collections @HidesMembers public inline fun <K, V> Map<out ???, ???>.forEach(action: (Map.Entry<???, ???>) -> Unit): Unit defined in kotlin.collections
foo.forEach { foo.forEach {
^ */ ^ */
/** unresolvedMultiline.kts:5 error: unresolved reference: goo /** unresolvedMultiline.kts:5 error: unresolved reference: goo
super.goo(a) super.goo(a)
^ */ ^ */