Skip to content

Commit 4d630ae

Browse files
committed
SImplify
1 parent 8fc5db8 commit 4d630ae

File tree

1 file changed

+91
-64
lines changed

1 file changed

+91
-64
lines changed

stdlib/starlark.pkl

Lines changed: 91 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ class Renderer extends ValueRenderer {
9292
/// If [value] is a [Typed] or [Dynamic] object, its properties are rendered
9393
/// as top-level Starlark statements. Otherwise, the value is rendered directly.
9494
function renderDocument(value: Any): String =
95-
if (value is Typed || value is Dynamic)
95+
if (value is Typed | Dynamic)
9696
renderModuleObject(value)
9797
else
9898
renderValue(value)
@@ -103,14 +103,15 @@ class Renderer extends ValueRenderer {
103103

104104
local convertersMap: Map = converters.toMap()
105105

106-
local function getConvertersForValue(value: Any): List = new Listing {
107-
when (convertersMap.containsKey(value.getClass())) {
108-
convertersMap[value.getClass()]
109-
}
110-
when (convertersMap.containsKey("*")) {
111-
convertersMap["*"]
112-
}
113-
}.toList()
106+
local function getConvertersForValue(value: Any): List =
107+
new Listing {
108+
when (convertersMap.containsKey(value.getClass())) {
109+
convertersMap[value.getClass()]
110+
}
111+
when (convertersMap.containsKey("*")) {
112+
convertersMap["*"]
113+
}
114+
}.toList()
114115

115116
local function applyConverters(value: Any): Any =
116117
if (value == null)
@@ -140,36 +141,36 @@ class Renderer extends ValueRenderer {
140141
if (value == null)
141142
"None"
142143
else if (value is RenderDirective)
143-
(value as RenderDirective).text
144+
value.text
144145
else if (value is Boolean)
145-
if (value as Boolean) "True" else "False"
146-
else if (value is Int || value is Float)
146+
if (value) "True" else "False"
147+
else if (value is Int | Float)
147148
"\(value)"
148149
else if (value is String)
149-
renderString(value as String)
150+
renderString(value)
150151
else if (value is Pair)
151-
renderPair(value as Pair, depth)
152+
renderPair(value, depth)
152153
else if (value is Set)
153-
"set(\(renderList((value as Set).toList(), depth)))"
154-
else if (value is List || value is Listing)
154+
"set(\(renderList(value.toList(), depth)))"
155+
else if (value is List | Listing)
155156
renderList(toListValue(value), depth)
156-
else if (value is Map || value is Mapping)
157+
else if (value is Map | Mapping)
157158
renderDict(toMapValue(value), depth)
158159
else if (value is Dynamic)
159-
renderDynamic(value as Dynamic, depth)
160+
renderDynamic(value, depth)
160161
else if (value is Typed)
161-
let (t = value as Typed)
162-
renderTypedFunctionCall(t.getClass().simpleName, t.toMap(), depth)
162+
renderTypedFunctionCall(value.getClass().simpleName, value.toMap(), depth)
163163
else
164-
throw("Cannot render value of type `\(value.getClass().simpleName)` as Starlark. Value: \(value)")
164+
throw(
165+
"Cannot render value of type `\(value.getClass().simpleName)` as Starlark. Value: \(value)"
166+
)
165167

166168
// --- Type coercions ---
167169

168-
local function toListValue(value: List|Listing): List =
169-
if (value is List) value as List else (value as Listing).toList()
170+
local function toListValue(value: List | Listing): List =
171+
if (value is List) value else value.toList()
170172

171-
local function toMapValue(value: Map|Mapping): Map =
172-
if (value is Map) value as Map else (value as Mapping).toMap()
173+
local function toMapValue(value: Map | Mapping): Map = if (value is Map) value else value.toMap()
173174

174175
// --- List / Listing → [...] ---
175176

@@ -185,19 +186,26 @@ class Renderer extends ValueRenderer {
185186

186187
local function renderDict(entries: Map, depth: Int): String =
187188
let (filtered = if (omitNullProperties) entries.filter((_, v) -> v != null) else entries)
188-
if (filtered.isEmpty)
189-
"{}"
190-
else if (isInline)
191-
"{\(new Listing { for (k, v in filtered) { "\(renderDictKey(k)): \(renderAny(v, depth))" } }.toList().join(", "))}"
192-
else
193-
let (lines = new Listing { for (k, v in filtered) { "\(indentStr(depth + 1))\(renderDictKey(k)): \(renderAny(v, depth + 1))" } }.toList())
194-
"{\n\(lines.join(",\n")),\n\(indentStr(depth))}"
189+
if (filtered.isEmpty)
190+
"{}"
191+
else if (isInline)
192+
"{\(new Listing { for (k, v in filtered) { "\(renderDictKey(k)): \(renderAny(v, depth))" } }.join(", "))}"
193+
else
194+
let (
195+
lines =
196+
new Listing {
197+
for (k, v in filtered) {
198+
"\(indentStr(depth + 1))\(renderDictKey(k)): \(renderAny(v, depth + 1))"
199+
}
200+
}.toList()
201+
)
202+
"{\n\(lines.join(",\n")),\n\(indentStr(depth))}"
195203

196204
local function renderDictKey(key: Any): String =
197205
if (key is String)
198-
renderString(key as String)
206+
renderString(key)
199207
else if (key is RenderDirective)
200-
(key as RenderDirective).text
208+
key.text
201209
else
202210
throw("Cannot render non-string dict key: \(key)")
203211

@@ -222,33 +230,47 @@ class Renderer extends ValueRenderer {
222230
local function renderFunctionCall(callName: String, props: Map, depth: Int): String =
223231
let (filtered = if (omitNullProperties) props.filter((_, v) -> v != null) else props)
224232
let (sorted = filtered.entries.sortBy((e) -> "\(e.first)"))
225-
if (filtered.isEmpty)
226-
"\(callName)()"
227-
else if (isInline)
228-
"\(callName)(\(new Listing { for (e in sorted) { "\(e.first) = \(renderAny(e.second, depth))" } }.toList().join(", ")))"
229-
else
230-
let (lines = new Listing { for (e in sorted) { "\(indentStr(depth + 1))\(e.first) = \(renderAny(e.second, depth + 1))" } }.toList())
231-
"\(callName)(\n\(lines.join(",\n")),\n\(indentStr(depth)))"
233+
if (filtered.isEmpty)
234+
"\(callName)()"
235+
else if (isInline)
236+
"\(callName)(\(new Listing { for (e in sorted) { "\(e.first) = \(renderAny(e.second, depth))" } }.join(", ")))"
237+
else
238+
let (
239+
lines =
240+
new Listing {
241+
for (e in sorted) {
242+
"\(indentStr(depth + 1))\(e.first) = \(renderAny(e.second, depth + 1))"
243+
}
244+
}.toList()
245+
)
246+
"\(callName)(\n\(lines.join(",\n")),\n\(indentStr(depth)))"
232247

233248
local function renderTypedFunctionCall(callName: String, props: Map, depth: Int): String =
234249
let (filtered = if (omitNullProperties) props.filter((_, v) -> v != null) else props)
235250
let (sorted = filtered.entries.sortBy((e) -> if ("\(e.first)" == "name") "" else "\(e.first)"))
236-
if (filtered.isEmpty)
237-
"\(callName)()"
238-
else if (isInline)
239-
"\(callName)(\(new Listing { for (e in sorted) { "\(e.first) = \(renderAny(e.second, depth))" } }.toList().join(", ")))"
240-
else
241-
let (lines = new Listing { for (e in sorted) { "\(indentStr(depth + 1))\(e.first) = \(renderAny(e.second, depth + 1))" } }.toList())
242-
"\(callName)(\n\(lines.join(",\n")),\n\(indentStr(depth)))"
251+
if (filtered.isEmpty)
252+
"\(callName)()"
253+
else if (isInline)
254+
"\(callName)(\(new Listing { for (e in sorted) { "\(e.first) = \(renderAny(e.second, depth))" } }.join(", ")))"
255+
else
256+
let (
257+
lines =
258+
new Listing {
259+
for (e in sorted) {
260+
"\(indentStr(depth + 1))\(e.first) = \(renderAny(e.second, depth + 1))"
261+
}
262+
}.toList()
263+
)
264+
"\(callName)(\n\(lines.join(",\n")),\n\(indentStr(depth)))"
243265

244266
// --- Module-level / document-level rendering ---
245267

246-
local function renderModuleObject(value: Typed|Dynamic): String =
268+
local function renderModuleObject(value: Typed | Dynamic): String =
247269
let (props = value.toMap())
248270
let (filtered = if (omitNullProperties) props.filter((_, v) -> v != null) else props)
249-
filtered.entries
250-
.map((e) -> renderTopLevelStatement(e.first.toString(), applyConverters(e.second)))
251-
.join("\n")
271+
filtered.entries
272+
.map((e) -> renderTopLevelStatement(e.first.toString(), applyConverters(e.second)))
273+
.join("\n")
252274

253275
local function renderTopLevelStatement(name: String, value: Any): String =
254276
if (value is Typed && !(value is RenderDirective))
@@ -261,16 +283,21 @@ class Renderer extends ValueRenderer {
261283
let (filtered = if (omitNullProperties) props.filter((_, v) -> v != null) else props)
262284
let (withoutName = filtered.filter((k, _) -> k != "name"))
263285
let (sortedRest = withoutName.entries.sortBy((e) -> "\(e.first)"))
264-
if (isInline)
265-
let (inlineArgs =
266-
List("name = \"\(name)\"") +
267-
new Listing { for (e in sortedRest) { "\(e.first) = \(renderAny(e.second, 0))" } }.toList()
268-
)
269-
"\(value.getClass().simpleName)(\(inlineArgs.join(", ")))\n"
270-
else
271-
let (lines =
272-
List("\(indent)name = \"\(name)\"") +
273-
new Listing { for (e in sortedRest) { "\(indent)\(e.first) = \(renderAny(e.second, 1))" } }.toList()
274-
)
275-
"\(value.getClass().simpleName)(\n\(lines.join(",\n")),\n)\n"
286+
if (isInline)
287+
let (
288+
inlineArgs =
289+
List("name = \"\(name)\"")
290+
+ new Listing { for (e in sortedRest) { "\(e.first) = \(renderAny(e.second, 0))" } }
291+
.toList()
292+
)
293+
"\(value.getClass().simpleName)(\(inlineArgs.join(", ")))\n"
294+
else
295+
let (
296+
lines =
297+
List("\(indent)name = \"\(name)\"")
298+
+ new Listing {
299+
for (e in sortedRest) { "\(indent)\(e.first) = \(renderAny(e.second, 1))" }
300+
}.toList()
301+
)
302+
"\(value.getClass().simpleName)(\n\(lines.join(",\n")),\n)\n"
276303
}

0 commit comments

Comments
 (0)