Scripting: fix CLI REPL error reporting behavior

discrepancy after switching to the new REPL internals was
discovered also on IJ plugin tests, so added a test emulating it.
also some test infra refactoring
This commit is contained in:
Ilya Chernikov
2022-06-27 14:01:46 +02:00
parent 8bc43917ec
commit 6e59c2e079
5 changed files with 80 additions and 17 deletions
@@ -139,8 +139,8 @@ class ReplFromTerminal(
writer.outputCommandResult(tryInterpretResultAsValueClass(evalResult) ?: evalResult.toString())
}
}
is ReplEvalResult.Error.Runtime -> writer.outputRuntimeError(evalResult.message)
is ReplEvalResult.Error.CompileTime -> writer.outputCompileError(evalResult.message)
is ReplEvalResult.Error.Runtime -> if (evalResult.message.isNotEmpty()) writer.outputRuntimeError(evalResult.message)
is ReplEvalResult.Error.CompileTime -> if (evalResult.message.isNotEmpty()) writer.outputCompileError(evalResult.message)
is ReplEvalResult.Incomplete -> writer.notifyIncomplete()
is ReplEvalResult.HistoryMismatch -> {} // assuming handled elsewhere
}
@@ -174,12 +174,11 @@ class ReplInterpreter(
when (val compileResult = compiler.compile(listOf(snippet), compilationConfiguration)) {
is ResultWithDiagnostics.Failure -> {
val incompleteReport = compileResult.reports.find { it.code == ScriptDiagnostic.incompleteCode }
val firstError = compileResult.reports.find { it.isError() }
if (incompleteReport != null)
ReplEvalResult.Incomplete(incompleteReport.message)
else {
compileResult.reportToMessageCollector()
ReplEvalResult.Error.CompileTime(firstError?.message ?: "", firstError?.location?.toCompilerMessageLocation())
ReplEvalResult.Error.CompileTime("")
}
}
is ResultWithDiagnostics.Success -> {
@@ -195,9 +194,8 @@ class ReplInterpreter(
}
}
else -> {
val firstError = evalResult.reports.find { it.isError() }
evalResult.reportToMessageCollector()
ReplEvalResult.Error.Runtime(firstError?.message ?: "", firstError?.exception)
ReplEvalResult.Error.Runtime("")
}
}
}