Adds traceMode evaluator setting to support trace() pretty printing (#1100)

This commit is contained in:
Steve Salevan
2025-10-07 15:31:16 -04:00
committed by GitHub
parent d03a074f63
commit cecaf39aff
43 changed files with 383 additions and 27 deletions

View File

@@ -20,6 +20,7 @@ import java.time.Duration
import org.msgpack.core.MessagePacker
import org.pkl.core.*
import org.pkl.core.ast.member.ObjectMember
import org.pkl.core.evaluatorSettings.TraceMode
import org.pkl.core.http.HttpClient
import org.pkl.core.module.ModuleKeyFactory
import org.pkl.core.project.DeclaredDependencies
@@ -39,6 +40,7 @@ internal class BinaryEvaluator(
moduleCacheDir: Path?,
declaredDependencies: DeclaredDependencies?,
outputFormat: String?,
traceMode: TraceMode?,
) :
EvaluatorImpl(
transformer,
@@ -54,6 +56,7 @@ internal class BinaryEvaluator(
moduleCacheDir,
declaredDependencies,
outputFormat,
traceMode,
) {
fun evaluate(moduleSource: ModuleSource, expression: String?): ByteArray {
return doEvaluate(moduleSource) { module ->

View File

@@ -227,6 +227,7 @@ class Server(private val transport: MessageTransport) : AutoCloseable {
cacheDir,
dependencies,
message.outputFormat,
message.traceMode,
)
} catch (e: IllegalArgumentException) {
throw ProtocolException(e.message ?: "Failed to create an evalutor. $e", e)

View File

@@ -22,6 +22,7 @@ import java.time.Duration
import org.msgpack.core.MessagePack
import org.msgpack.core.MessageUnpacker
import org.msgpack.value.Value
import org.pkl.core.evaluatorSettings.TraceMode
import org.pkl.core.messaging.BaseMessagePackDecoder
import org.pkl.core.messaging.Message
import org.pkl.core.packages.Checksums
@@ -50,6 +51,7 @@ class ServerMessagePackDecoder(unpacker: MessageUnpacker) : BaseMessagePackDecod
map.unpackHttp(),
unpackStringMapOrNull(map, "externalModuleReaders", ::unpackExternalReader),
unpackStringMapOrNull(map, "externalResourceReaders", ::unpackExternalReader),
unpackStringOrNull(map, "traceMode") { TraceMode.valueOf(it.uppercase()) },
)
Message.Type.CREATE_EVALUATOR_RESPONSE ->
CreateEvaluatorResponse(

View File

@@ -110,6 +110,7 @@ class ServerMessagePackEncoder(packer: MessagePacker) : BaseMessagePackEncoder(p
msg.http,
msg.externalModuleReaders,
msg.externalResourceReaders,
msg.traceMode,
)
packKeyValue("requestId", msg.requestId())
packKeyValue("allowedModules", msg.allowedModules)
@@ -159,6 +160,9 @@ class ServerMessagePackEncoder(packer: MessagePacker) : BaseMessagePackEncoder(p
packExternalReader(spec)
}
}
if (msg.traceMode != null) {
packKeyValue("traceMode", msg.traceMode.toString())
}
return
}
Message.Type.CREATE_EVALUATOR_RESPONSE -> {

View File

@@ -19,6 +19,7 @@ import java.net.URI
import java.nio.file.Path
import java.time.Duration
import java.util.*
import org.pkl.core.evaluatorSettings.TraceMode
import org.pkl.core.messaging.Message
import org.pkl.core.messaging.Messages
import org.pkl.core.packages.Checksums
@@ -40,6 +41,7 @@ data class CreateEvaluatorRequest(
val http: Http?,
val externalModuleReaders: Map<String, ExternalReader>?,
val externalResourceReaders: Map<String, ExternalReader>?,
val traceMode: TraceMode?,
) : Message.Client.Request {
override fun type(): Message.Type = Message.Type.CREATE_EVALUATOR_REQUEST

View File

@@ -78,6 +78,7 @@ abstract class AbstractServerTest {
project = null,
externalModuleReaders = null,
externalResourceReaders = null,
traceMode = null,
)
@Test
@@ -1025,6 +1026,7 @@ abstract class AbstractServerTest {
http,
null,
null,
null,
)
send(message)

View File

@@ -56,6 +56,7 @@ class BinaryEvaluatorSnippetTestEngine : InputOutputTestEngine() {
null,
null,
null,
null,
)
private fun String.stripFilePaths() =

View File

@@ -45,6 +45,7 @@ class BinaryEvaluatorTest {
null,
null,
null,
null,
)
private fun evaluate(text: String, expression: String?) =

View File

@@ -23,6 +23,7 @@ import java.time.Duration
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import org.msgpack.core.MessagePack
import org.pkl.core.evaluatorSettings.TraceMode
import org.pkl.core.messaging.Message
import org.pkl.core.messaging.MessageDecoder
import org.pkl.core.messaging.MessageEncoder
@@ -100,6 +101,7 @@ class ServerMessagePackCodecTest {
),
externalModuleReaders = mapOf("external" to externalReader, "external2" to externalReader),
externalResourceReaders = mapOf("external" to externalReader),
traceMode = TraceMode.PRETTY,
)
)
}