mirror of
https://github.com/apple/pkl.git
synced 2026-01-13 23:23:37 +01:00
[PR #1100] [MERGED] Adds traceMode evaluator setting to support trace() pretty printing #887
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/apple/pkl/pull/1100
Author: @ssalevan
Created: 6/16/2025
Status: ✅ Merged
Merged: 10/7/2025
Merged by: @HT154
Base:
main← Head:ssalevan/pretty-traces📝 Commits (5)
c639d08Adds prettyTrace evaluator setting to support indented, multi-line trace() output1257e5dConverts prettyTraces to TraceMode, loops into pkl-server30193d6Adds traceMode option to CLI argumentsa12dcebCorrect missing TraceMode specification8139288Bumps version to 0.30.0📊 Changes
43 files changed (+383 additions, -27 deletions)
View changed files
📝
bench/src/jmh/java/org/pkl/core/ListSort.java(+3 -2)📝
docs/src/test/kotlin/DocSnippetTests.kt(+1 -0)📝
pkl-cli/src/main/kotlin/org/pkl/cli/CliRepl.kt(+1 -0)📝
pkl-cli/src/test/kotlin/org/pkl/cli/repl/ReplMessagesTest.kt(+1 -0)📝
pkl-commons-cli/src/main/kotlin/org/pkl/commons/cli/CliBaseOptions.kt(+4 -0)📝
pkl-commons-cli/src/main/kotlin/org/pkl/commons/cli/commands/BaseOptions.kt(+13 -0)📝
pkl-core/src/main/java/org/pkl/core/Analyzer.java(+7 -2)📝
pkl-core/src/main/java/org/pkl/core/EvaluatorBuilder.java(+22 -1)📝
pkl-core/src/main/java/org/pkl/core/EvaluatorImpl.java(+5 -2)📝
pkl-core/src/main/java/org/pkl/core/ast/expression/unary/TraceNode.java(+17 -3)📝
pkl-core/src/main/java/org/pkl/core/evaluatorSettings/PklEvaluatorSettings.java(+16 -4)➕
pkl-core/src/main/java/org/pkl/core/evaluatorSettings/TraceMode.java(+26 -0)📝
pkl-core/src/main/java/org/pkl/core/messaging/AbstractMessagePackEncoder.java(+4 -2)📝
pkl-core/src/main/java/org/pkl/core/project/Project.java(+10 -4)📝
pkl-core/src/main/java/org/pkl/core/repl/ReplServer.java(+5 -2)📝
pkl-core/src/main/java/org/pkl/core/runtime/StdLibModule.java(+2 -1)📝
pkl-core/src/main/java/org/pkl/core/runtime/VmContext.java(+10 -2)➕
pkl-core/src/test/files/LanguageSnippetTests/input/projects/defaultTraceMode/PklProject(+5 -0)➕
pkl-core/src/test/files/LanguageSnippetTests/input/projects/defaultTraceMode/defaultTraceMode.pkl(+18 -0)➕
pkl-core/src/test/files/LanguageSnippetTests/input/projects/evaluatorSettings/nullTraceMode.pkl(+18 -0)...and 23 more files
📄 Description
Problem
Calling
trace(...)upon a complex Pkl data structure results in a compact, single-line evaluation of that structure, which is non-ideal when debugging complex rendering scenarios.Solution
Adds a new evaluator setting,
traceMode, which supports the following values:"hidden": No trace() calls will be emitted to stderr"default": All structures passed totrace(...)will be emitted to stderr in compact, single-line form."pretty": All structures passed totrace(...)will be emitted to stderr in indented, multi-line form.As this mechanism needs to be evaluated within the
TraceNodevisitor, this setting is ultimately plumbed into theVmContextto be accessible from anexecuteGeneric()->doTrace()call. This approach seemed to be the most idiomatic, but there may ultimately be more straightforward options for exposing this value at thedoTrace()level.Testing
Added Pkl, Java and Kotlin tests across all applicable areas to ensure correct parsing of
traceModevalue alongside expected behavior. Ensured that all spotless formatting checks ran cleanly.🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.