Skip to content

Commit

Permalink
Console: Print error causes if applicable
Browse files Browse the repository at this point in the history
Fixes #94
  • Loading branch information
mattco98 committed Dec 25, 2023
1 parent 1b79ef4 commit 2b9e9dc
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,8 @@ class ConsoleClientProcess(private val port: Int, private val hostPid: Long) {
frame?.println(message.text, message.logType, message.end, message.color?.let(::Color))
?: error("Received PrintMessage before InitMessage")
}
is PrintStackTraceMessage -> {
frame?.printStackTrace(message.message, message.trace)
is PrintErrorMessage -> {
frame?.printError(message.error)
?: error("Received PrintStackTraceMessage before InitMessage")
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,43 +143,50 @@ class ConsoleFrame(
}
}

fun printStackTrace(message: String, trace: List<StackTrace>) {
invokeLater {
if (currentConfig.openConsoleOnError)
showConsole()

val index = trace.indexOfFirst {
fun printError(error: PrintErrorMessage.Error) {
fun StringBuilder.appendError(err: PrintErrorMessage.Error) {
val index = err.trace.indexOfFirst {
it.fileName?.lowercase()?.contains("jsloader") ?: false
}

val trimmedTrace = trace.dropLast(trace.size - index - 1).map {
val fileNameIndex = it.fileName?.indexOf("ChatTriggers/modules/") ?: return@map it
val classNameIndex = it.className.indexOf("ChatTriggers_modules_")

if (fileNameIndex != -1) {
StackTrace(
it.className.substring(classNameIndex + 21),
it.methodName,
it.fileName.substring(fileNameIndex + 21),
it.lineNumber
)
} else it
}

printErrorWithColor(message, trimmedTrace)
}
}
val trimmedTrace = if (index != -1) {
err.trace.dropLast(err.trace.size - index - 1).map {
val fileNameIndex = it.fileName?.indexOf("ChatTriggers/modules/") ?: return@map it
val classNameIndex = it.className.indexOf("ChatTriggers_modules_")

if (fileNameIndex != -1) {
StackTrace(
it.className.substring(classNameIndex + 21),
it.methodName,
it.fileName.substring(fileNameIndex + 21),
it.lineNumber
)
} else it
}
} else err.trace

private fun printErrorWithColor(message: String, traces: List<StackTrace>) {
writer.println(buildString {
appendLine(message)
for (trace in traces) {
appendLine(err.message)
for (trace in trimmedTrace) {
append("\tat ${trace.className}.${trace.methodName} (${trace.fileName}")
if (trace.lineNumber != -1)
append(":${trace.lineNumber}")
appendLine(")")
}
}, LogType.ERROR)

if (err.cause != null) {
append("Caused by: ")
appendError(err.cause)
}
}

invokeLater {
if (currentConfig.openConsoleOnError)
showConsole()

writer.println(buildString {
appendError(error)
}, LogType.ERROR)
}
}

fun setConfig(config: ConfigUpdateMessage) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,10 +142,14 @@ object ConsoleHostProcess {
}

fun printStackTrace(error: Throwable) {
val trace = error.stackTrace.map {
StackTrace(it.fileName, it.className, it.methodName, it.lineNumber)
}
trySendMessage(PrintStackTraceMessage(error.message.orEmpty(), trace))
fun makeError(err: Throwable): PrintErrorMessage.Error = PrintErrorMessage.Error(
error::class.qualifiedName?.let { "$it: " } + err.message.orEmpty(),
err.stackTrace.map {
StackTrace(it.fileName, it.className, it.methodName, it.lineNumber)
},
err.cause?.let(::makeError),
)
trySendMessage(PrintErrorMessage(makeError(error)))
}

fun show() = trySendMessage(OpenMessage)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,10 @@ class PrintMessage(
) : H2CMessage()

@Serializable
class PrintStackTraceMessage(val message: String, val trace: List<StackTrace>) : H2CMessage()
class PrintErrorMessage(val error: Error) : H2CMessage() {
@Serializable
data class Error(val message: String, val trace: List<StackTrace>, val cause: Error?)
}

@Serializable
data class StackTrace(
Expand Down

0 comments on commit 2b9e9dc

Please sign in to comment.