Rename render to renderValue (#1964)

Motivation: preserve a possible API change to have `FormattingRenderer`
extend `ValueRenderer`.
This commit is contained in:
Daniel Chao authored and GitHub committed 2026-11-05 08:39:33 -08:00
1 parent 1f5c62ecef
commit 85b4a4669a
5 files changed
+35 -31

No files matched your search

@@ -31,7 +31,7 @@ import org.pkl.parser.syntax.generic.Node;
public final class FormattingRendererNodes {
private FormattingRendererNodes() {}
public abstract static class render extends ExternalMethod1Node {
public abstract static class renderValue extends ExternalMethod1Node {
@Specialization
protected String eval(
VmTyped self, VmTyped nodeVm, @Cached("create()") IndirectCallNode callNode) {
@@ -135,25 +135,25 @@ facts {
}
["replaceChild replaces only the first match"] {
renderer.render(
renderer.renderValue(
mod("x = 1 + 1").replaceChild((n) -> n.type == "int_literal_expr", (_n) -> intLiteral(9)),
) == "x = 9 + 1\n"
}
["replaceChild leaves the tree unchanged when nothing matches"] {
renderer.render(
renderer.renderValue(
mod("x = 1").replaceChild((n) -> n.type == "when_generator", (_n) -> intLiteral(9)),
) == "x = 1\n"
}
["replaceChildren replaces every match"] {
renderer.render(
renderer.renderValue(
mod("x = 1 + 1").replaceChildren((n) -> n.type == "int_literal_expr", (_n) -> intLiteral(9)),
) == "x = 9 + 9\n"
}
["a replacer sees the node it replaces"] {
renderer.render(
renderer.renderValue(
mod("x = 1 + 2")
.replaceChildren(
(n) -> n.type == "int_literal_expr",
@@ -164,14 +164,14 @@ facts {
["a replacement is not searched for further matches"] {
// replacing an identifier with an identifier terminates instead of looping
renderer.render(
renderer.renderValue(
mod("foo = 1").replaceChildrenOfType("identifier", (n) -> (n) { text = "\(n.text!!)Bar" }),
) == "fooBar = 1\n"
}
["replaceChildOfType agrees with replaceChild"] {
renderer.render(mod("x = 1 + 1").replaceChildOfType("int_literal_expr", (_n) -> intLiteral(9)))
== renderer.render(
renderer.renderValue(mod("x = 1 + 1").replaceChildOfType("int_literal_expr", (_n) -> intLiteral(9)))
== renderer.renderValue(
mod("x = 1 + 1").replaceChild((n) -> n.type == "int_literal_expr", (_n) -> intLiteral(9)),
)
}
@@ -182,14 +182,14 @@ facts {
.replaceChildOfType("int_literal_expr", (n) ->
if (n.hasParentOfType("class_property")) intLiteral(9) else intLiteral(0)
)
renderer.render(result) == "x = 9\n"
renderer.renderValue(result) == "x = 9\n"
}
["a replace does not change the tree it walks"] {
local original = mod("x = 1")
local rewritten = original.replaceChildrenOfType("int_literal_expr", (_n) -> intLiteral(9))
let (rendered = renderer.render(rewritten))
rendered == "x = 9\n" && renderer.render(original) == "x = 1\n"
let (rendered = renderer.renderValue(rewritten))
rendered == "x = 9\n" && renderer.renderValue(original) == "x = 1\n"
}
["the root of a replaced tree has no parent"] {
@@ -221,7 +221,7 @@ facts {
.findChildrenOfType("int_literal_expr")
.fold(0, (acc, c) -> acc + c.text!!.toInt()),
)
renderer.render(mod("x = 1 + 2").replaceChildrenOfType("int_literal_expr", sumOfSiblings))
renderer.renderValue(mod("x = 1 + 2").replaceChildrenOfType("int_literal_expr", sumOfSiblings))
== "x = 3 + 3\n"
}
@@ -234,7 +234,7 @@ facts {
}
["rebuilds ancestors of a replacement"] {
renderer.render(
renderer.renderValue(
mod("x = if (cond) 41 else 0")
.replaceChildrenOfType("int_literal_expr", (n) -> intLiteral(n.text!!.toInt() + 1)),
) == "x = if (cond) 42 else 1\n"
@@ -246,7 +246,7 @@ facts {
throw("searched inside a match")
else
n.type == "parenthesized_expr"
renderer.render(mod("x = (1)").replaceChildren(predicate, (_) -> intLiteral(9))) == "x = 9\n"
renderer.renderValue(mod("x = (1)").replaceChildren(predicate, (_) -> intLiteral(9))) == "x = 9\n"
}
["replacement is eager"] {
@@ -5,10 +5,9 @@ import "pkl:test"
local renderer = new syntax.FormattingRenderer {}
local function roundTrip(source: String) = renderer.render(parseNode(source))
local function roundTrip(source: String) = renderer.renderValue(parseNode(source))
local function parseNode(source: String): syntax.Node =
new syntax.Parser {}.parseModule(source)
local function parseNode(source: String): syntax.Node = new syntax.Parser {}.parseModule(source)
local function replaceLeaf(
node: syntax.Node,
@@ -340,37 +339,37 @@ facts {
["modify identifier"] {
local root = parseNode("x = 1")
local modified = replaceLeaf(root, "identifier", "x", "y")
renderer.render(modified) == "y = 1\n"
renderer.renderValue(modified) == "y = 1\n"
}
["modify modifier"] {
local root = parseNode("hidden x = 1")
local modified = replaceLeaf(root, "modifier", "hidden", "local")
renderer.render(modified) == "local x = 1\n"
renderer.renderValue(modified) == "local x = 1\n"
}
["modify string content"] {
local root = parseNode(#"x = "hello""#)
local modified = replaceLeaf(root, "string_chars", "hello", "world")
renderer.render(modified) == #"x = "world"\#n"#
renderer.renderValue(modified) == #"x = "world"\#n"#
}
["modify int literal"] {
local root = parseNode("x = 42")
local modified = replaceLeaf(root, "int_literal_expr", "42", "99")
renderer.render(modified) == "x = 99\n"
renderer.renderValue(modified) == "x = 99\n"
}
["modify boolean literal"] {
local root = parseNode("x = true")
local modified = replaceLeaf(root, "bool_literal_expr", "true", "false")
renderer.render(modified) == "x = false\n"
renderer.renderValue(modified) == "x = false\n"
}
["modify float literal"] {
local root = parseNode("x = 3.14")
local modified = replaceLeaf(root, "float_literal_expr", "3.14", "2.72")
renderer.render(modified) == "x = 2.72\n"
renderer.renderValue(modified) == "x = 2.72\n"
}
["add new modifier"] {
@@ -384,7 +383,8 @@ facts {
children = List(constModifier) + n.children
})
// modifier order is switched by the formatter
renderer.render(modified) == """
renderer.renderValue(modified)
== """
local const x = 1
"""
@@ -392,14 +392,17 @@ facts {
["a default renderer targets the V2 grammar"] {
local node = parseNode("x = 1")
renderer.render(node) == new syntax.FormattingRenderer { grammarVersion = "V2" }.render(node)
renderer.renderValue(node)
== new syntax.FormattingRenderer { grammarVersion = "V2" }.renderValue(node)
}
["renderer honors the grammar version"] {
local node =
parseNode("x = fn(argument1, argument2, argument3, argument4, argument5, argument6, argument7, argument8, argument9)")
new syntax.FormattingRenderer { grammarVersion = "V1" }.render(node)
!= new syntax.FormattingRenderer { grammarVersion = "V2" }.render(node)
parseNode(
"x = fn(argument1, argument2, argument3, argument4, argument5, argument6, argument7, argument8, argument9)",
)
new syntax.FormattingRenderer { grammarVersion = "V1" }.renderValue(node)
!= new syntax.FormattingRenderer { grammarVersion = "V2" }.renderValue(node)
}
["a malformed tree is reported as such"] {
@@ -407,7 +410,8 @@ facts {
type = "object_element"
children = List()
}
test.catch(() -> renderer.render(malformed))
test
.catch(() -> renderer.renderValue(malformed))
.contains("Could not render node of type `object_element` as Pkl source")
}
}
@@ -64,7 +64,7 @@ facts {
["a spanless constructed node still renders"] {
new syntax.FormattingRenderer {}
.render(new syntax.Node { type = "int_literal_expr"; text = "42" })
.renderValue(new syntax.Node { type = "int_literal_expr"; text = "42" })
.trim() == "42"
}
+1 -1
View File
@@ -46,7 +46,7 @@ class FormattingRenderer {
grammarVersion: "V1" | "V2" = "V2"
/// Render [node] as Pkl source code.
external function render(node: Node): String
external function renderValue(node: Node): String
}
/// A generic, untyped node in the Pkl syntax tree.