Compare commits

..
6 Commits
103 changed files with 245 additions and 1807 deletions

No files matched your search

+4 -4
View File
@@ -45,6 +45,9 @@ fixed job {
when (os == "windows") {
["JAVA_HOME"] = "/jdk"
}
when (os == "macOS") {
["DEVELOPER_DIR"] = "/Applications/Xcode_swift_6.4.app"
}
}
when (os == "macOS") {
`if` =
@@ -65,10 +68,7 @@ fixed job {
new Listing {
"self-hosted"
"macos"
// Currently have a bug where macOS runners have `cc` from XCode 26 toolchain but have
// default SDK set to 27.
// TODO remove me once this issue is fixed.
"tahoe"
"goldengate"
when (nightlyMacOS) {
"nightly"
}
+6 -3
View File
@@ -321,9 +321,10 @@ jobs:
runs-on:
- self-hosted
- macos
- tahoe
- goldengate
env:
LANG: en_US.UTF-8
DEVELOPER_DIR: /Applications/Xcode_swift_6.4.app
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
@@ -660,9 +661,10 @@ jobs:
runs-on:
- self-hosted
- macos
- tahoe
- goldengate
env:
LANG: en_US.UTF-8
DEVELOPER_DIR: /Applications/Xcode_swift_6.4.app
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
@@ -999,9 +1001,10 @@ jobs:
runs-on:
- self-hosted
- macos
- tahoe
- goldengate
env:
LANG: en_US.UTF-8
DEVELOPER_DIR: /Applications/Xcode_swift_6.4.app
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
+6 -3
View File
@@ -319,9 +319,10 @@ jobs:
runs-on:
- self-hosted
- macos
- tahoe
- goldengate
env:
LANG: en_US.UTF-8
DEVELOPER_DIR: /Applications/Xcode_swift_6.4.app
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
@@ -658,9 +659,10 @@ jobs:
runs-on:
- self-hosted
- macos
- tahoe
- goldengate
env:
LANG: en_US.UTF-8
DEVELOPER_DIR: /Applications/Xcode_swift_6.4.app
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
@@ -997,9 +999,10 @@ jobs:
runs-on:
- self-hosted
- macos
- tahoe
- goldengate
env:
LANG: en_US.UTF-8
DEVELOPER_DIR: /Applications/Xcode_swift_6.4.app
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
+6 -3
View File
@@ -211,9 +211,10 @@ jobs:
runs-on:
- self-hosted
- macos
- tahoe
- goldengate
env:
LANG: en_US.UTF-8
DEVELOPER_DIR: /Applications/Xcode_swift_6.4.app
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
@@ -559,9 +560,10 @@ jobs:
runs-on:
- self-hosted
- macos
- tahoe
- goldengate
env:
LANG: en_US.UTF-8
DEVELOPER_DIR: /Applications/Xcode_swift_6.4.app
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
@@ -907,9 +909,10 @@ jobs:
runs-on:
- self-hosted
- macos
- tahoe
- goldengate
env:
LANG: en_US.UTF-8
DEVELOPER_DIR: /Applications/Xcode_swift_6.4.app
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
+6 -3
View File
@@ -319,9 +319,10 @@ jobs:
runs-on:
- self-hosted
- macos
- tahoe
- goldengate
env:
LANG: en_US.UTF-8
DEVELOPER_DIR: /Applications/Xcode_swift_6.4.app
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
@@ -658,9 +659,10 @@ jobs:
runs-on:
- self-hosted
- macos
- tahoe
- goldengate
env:
LANG: en_US.UTF-8
DEVELOPER_DIR: /Applications/Xcode_swift_6.4.app
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
@@ -997,9 +999,10 @@ jobs:
runs-on:
- self-hosted
- macos
- tahoe
- goldengate
env:
LANG: en_US.UTF-8
DEVELOPER_DIR: /Applications/Xcode_swift_6.4.app
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
+6 -3
View File
@@ -322,9 +322,10 @@ jobs:
runs-on:
- self-hosted
- macos
- tahoe
- goldengate
env:
LANG: en_US.UTF-8
DEVELOPER_DIR: /Applications/Xcode_swift_6.4.app
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
@@ -666,9 +667,10 @@ jobs:
runs-on:
- self-hosted
- macos
- tahoe
- goldengate
env:
LANG: en_US.UTF-8
DEVELOPER_DIR: /Applications/Xcode_swift_6.4.app
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
@@ -1010,9 +1012,10 @@ jobs:
runs-on:
- self-hosted
- macos
- tahoe
- goldengate
env:
LANG: en_US.UTF-8
DEVELOPER_DIR: /Applications/Xcode_swift_6.4.app
steps:
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
@@ -279,8 +279,12 @@ abstract class NativeImageBuild : DefaultTask() {
add("--native-compiler-path=${nativeCompilerPath.get().asFile}")
}
// Pass through all `HOMEBREW_` prefixed environment variables to allow build with shimmed
// tools.
addAll(environment.keys.filter { it.startsWith("HOMEBREW_") }.map { "-E$it" })
// tools, and `DEVELOPER_DIR` so that `cc` on macOS uses the selected Xcode toolchain.
addAll(
environment.keys
.filter { it.startsWith("HOMEBREW_") || it == "DEVELOPER_DIR" }
.map { "-E$it" }
)
addAll(extraNativeImageArgs.get())
addAll(extraArgsFromProperties)
}
+2 -2
View File
@@ -1,6 +1,6 @@
name: main
title: Main Project
version: 0.33.0
prerelease: false
version: 0.34.0-dev
prerelease: true
nav:
- nav.adoc
@@ -3,10 +3,10 @@
// the following attributes must be updated immediately before a release
// pkl version corresponding to current git commit without -dev suffix or git hash
:pkl-version-no-suffix: 0.33.0
:pkl-version-no-suffix: 0.34.0
// tells whether pkl version corresponding to current git commit
// is a release version (:is-release-version: '') or dev version (:!is-release-version:)
:is-release-version: ''
:!is-release-version:
// the remaining attributes do not need to be updated regularly
@@ -77,7 +77,6 @@ endif::[]
:uri-stdlib-netModule: {uri-pkl-stdlib-docs}/net
:uri-stdlib-net-Url: {uri-stdlib-netModule}/Url
:uri-stdlib-xmlModule: {uri-pkl-stdlib-docs}/xml
:uri-stdlib-protobufModule: {uri-pkl-stdlib-docs}/protobuf
:uri-stdlib-pklbinaryModule: {uri-pkl-stdlib-docs}/pklbinary
:uri-stdlib-yamlModule: {uri-pkl-stdlib-docs}/yaml
:uri-stdlib-YamlParser: {uri-stdlib-yamlModule}/Parser
@@ -2752,7 +2752,6 @@ The standard library provides these renderers:
* link:{uri-stdlib-baseModule}/PcfRenderer[PcfRenderer]
* link:{uri-stdlib-baseModule}/PListRenderer[PListRenderer]
* link:{uri-stdlib-baseModule}/PropertiesRenderer[PropertiesRenderer]
* link:{uri-stdlib-protobufModule}/Renderer[protobuf.Renderer]
* link:{uri-stdlib-xmlModule}/Renderer[xml.Renderer]
* link:{uri-stdlib-baseModule}/YamlRenderer[YamlRenderer]
-1
View File
@@ -307,7 +307,6 @@ The default output renderer for a module supports the following formats:
* `pcf`
* `plist`
* `properties`
* `textproto` (deprecated in Pkl 0.33)
* `xml`
* `yaml`
-1
View File
@@ -152,7 +152,6 @@ The default output renderer for a module supports the following formats:
* `"pcf"`
* `"plist"`
* `"properties"`
* `"textproto"` (deprecated in Pkl 0.33)
* `"xml"`
* `"yaml"`
====
+4 -4
View File
@@ -58,7 +58,7 @@ To learn more about the design of generic method calls, consult https://github.c
A new standard library module is introduced called pkldoc:#[pkl:net], for working with network types (https://github.com/apple/pkl/pull/1834[#1834]).
Its centerpiece is pkldoc:Url[pkl:net], a URL as defined by https://www.rfc-editor.org/rfc/rfc3986[RFC 3986].
A string is parsed with pkldoc:Url()[pkl:net], which accepts an absolute URL as well as a relative reference, and which throws if the string cannot be parsed:
A string is parsed with pkldoc:#Url()[pkl:net], which accepts an absolute URL as well as a relative reference, and which throws if the string cannot be parsed:
[source,pkl]
----
@@ -119,7 +119,7 @@ To instead compare them as the *syntax-based normalization* of RFC 3986, where s
same = net.Url("HTTPS://Example.com/%7Euser").equals(net.Url("https://example.com/~user")) // true
----
The module also provides standalone helpers: pkldoc:encodeUrlComponent()[pkl:net] and pkldoc:decodeUrlComponent()[pkl:net] for percent-encoding, and pkldoc:buildQuery()[pkl:net] and pkldoc:parseQuery()[pkl:net] for `application/x-www-form-urlencoded` queries.
The module also provides standalone helpers: pkldoc:#encodeUrlComponent()[pkl:net] and pkldoc:#decodeUrlComponent()[pkl:net] for percent-encoding, and pkldoc:#buildQuery()[pkl:net] and pkldoc:#parseQuery()[pkl:net] for `application/x-www-form-urlencoded` queries.
Alongside this module, `pkl:base` gains pkldoc:String#isValidUrl[], which tells whether a string is a valid absolute URL.
It is stricter than `net.Url()`, which also parses a relative reference, and which percent-encodes whatever cannot appear literally in a URL component.
@@ -498,7 +498,7 @@ bad1: Uri = "./some/path" // throws: not absolute
bad2: Uri = "https://example.com/some path" // throws: space must be percent-encoded
----
This affects every standard library member typed as `Uri`, among them pkldoc:Resource#uri[], pkldoc:importGraph()[pkl:analyze], and the URI-valued properties of pkldoc:#[pkl:Project], pkldoc:#[pkl:EvaluatorSettings] and pkldoc:#[pkl:DocPackageInfo].
This affects every standard library member typed as `Uri`, among them pkldoc:Resource#uri[], pkldoc:#importGraph()[pkl:analyze], and the URI-valued properties of pkldoc:#[pkl:Project], pkldoc:#[pkl:EvaluatorSettings] and pkldoc:#[pkl:DocPackageInfo].
As a consequence, an invalid URI is now reported as a type constraint violation at the point where it is set, rather than as an error raised later by whatever consumes it.
@@ -566,7 +566,7 @@ To restore the old meaning, wrap the left-hand side with parentheses:
=== `test.catch()` and `test.catchOrNull()` force their result
The pkldoc:catch()[pkl:test] and pkldoc:catchOrNull()[pkl:test] methods now fully evaluate the value returned by the function they are given (https://github.com/apple/pkl/pull/1910[#1910]).
The pkldoc:#catch()[pkl:test] and pkldoc:#catchOrNull()[pkl:test] methods now fully evaluate the value returned by the function they are given (https://github.com/apple/pkl/pull/1910[#1910]).
Currently, an error nested inside the returned value was not caught.
It surfaced later, when the value was used.
@@ -0,0 +1,47 @@
= Pkl 0.34 Release Notes
:version: 0.34
:version-minor: 0.34.0
:release-date: TBD
:version-next: 0.35.0
:version-next-date: June 2027
link:partial$intro.adoc[role=include]
== Highlights [small]#💖#
News you don't want to miss.
=== XXX
== Noteworthy [small]#🎶#
Ready when you need them.
=== XXX
== Breaking Changes [small]#💔#
Things to watch out for when upgrading.
=== XXX
== Miscellaneous [small]#🐸#
* XXX
* XXX
== Bug Fixes [small]#🐜#
* XXX
* XXX
== Security Fixes [small]#🔒#
The following security vulnerabilities were fixed:
== Contributors [small]#🙏#
We would like to thank the contributors to this release (in alphabetical order):
* XXX
@@ -1,6 +1,11 @@
= Changelog
include::ROOT:partial$component-attributes.adoc[]
[[release-0.34.0]]
== 0.34.0 (UNRELEASED)
xref:0.34.adoc[Release Notes]
[[release-0.33.0]]
== 0.33.0 (2026-11-05)
@@ -2,6 +2,8 @@
The Pkl team aims to release a new version of Pkl in February, June, and October of each year.
* xref:0.34.adoc[0.34 Release Notes]
* xref:0.33.adoc[0.33 Release Notes]
* xref:0.32.adoc[0.32 Release Notes]
* xref:0.31.adoc[0.31 Release Notes]
* xref:0.30.adoc[0.30 Release Notes]
+15 -23
View File
@@ -5,47 +5,39 @@
:version-next: XXX (e.g., 0.10)
:version-next-date: XXX (e.g., July 2018)
include::partial$intro.adoc[]
link:partial$intro.adoc[role=include]
== Highlights [small]#💖#
News you don't want to miss.
.XXX
[%collapsible]
====
XXX
====
=== XXX
== Noteworthy [small]#🎶#
Ready when you need them.
.XXX
[%collapsible]
====
XXX
====
=== XXX
== Breaking Changes [small]#💔#
Things to watch out for when upgrading.
.XXX
[%collapsible]
====
XXX
====
=== XXX
== Work In Progress [small]#🚆#
== Miscellaneous [small]#🐸#
They missed the train but deserve a mention.
* XXX
* XXX
.XXX
[%collapsible]
====
XXX
====
== Bug Fixes [small]#🐜#
* XXX
* XXX
== Security Fixes [small]#🔒#
The following security vulnerabilities were fixed:
== Contributors [small]#🙏#
+1
View File
@@ -42,6 +42,7 @@
* xref:ROOT:evolution-and-roadmap.adoc[Evolution and Roadmap]
* xref:release-notes:index.adoc[Release Notes]
** xref:release-notes:0.34.adoc[0.34 Release Notes]
** xref:release-notes:0.33.adoc[0.33 Release Notes]
** xref:release-notes:0.32.adoc[0.32 Release Notes]
** xref:release-notes:0.31.adoc[0.31 Release Notes]
+1 -1
View File
@@ -1,7 +1,7 @@
# suppress inspection "UnusedProperty" for whole file
group=org.pkl-lang
version=0.33.0
version=0.34.0
# google-java-format requires jdk.compiler exports
org.gradle.jvmargs= \
@@ -52,7 +52,6 @@ data class CliEvaluatorOptions(
* - `"pcf"` (default)
* - `"plist"`
* - `"properties"`
* - `"textproto"` (deprecated in Pkl 0.33)
* - `"xml"`
* - `"yaml"`
*/
@@ -709,8 +709,7 @@ result = someLib.x
assertThat(output).isEqualTo("x: 1\n---\nx: 3\n")
}
// prototext can't render `Dynamic`.
@EnumSource(names = ["TEXTPROTO"], mode = EnumSource.Mode.EXCLUDE)
@EnumSource
@ParameterizedTest(name = "{0} console output ends with newline")
fun `console output ends with newline`(outputFormat: OutputFormat) {
val sourceFiles = listOf(writePklFile("test0.pkl", "foo = 0\nbar=\"Baz\""))
@@ -1,5 +1,5 @@
/*
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 Apple Inc. and the Pkl project authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -22,7 +22,6 @@ public enum OutputFormat {
PCF("pcf"),
PROPERTIES("properties"),
PLIST("plist"),
TEXTPROTO("textproto"),
XML("xml"),
YAML("yaml");
@@ -209,7 +209,6 @@ import org.pkl.core.stdlib.registry.ExternalMemberRegistry;
import org.pkl.core.stdlib.registry.MemberRegistryFactory;
import org.pkl.core.util.CollectionUtils;
import org.pkl.core.util.EconomicMaps;
import org.pkl.core.util.ErrorMessages;
import org.pkl.core.util.IoUtils;
import org.pkl.core.util.Pair;
import org.pkl.parser.Span;
@@ -394,14 +393,20 @@ public class AstBuilder extends AbstractAstBuilder<Object> {
if (currentScope.getConstLevel() == ConstLevel.MODULE) {
for (var scope = currentScope; scope != null; scope = scope.getParent()) {
if (scope.isAnnotationScope()) {
errorMessage = ErrorMessages.create("invalidModuleTypeInAnnotation");
break;
throw exceptionBuilder()
.withSourceSection(sourceSection)
.evalError("invalidModuleTypeInAnnotation")
.build();
} else if (scope.isClassScope()) {
errorMessage = ErrorMessages.create("invalidModuleTypeInClass");
break;
throw exceptionBuilder()
.withSourceSection(sourceSection)
.evalError("invalidModuleTypeInClass")
.build();
} else if (scope.isTypeAliasScope()) {
errorMessage = ErrorMessages.create("invalidModuleTypeInTypeAlias");
break;
throw exceptionBuilder()
.withSourceSection(sourceSection)
.evalError("invalidModuleTypeInTypeAlias")
.build();
}
}
}
@@ -418,18 +423,16 @@ public class AstBuilder extends AbstractAstBuilder<Object> {
}
var message =
scope.isPropertyScope() ? "invalidModuleTypeInProperty" : "invalidModuleTypeInMethod";
errorMessage = ErrorMessages.create(message, scope.getQualifiedName());
break;
throw exceptionBuilder()
.withSourceSection(sourceSection)
.evalError(message, scope.getQualifiedName())
.build();
}
}
}
assert errorMessage != null;
// TODO: when making this an error, update comment on moduleClass in ReferenceTypeNode.eval
VmContext.get(null)
.getLogger()
.warn(
errorMessage + " This will be an error in a future release.",
VmUtils.createStackFrame(sourceSection, null));
// we should always throw a real exception before we get here!
throw PklBugException.unreachableCode();
}
@Override
@@ -35,7 +35,7 @@ import org.pkl.parser.syntax.Module;
@TruffleLanguage.Registration(
id = "pkl",
name = "Pkl",
version = "0.33.0",
version = "0.34.0-dev",
characterMimeTypes = VmLanguage.MIME_TYPE,
contextPolicy = ContextPolicy.SHARED)
@ProvidedTags(PklTags.Expression.class)
@@ -1,663 +0,0 @@
/*
* Copyright © 2024-2026 Apple Inc. and the Pkl project authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.pkl.core.stdlib.protobuf;
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
import com.oracle.truffle.api.dsl.Cached;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.nodes.IndirectCallNode;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.Optional;
import org.jspecify.annotations.Nullable;
import org.pkl.core.DurationUnit;
import org.pkl.core.ast.member.ClassProperty;
import org.pkl.core.ast.member.PropertyTypeNode;
import org.pkl.core.ast.type.TypeNode;
import org.pkl.core.ast.type.TypeNode.BooleanTypeNode;
import org.pkl.core.ast.type.TypeNode.IntSlotTypeNode;
import org.pkl.core.ast.type.TypeNode.IntTypeNode;
import org.pkl.core.ast.type.TypeNode.ListTypeNode;
import org.pkl.core.ast.type.TypeNode.ListingOrMappingTypeNode;
import org.pkl.core.ast.type.TypeNode.ListingTypeNode;
import org.pkl.core.ast.type.TypeNode.MapTypeNode;
import org.pkl.core.ast.type.TypeNode.MappingTypeNode;
import org.pkl.core.ast.type.TypeNode.NonFinalClassTypeNode;
import org.pkl.core.ast.type.TypeNode.NullableTypeNode;
import org.pkl.core.ast.type.TypeNode.ObjectSlotTypeNode;
import org.pkl.core.ast.type.TypeNode.SetTypeNode;
import org.pkl.core.ast.type.TypeNode.StringLiteralTypeNode;
import org.pkl.core.ast.type.TypeNode.StringTypeNode;
import org.pkl.core.ast.type.TypeNode.TypeAliasTypeNode;
import org.pkl.core.ast.type.TypeNode.UnionOfStringLiteralsTypeNode;
import org.pkl.core.ast.type.TypeNode.UnionTypeNode;
import org.pkl.core.ast.type.TypeNode.UnionTypeNodeExploded;
import org.pkl.core.ast.type.VmTypeMismatchException;
import org.pkl.core.runtime.Identifier;
import org.pkl.core.runtime.VmBytes;
import org.pkl.core.runtime.VmClass;
import org.pkl.core.runtime.VmDataSize;
import org.pkl.core.runtime.VmDuration;
import org.pkl.core.runtime.VmDynamic;
import org.pkl.core.runtime.VmExceptionBuilder;
import org.pkl.core.runtime.VmIntSeq;
import org.pkl.core.runtime.VmLanguage;
import org.pkl.core.runtime.VmList;
import org.pkl.core.runtime.VmListing;
import org.pkl.core.runtime.VmMap;
import org.pkl.core.runtime.VmMapping;
import org.pkl.core.runtime.VmNull;
import org.pkl.core.runtime.VmPair;
import org.pkl.core.runtime.VmReference;
import org.pkl.core.runtime.VmRegex;
import org.pkl.core.runtime.VmSet;
import org.pkl.core.runtime.VmType;
import org.pkl.core.runtime.VmTyped;
import org.pkl.core.runtime.VmUtils;
import org.pkl.core.runtime.VmValue;
import org.pkl.core.stdlib.AbstractStringRenderer;
import org.pkl.core.stdlib.ExternalMethod1Node;
import org.pkl.core.stdlib.PklConverter;
import org.pkl.core.util.ArrayCharEscaper;
import org.pkl.core.util.json.JsonEscaper;
public final class RendererNodes {
// Defined here because only relevant to this class.
private static final Identifier SECONDS = Identifier.get("seconds");
private static final Identifier NANOS = Identifier.get("nanos");
private static final ArrayCharEscaper fieldNameEscaper =
ArrayCharEscaper.builder().withEscape('.', "_").withEscape('#', "_").build();
private static final StringTypeNode STRING_TYPE =
new StringTypeNode(VmUtils.unavailableSourceSection());
private static final IntTypeNode INT_TYPE = new IntTypeNode(VmUtils.unavailableSourceSection());
private RendererNodes() {}
public abstract static class renderDocument extends ExternalMethod1Node {
@Specialization
@TruffleBoundary
protected String eval(
VmTyped self, Object value, @Cached("create()") IndirectCallNode callNode) {
var builder = new StringBuilder();
createRenderer(self, builder, callNode).renderDocument(value);
return builder.toString();
}
}
public abstract static class renderValue extends ExternalMethod1Node {
@Specialization
@TruffleBoundary
protected String eval(
VmTyped self, Object value, @Cached("create()") IndirectCallNode callNode) {
var builder = new StringBuilder();
createRenderer(self, builder, callNode).renderValue(value);
return builder.toString();
}
}
public abstract static class renderType extends ExternalMethod1Node {
@SuppressWarnings("unused")
@Specialization
protected String eval(VmTyped self, Object value) {
return renderType(value);
}
}
@TruffleBoundary
private static String renderType(Object value) {
var clazz =
value instanceof VmValue vmValue
? vmValue.getVmClass()
: value instanceof TypeNode typeNode
? typeNode.getType().getVmClass()
: value.getClass();
if (clazz == null) {
throw new VmExceptionBuilder()
.evalError("cannotResolveTypeForProtobuf")
.withProgramValue("Value", value)
.build();
}
var name =
clazz instanceof VmClass vmClass
? vmClass.getSimpleName()
: ((Class<?>) clazz).getSimpleName();
return fieldNameEscaper.escape(name);
}
@TruffleBoundary
private static ProtobufRenderer createRenderer(
VmTyped self, StringBuilder builder, IndirectCallNode callNode) {
var indent = (String) VmUtils.readMember(self, Identifier.INDENT, callNode);
return new ProtobufRenderer(builder, indent, PklConverter.fromRenderer(self, callNode));
}
private static final class ProtobufRenderer extends AbstractStringRenderer {
private final Deque<Identifier> propertyPath = new ArrayDeque<>();
private final Deque<Boolean> wrapperRequirement = new ArrayDeque<>();
private final JsonEscaper jsonEscaper = new JsonEscaper(false);
private @Nullable TypeNode collectionType = null;
public ProtobufRenderer(StringBuilder builder, String indent, PklConverter converter) {
super("Protobuf", builder, indent, converter, true, true);
}
@Override
protected void visitDocument(Object value) {
visit(value);
startNewLine();
}
@Override
protected void visitTopLevelValue(Object value) {
if (value instanceof VmValue && !(value instanceof VmTyped || value instanceof VmDuration)) {
var name = value.getClass().getSimpleName();
if (name.startsWith("Vm")) {
name = name.substring(2);
}
throw new VmExceptionBuilder().evalError("invalidProtobufTopLevelValue", name).build();
}
assert propertyPath.isEmpty() && wrapperRequirement.isEmpty() : "Corrupted traversal stack.";
wrapperRequirement.push(false);
visit(value);
var wrap = wrapperRequirement.pop();
assert !wrap && propertyPath.isEmpty() && wrapperRequirement.isEmpty()
: "Corrupted traversal stack.";
}
@Override
protected void visitRenderDirective(VmTyped value) {
writePropertyName();
// append verbatim
builder.append(VmUtils.readTextProperty(value));
}
@Override
protected void startDynamic(VmDynamic value) {
throw new VmExceptionBuilder()
.evalError("cannotRenderTypeAddConverter", "Dynamic", "Protobuf")
.withProgramValue("Value", value)
.build();
}
@Override
protected void endDynamic(VmDynamic value, boolean isEmpty) {}
@Override
protected void startTyped(VmTyped value) {
wrapperRequirement.push(false);
if (!propertyPath.isEmpty()) {
writePropertyName();
startMessage();
}
}
@Override
protected void endTyped(VmTyped value, boolean isEmpty) {
var popped = wrapperRequirement.pop();
assert !popped : "Corrupted traversal stack.";
if (!propertyPath.isEmpty()) {
endMessage();
}
}
@Override
protected void startListing(VmListing value) {
startWrapper();
}
@Override
protected void endListing(VmListing value, boolean isEmpty) {
endWrapper();
}
@Override
protected void startMapping(VmMapping value) {
startMaplike();
}
@Override
protected void endMapping(VmMapping value, boolean isEmpty) {
endMaplike();
}
private void startMaplike() {
if (requiresWrapper()) {
writePropertyName();
propertyPath.push(Identifier.IT);
startMessage();
}
wrapperRequirement.push(true);
}
private void endMaplike() {
wrapperRequirement.pop();
if (requiresWrapper()) {
endMessage();
var popped = propertyPath.pop();
assert popped == Identifier.IT : "Corrupted traversal stack.";
}
}
@Override
protected void startList(VmList value) {
startWrapper();
}
@Override
protected void endList(VmList value) {
endWrapper();
}
@Override
protected void startSet(VmSet value) {
startWrapper();
}
@Override
protected void endSet(VmSet value) {
endWrapper();
}
@Override
protected void startMap(VmMap value) {
startMaplike();
}
@Override
protected void endMap(VmMap value) {
endMaplike();
}
@Override
protected void visitElement(long index, Object value, boolean isFirst) {
if (requiresWrapper()) {
propertyPath.push(Identifier.IT);
}
var typeName = computeName(collectionType, value);
var addedType = false;
if (typeName != null) {
addedType = true;
writePropertyName();
startMessage();
propertyPath.push(Identifier.get("it_" + typeName));
}
wrapperRequirement.push(true);
visit(value);
var popped = wrapperRequirement.pop();
assert popped : "Corrupted traversal stack.";
if (addedType) {
propertyPath.pop();
endMessage();
}
if (requiresWrapper()) {
propertyPath.pop();
}
}
@Override
protected void visitEntryKey(Object key, boolean isFirst) {
var isDirective = isRenderDirective(key);
var isValidKey =
isDirective || key instanceof Long || key instanceof Boolean || key instanceof String;
if (!isValidKey) {
throw new VmExceptionBuilder()
.evalError("cannotRenderProtobufMapKey")
.withProgramValue("Key", key)
.build();
}
writePropertyName();
startMessage();
startNewLine();
builder.append("key: ");
if (isDirective) {
builder.append(VmUtils.readTextProperty(key));
} else if (key instanceof String string) {
builder.append('"').append(jsonEscaper.escape(string)).append('"');
} else {
builder.append(key);
}
}
@Override
protected void visitEntryValue(Object value) {
propertyPath.push(Identifier.VALUE);
visit(value);
propertyPath.pop();
endMessage();
}
private @Nullable String computeName(@Nullable TypeNode it, Object value) {
if (it instanceof UnionTypeNode unionTypeNode) {
for (var type : unionTypeNode.getElementTypeNodes()) {
if (type instanceof UnionTypeNode) {
var computedName = computeName(type, value);
if (computedName != null) {
return computedName;
}
} else if (type instanceof NonFinalClassTypeNode) {
var clazz = type.getType().getVmClass();
if (value instanceof VmValue vmValue) {
if (clazz == vmValue.getVmClass()) {
return clazz.getSimpleName();
}
}
}
try {
type.execute(VmUtils.createEmptyMaterializedFrame(), value);
} catch (VmTypeMismatchException e) {
continue;
}
return renderType(type);
}
}
return null;
}
@Override
protected void visitProperty(Identifier name, Object value, boolean isFirst) {
var hasWrapper = false;
var hasCollection = false;
var prevCollectionType = collectionType;
Identifier expectedName = null;
propertyPath.push(name);
if (enclosingValue instanceof VmTyped) {
var clazz = value instanceof VmValue vmValue ? vmValue.getVmClass() : value.getClass();
// Compute the name of the field in the wrapper, based on the type, but only if a wrapper
// is required.
var optionalType =
Optional.of(name)
.map(enclosingValue.getVmClass()::getProperty)
.map(ClassProperty::getTypeNode)
.map(PropertyTypeNode::getTypeNode)
.map(this::resolveType);
if (optionalType.isPresent()) {
var type = optionalType.get();
var computedName = computeName(type, value);
if (computedName != null) {
hasWrapper = true;
writePropertyName();
expectedName = Identifier.get("it_" + computedName);
propertyPath.push(expectedName);
startMessage();
} else if (type instanceof ListingOrMappingTypeNode listingOrMappingType) {
hasCollection = true;
collectionType = listingOrMappingType.getValueTypeNode();
} else if (type instanceof ListTypeNode listType) {
hasCollection = true;
collectionType = listType.getElementTypeNode();
} else if (type instanceof MapTypeNode mapType) {
hasCollection = true;
collectionType = mapType.getValueTypeNode();
} else if (type instanceof SetTypeNode setType) {
hasCollection = true;
collectionType = setType.getElementTypeNode();
} else if (type instanceof NonFinalClassTypeNode) {
if (type.getType().getVmClass() != clazz) {
throw new VmExceptionBuilder()
.evalError("cannotRenderSubtypeForProtobuf", type.getType().getVmClass(), clazz)
.build();
}
}
}
}
visit(value);
if (hasWrapper) {
endMessage();
var popped = propertyPath.pop();
assert popped == expectedName : "Corrupted traversal stack.";
} else if (hasCollection) {
collectionType = prevCollectionType;
}
var popped = propertyPath.pop();
assert name == popped : "Corrupted traversal stack.";
}
private void startNewLine() {
if (indent.isEmpty() || builder.isEmpty() || builder.charAt(builder.length() - 1) == '\n')
return;
builder.append('\n');
builder.append(currIndent);
}
private void startWrapper() {
if (requiresWrapper()) {
writePropertyName();
startMessage();
}
}
private void endWrapper() {
if (requiresWrapper()) {
endMessage();
}
}
private boolean requiresWrapper() {
var result = wrapperRequirement.peek();
assert result != null : "Corrupted traversal stack.";
return result;
}
private void startMessage() {
builder.append('{');
increaseIndent();
}
private void endMessage() {
decreaseIndent();
if (builder.charAt(builder.length() - 1) != '{') {
startNewLine();
}
builder.append('}');
}
private void writePropertyName() {
if (propertyPath.isEmpty()) return;
startNewLine();
var name = propertyPath.peek();
assert name != null : "Corrupted traversal stack.";
builder.append(name);
builder.append(": ");
}
@Override
public void visitString(String value) {
writePropertyName();
builder.append('"').append(jsonEscaper.escape(value)).append('"');
}
@Override
public void visitBoolean(Boolean value) {
writePropertyName();
builder.append(value);
}
@Override
public void visitInt(Long value) {
writePropertyName();
builder.append(value);
}
@Override
public void visitFloat(Double value) {
writePropertyName();
builder.append(value);
}
@Override
public void visitDuration(VmDuration value) {
writePropertyName();
var nanos = (long) value.convertTo(DurationUnit.NANOS).getValue() % 1000000000;
var seconds = (long) Math.floor(value.convertTo(DurationUnit.SECONDS).getValue());
startMessage();
propertyPath.push(SECONDS);
writePropertyName();
builder.append(seconds);
propertyPath.pop();
propertyPath.push(NANOS);
writePropertyName();
builder.append(nanos);
propertyPath.pop();
endMessage();
}
@Override
public void visitDataSize(VmDataSize value) {
throw new VmExceptionBuilder()
.evalError("cannotRenderTypeAddConverter", "DataSize", "Protobuf")
.withProgramValue("Value", value)
.build();
}
@Override
public void visitBytes(VmBytes value) {
throw new VmExceptionBuilder()
.evalError("cannotRenderTypeAddConverter", "Bytes", "Protobuf")
.withProgramValue("Value", value)
.build();
}
@Override
public void visitIntSeq(VmIntSeq value) {
writePropertyName();
builder.append(value.toPklString());
}
@Override
public void visitPair(VmPair value) {
writePropertyName();
builder.append(value.toPklString());
}
@Override
public void visitRegex(VmRegex value) {
writePropertyName();
builder.append(value.toPklString());
}
@Override
public void visitNull(VmNull value) {
writePropertyName();
builder.append(value.toPklString());
}
@Override
public void visitReference(VmReference value) {
writePropertyName();
builder.append(value.toPklString());
}
/**
* Resolves types for the purpose of protobuf rendering. "Sees through" nullable types and type
* aliases, simplifies variations of {@code Int} and {@code String} types (literate string
* types, {@code (U)Int_X_} type aliases, etc.), and checks that map key types are legal for
* protobuf.
*/
// TODO: Memoize?
private @Nullable TypeNode resolveType(@Nullable TypeNode type) {
if (type instanceof IntTypeNode
|| type instanceof StringTypeNode
|| type instanceof BooleanTypeNode) {
return type;
} else if (type instanceof IntSlotTypeNode) {
return INT_TYPE;
} else if (type instanceof UnionOfStringLiteralsTypeNode
|| type instanceof StringLiteralTypeNode) {
return STRING_TYPE;
} else if (type instanceof NullableTypeNode nullableType) {
return resolveType(nullableType.getElementTypeNode());
} else if (type instanceof TypeAliasTypeNode typeAliasType) {
return resolveType(
((VmType.AliasType) typeAliasType.getType()).getVmTypeAlias().getTypeNode());
} else if (type instanceof ListingTypeNode listingType) {
var valueType = resolveType(listingType.getValueTypeNode());
assert valueType != null : "Failed to resolve type node.";
type =
requiresWrapper()
? null
: new ListingTypeNode(
VmUtils.unavailableSourceSection(), VmLanguage.get(null), valueType);
return type;
} else if (type instanceof MappingTypeNode mappingType) {
var keyType = resolveType(mappingType.getKeyTypeNode());
if (!(keyType instanceof IntTypeNode
|| keyType instanceof StringTypeNode
|| keyType instanceof BooleanTypeNode)) {
throw new VmExceptionBuilder()
.evalError("cannotRenderProtobufMapKeyType")
.withSourceSection(type.getSourceSection())
.build();
}
var valueType = resolveType(mappingType.getValueTypeNode());
assert valueType != null : "Incomplete or malformed Mapping type";
mappingType =
new MappingTypeNode(
VmUtils.unavailableSourceSection(), VmLanguage.get(null), keyType, valueType);
type = requiresWrapper() ? null : mappingType;
return type;
} else if (type instanceof UnionTypeNode) {
// Some non-obvious normalization going on here:
// - A union type resolves to a union type, unless all element types are string or string
// literal types.
// - All element types are resolved also.
// - All string literal types are combined into a single String case.
var hasString = false;
var elements = new ArrayList<@Nullable TypeNode>();
for (var t : ((UnionTypeNode) type).getElementTypeNodes()) {
var resolved = resolveType(t);
if (resolved instanceof StringLiteralTypeNode || resolved instanceof StringTypeNode) {
if (!hasString) {
hasString = true;
elements.add(new StringTypeNode(VmUtils.unavailableSourceSection()));
}
} else {
elements.add(resolved);
}
}
// Sort classes with lowest-in-hierarchy first, to correctly derive names for oneOf.
elements.sort(
(o1, o2) -> {
if (o1 instanceof ObjectSlotTypeNode && o2 instanceof ObjectSlotTypeNode) {
var t1 = o1.getType().getVmClass();
var t2 = o2.getType().getVmClass();
if (t1 == null || t2 == null) return 0;
return t1.isSubclassOf(t2) ? -1 : t2.isSubclassOf(t1) ? 1 : 0;
}
return 0;
});
type =
hasString && elements.size() == 1
? elements.get(0)
: new UnionTypeNodeExploded(
VmUtils.unavailableSourceSection(), -1, elements.toArray(new TypeNode[0]));
return type;
}
return type;
}
}
}
@@ -1,4 +0,0 @@
@NullMarked
package org.pkl.core.stdlib.protobuf;
import org.jspecify.annotations.NullMarked;
@@ -619,12 +619,6 @@ Cannot render map with non-scalar key as {0}.
cannotRenderObjectWithNonScalarKey=\
Cannot render object with non-scalar key as {0}.
cannotRenderProtobufMapKey=\
Cannot render map with a non-scalar, floating point or byte array key.
cannotRenderProtobufMapKeyType=\
Cannot render map with a non-scalar, floating point or byte array key type.
cannotRenderObjectWithElementsAndOtherMembers=\
Cannot render object with both elements and properties/entries as {0}.
@@ -759,17 +753,6 @@ The top-level value of an XML property list must have type `Typed`, `Dynamic`, `
invalidPropertiesTopLevelValue=\
The top-level value of a Java properties file must have type `Typed`, `Dynamic`, `Mapping`, or `Map`, but got type `{0}`.
invalidProtobufTopLevelValue=\
The top-level value of a protobuf file must have type `Typed`, but got type `{0}`.
cannotResolveTypeForProtobuf=\
Failed to resolve type required for rendering protobuf.\n\
\n\
Consider adding a type annotation.
cannotRenderSubtypeForProtobuf=\
Cannot render subtype {0} of specified type {1} in protobuf.
cannotExportValue=\
A value of type `{0}` cannot be exported.
@@ -1 +0,0 @@
typealias MyModule = module
@@ -1,265 +0,0 @@
amends "../snippetTest.pkl"
import "pkl:protobuf"
local renderer = new protobuf.Renderer {}
local function renderValue(it: Any): String =
renderer.renderValue(it)
/// For testing inheritance; [Foo] is the _base_ class.
local open class Foo {
foo: String
}
/// For testing inheritance; [Bar] is the _derived_ class.
local class Bar extends Foo {
foo = "Bar"
}
/// For testing the rendering of types inside a `VmTyped`.
local class Baz {
foo: Foo
bar: Bar
foos: Listing<Foo>
bars: Mapping<String, Bar>
}
/// For testing how rendering deals with _annotated_ (outer) collection types.
local class CollectionTypes {
emptyList: List<Foo>
list: List<Foo> = List(new Bar {}, new Foo { foo = "test foo" })
emptyListing: Listing<Foo>
listing: Listing<Foo> = new {
new Bar { foo = "listing bar" }
new Foo { foo = "listing foo" }
}
emptyMap: Map<Int, String>
map: Map<Int, Foo> = Map(
1, new Bar { foo = "first" },
2, new Foo { foo = "second" }
)
emptyMapping: Mapping<Int, Bar>
mapping: String =
module.catch(() ->
renderValue(new Mapping<Foo, Bar> {
[new Foo { foo = "key foo" }] = new Bar { foo = "value bar" }
})
)
emptySet: Set<Foo>
set: Set<Foo> = Set(
new Bar { foo = "setOne" },
new Bar { foo = "setTwo" }
)
mappingWithUnannotatedValueType: Mapping<String, Listing> = new {
["some"] {
new Bar {}
new Bar {}
}
}
}
/// For testing _admissable_ mapping key types.
local class MappingKeys {
string: Mapping<String, Bar>
long: Mapping<Int, Bar>
int: Mapping<Int32, Bar>
short: Mapping<Int16, Bar>
boolean: Mapping<Boolean, Bar>
}
/// For testing that using _inadmissable_ mapping key types does indeed throw.
local class InvalidMappingKey {
foo: Mapping<Bar, Bar>
}
local typealias StringLiteralUnion
= *"Qux"
| "quux"
| "QUUX"
local typealias OpenEndedStringUnion
= *"corge"
| String // Not a union of string literals, although fully String-y.
local typealias HeterogeneousUnion
= "Grault"
| "GRAULT"
| Int
| Foo
local typealias SynonymPureEnum = StringLiteralUnion
local class TypeAliasBehavior {
doubleAlias: SynonymPureEnum
}
local class StringLiteralUnionBehavior {
theProperty: StringLiteralUnion
}
local class OpenEndedStringUnionBehavior {
theProperty: OpenEndedStringUnion
}
local class HeterogeneousUnionBehavior {
theHeterogeneousUnion: Listing<HeterogeneousUnion>
}
local class HeterogeneousUnionBehaviorX {
theHeterogeneousUnion: HeterogeneousUnion
}
local class InvalidUnionBehavior {
myMapping: Mapping<HeterogeneousUnion, Int> = new {
[5] = 5
}
}
local class DynamicBehavior {
myDynamic: Dynamic
}
local class DurationBehavior {
myDuration: Duration = 42.ns
}
local class DataSizeBehavior {
myDataSize: DataSize
}
local class SubtypingBehavior {
myFoo: Foo
myFooOrBar: (Foo|Bar)?
}
examples {
["Rendering primitive values"] {
for (v in new Listing {
true
false
-42 as Int8
-42 as Int16
-42 as Int32
-42 as Int
42 as UInt8
42 as UInt16
42 as UInt32
42 as UInt
-13.37 as Float
-13.37 as Number
13.37 as Number
-42 as Number
42 as Number
"Hello world"
10.min
2.ms
120.ns
5.s + 120.ns
}) {
renderValue(v)
}
}
["Collection types"] {
renderValue(new CollectionTypes {})
}
["Typed objects rendered as protobuf.ProtoMessage"] {
renderValue(new Foo { foo = "new" })
renderValue(new Bar {})
renderValue(new Bar { foo = "Baz" })
renderValue(
new Baz {
foo {
foo = "FOO"
}
foos {
foo
outer.bar
}
bars {
["default"] {}
["amended"] {
foo = "Bars"
}
}
}
)
renderValue(new DurationBehavior {})
}
["Unsupported types"] {
module.catch(() -> throw(renderValue(new DynamicBehavior {})))
module.catch(() -> throw(renderValue(new DataSizeBehavior { myDataSize = 10.kb })))
}
["Types not supported at top-level"] {
module.catch(() -> throw(renderValue(Map(3,4))))
module.catch(() -> throw(renderValue(new Mapping {[1] = 2})))
}
["Keys in maps"] {
renderValue(new MappingKeys {
string {
["Hello world"] {}
}
long {
[1337] {}
}
int {
[42] {}
}
short {
[1] {}
}
boolean {
[false] {}
}
})
module.catch(() -> throw(renderValue(new InvalidMappingKey {
foo {
[new Bar {}] {}
}
})))
}
["typealiases"] {
renderValue(new TypeAliasBehavior {})
}
["unions"] {
renderValue(new StringLiteralUnionBehavior {})
renderValue(new OpenEndedStringUnionBehavior {})
renderValue(new HeterogeneousUnionBehaviorX {
theHeterogeneousUnion = "Grault"
})
renderValue(new HeterogeneousUnionBehavior {
theHeterogeneousUnion {
"Grault"
0
new Bar {}
}
})
module.catch(() -> renderValue(new InvalidUnionBehavior {}))
}
["subtypes"] {
renderValue(new SubtypingBehavior {
myFoo = new Foo { foo = "renders" }
})
module.catch(() ->
renderValue(new SubtypingBehavior {
myFoo = new Bar { foo = "shouldn't render" }
})
)
renderValue(new SubtypingBehavior {
myFoo = new Foo { foo = "renders" }
myFooOrBar = new Bar { foo = "also renders" }
})
}
}
@@ -1,75 +0,0 @@
amends "../snippetTest.pkl"
import "pkl:protobuf"
local renderer = new protobuf.Renderer {}
local class NestedStructures {
plainString: String = "plain string"
nestedListing: Listing<Listing<String>>
nestedListing2: Listing<Listing<Listing<Listing<String>>>>
nestedMapping: Mapping<String, Mapping<Int, Boolean>>
listingInMapping: Mapping<String, Listing<String>>
mappingInListing: Listing<Mapping<Int, Boolean>>
nestedList: List<List<String>>
nestedMap: Map<String, Map<Int, Boolean>>
}
examples {
["some"] {
renderer.renderDocument(new NestedStructures {
nestedListing {
new {
"foo"
"bar"
}
new {
"baz"
"qux"
}
}
nestedListing2 {
new {
new {
new {
"foo"
"bar"
"baz"
}
}
}
}
nestedMapping {
["quux"] {
[42] = true
[1337] = false
}
["corge"] {
[0] = false
}
}
listingInMapping {
["grault"] {
"grault1"
"grault2"
}
["garply"] {
"garply1"
}
["waldo"] {}
}
mappingInListing {
new {
[-1] = false
[1] = true
}
new {
[-2] = true
[2] = false
}
}
nestedList = List(List("pigeon", "plugh"), List(), List("xyzzy"))
nestedMap = Map("thud", Map(), "wibble", Map(1, false, 2, true), "wobble", Map(0, false))
})
}
}
@@ -1,28 +0,0 @@
import "pkl:protobuf"
import ".../input-helper/api/annotationConverter.pkl"
class Comment extends Annotation
@protobuf.Property { name = "FOO" }
foo: String = "a"
@annotationConverter.LineComment { text = "bar" }
bar: String = "b"
baz: Nested
class Nested {
@annotationConverter.LineComment { text = "qux" }
qux: String = "c"
quux: String = "c"
}
output {
renderer = new protobuf.Renderer {
convertPropertyTransformers {
[annotationConverter.LineComment] { prefix = " # " }
}
}
}
@@ -2,7 +2,6 @@ amends ".../snippetTest.pkl"
import "pkl:xml"
import "pkl:jsonnet"
import "pkl:protobuf"
examples {
for (format, renderer in new Mapping {
@@ -11,7 +10,6 @@ examples {
["jsonnet"] = new jsonnet.Renderer {}
["plist"] = new PListRenderer {}
["properties"] = new PropertiesRenderer {}
["textproto"] = new protobuf.Renderer {}
["xml"] = new xml.Renderer {}
["yaml"] = new YamlRenderer {}
}) {
@@ -23,9 +21,6 @@ examples {
listing = null
mapping = null
}
when (format == "textproto") {
dynamic = null
}
})
renderer.renderDocument(new RenderDirective { text = #"✅\❌ /-#;)<>"# })
}
@@ -2,13 +2,6 @@ amends ".../snippetTest.pkl"
import "pkl:xml"
import "pkl:jsonnet"
import "pkl:protobuf"
local class TypedTestCase {
property: String
elements: Listing<String>
entries: Mapping<String, String>
}
examples {
for (format, renderer in new Mapping {
@@ -26,16 +19,6 @@ examples {
[Listing] = (it: Listing) -> it.join(",")
}
} |> converters
["textproto"] = new protobuf.Renderer {
converters {
[Dynamic] = (it) ->
(it) {
elements = it.elements.toList().toListing()
entries = it.entries.toMap().toMapping()
}.toTyped(TypedTestCase)
[String] = (it) -> new RenderDirective { text = "(\(it))"}
}
}
["xml"] = new xml.Renderer {} |> converters
["yaml"] = new YamlRenderer {} |> converters
}) {
@@ -18,26 +18,8 @@ res6a: module = res6[0]
function fun(m: module): List<module> = List((m) { x = 2 })
class Bad {
res7: module = "abc"
res8: module = new Person {}
res9: module? = new Person {}
res10: List<module> = List(new Person {})
}
class Person
res7 = test.catch(() -> new Bad {}.res7)
res8 = test.catch(() -> new Bad {}.res8)
res9 = test.catch(() -> new Bad {}.res9)
res10 = test.catch(() -> new Bad {}.res10)
output {
// force eval but don't render to prevent recursion
value =
@@ -48,9 +30,5 @@ output {
let (r5 = res5)
let (r6 = res6)
let (r6a = res6a)
let (r7 = res7)
let (r8 = res8)
let (r9 = res9)
let (r10 = res10)
new Dynamic { result = "ok" }
}
@@ -20,26 +20,8 @@ res6a: module = res6[0]
function fun(m: module): List<module> = List((m) { x = 2 })
class Bad {
res7: module = "abc"
res8: module = new Person {}
res9: module? = new Person {}
res10: List<module> = List(new Person {})
}
class Person
res7 = test.catch(() -> new Bad {}.res7)
res8 = test.catch(() -> new Bad {}.res8)
res9 = test.catch(() -> new Bad {}.res9)
res10 = test.catch(() -> new Bad {}.res10)
output {
// force eval but don't render to prevent recursion
value =
@@ -50,9 +32,5 @@ output {
let (r5 = res5)
let (r6 = res6)
let (r6a = res6a)
let (r7 = res7)
let (r8 = res8)
let (r9 = res9)
let (r10 = res10)
new Dynamic { result = "ok" }
}
@@ -1,21 +0,0 @@
typealias Foo = module
@Baz { valid = true is module }
class Bar {
baz: module
}
class Baz extends Annotation {
valid: Boolean
}
const qux = true is module
const function quux() = true is module
const corge = new {
grault {
garply = true is module
}
}
hidden const waldo = (x: module) -> true
@@ -0,0 +1 @@
typealias Foo = module
@@ -0,0 +1,6 @@
@Baz { valid = true is module }
class Bar
class Baz extends Annotation {
valid: Boolean
}
@@ -0,0 +1,3 @@
class Bar {
baz: module
}
@@ -0,0 +1 @@
const qux = true is module
@@ -0,0 +1 @@
const function quux() = true is module
@@ -0,0 +1,5 @@
const corge = new {
grault {
garply = true is module
}
}
@@ -0,0 +1 @@
hidden const waldo = (x: module) -> true
@@ -4,8 +4,6 @@ import ".../input-helper/types/moduleTypeProperty.pkl"
class ModuleSubclass extends moduleTypeProperty {
x = 2
hidden mod2: module
mod2x = mod2.x
}
x = -1
@@ -1,3 +0,0 @@
import "../../input-helper/types/typeAliasModule.pkl"
res: typeAliasModule = module
@@ -1,214 +0,0 @@
examples {
["Rendering primitive values"] {
"true"
"false"
"-42"
"-42"
"-42"
"-42"
"42"
"42"
"42"
"42"
"-13.37"
"-13.37"
"13.37"
"-42"
"42"
"\"Hello world\""
"""
{
seconds: 600
nanos: 0
}
"""
"""
{
seconds: 0
nanos: 2000000
}
"""
"""
{
seconds: 0
nanos: 120
}
"""
"""
{
seconds: 5
nanos: 120
}
"""
}
["Collection types"] {
"""
list: {
foo: "Bar"
}
list: {
foo: "test foo"
}
listing: {
foo: "listing bar"
}
listing: {
foo: "listing foo"
}
map: {
key: 1
value: {
foo: "first"
}
}
map: {
key: 2
value: {
foo: "second"
}
}
mapping: "Cannot call method `renderValue` from here because it is not `const`."
set: {
foo: "setOne"
}
set: {
foo: "setTwo"
}
mappingWithUnannotatedValueType: {
key: "some"
value: {
it: {
foo: "Bar"
}
it: {
foo: "Bar"
}
}
}
"""
}
["Typed objects rendered as protobuf.ProtoMessage"] {
"foo: \"new\""
"foo: \"Bar\""
"foo: \"Baz\""
"""
foo: {
foo: "FOO"
}
bar: {
foo: "Bar"
}
foos: {
foo: "FOO"
}
foos: {
foo: "Bar"
}
bars: {
key: "default"
value: {
foo: "Bar"
}
}
bars: {
key: "amended"
value: {
foo: "Bars"
}
}
"""
"""
myDuration: {
seconds: 0
nanos: 42
}
"""
}
["Unsupported types"] {
"Cannot render value of type `Dynamic` as Protobuf. Value: new Dynamic {}"
"Cannot render value of type `DataSize` as Protobuf. Value: 10.kb"
}
["Types not supported at top-level"] {
"The top-level value of a protobuf file must have type `Typed`, but got type `Map`."
"The top-level value of a protobuf file must have type `Typed`, but got type `Mapping`."
}
["Keys in maps"] {
"""
string: {
key: "Hello world"
value: {
foo: "Bar"
}
}
long: {
key: 1337
value: {
foo: "Bar"
}
}
int: {
key: 42
value: {
foo: "Bar"
}
}
short: {
key: 1
value: {
foo: "Bar"
}
}
boolean: {
key: false
value: {
foo: "Bar"
}
}
"""
"Cannot render map with a non-scalar, floating point or byte array key type."
}
["typealiases"] {
"doubleAlias: \"Qux\""
}
["unions"] {
"theProperty: \"Qux\""
"theProperty: \"corge\""
"""
theHeterogeneousUnion: {
it_String: "Grault"
}
"""
"""
theHeterogeneousUnion: {
it_String: "Grault"
}
theHeterogeneousUnion: {
it_Int: 0
}
theHeterogeneousUnion: {
it_Foo: {
foo: "Bar"
}
}
"""
"Cannot render map with a non-scalar, floating point or byte array key type."
}
["subtypes"] {
"""
myFoo: {
foo: "renders"
}
"""
"Cannot render subtype protobuf#Foo of specified type protobuf#Bar in protobuf."
"""
myFoo: {
foo: "renders"
}
myFooOrBar: {
it_Bar: {
foo: "also renders"
}
}
"""
}
}
@@ -1,118 +0,0 @@
examples {
["some"] {
"""
plainString: "plain string"
nestedListing: {
it: "foo"
it: "bar"
}
nestedListing: {
it: "baz"
it: "qux"
}
nestedListing2: {
it: {
it: {
it: "foo"
it: "bar"
it: "baz"
}
}
}
nestedMapping: {
key: "quux"
value: {
it: {
key: 42
value: true
}
it: {
key: 1337
value: false
}
}
}
nestedMapping: {
key: "corge"
value: {
it: {
key: 0
value: false
}
}
}
listingInMapping: {
key: "grault"
value: {
it: "grault1"
it: "grault2"
}
}
listingInMapping: {
key: "garply"
value: {
it: "garply1"
}
}
listingInMapping: {
key: "waldo"
value: {}
}
mappingInListing: {
it: {
key: -1
value: false
}
it: {
key: 1
value: true
}
}
mappingInListing: {
it: {
key: -2
value: true
}
it: {
key: 2
value: false
}
}
nestedList: {
it: "pigeon"
it: "plugh"
}
nestedList: {}
nestedList: {
it: "xyzzy"
}
nestedMap: {
key: "thud"
value: {}
}
nestedMap: {
key: "wibble"
value: {
it: {
key: 1
value: false
}
it: {
key: 2
value: true
}
}
}
nestedMap: {
key: "wobble"
value: {
it: {
key: 0
value: false
}
}
}
"""
}
}
@@ -1,6 +0,0 @@
FOO: "a"
bar: "b" # bar
baz: {
qux: "c" # qux
quux: "c"
}
@@ -176,37 +176,6 @@ examples {
"""
"✅\\❌ /-#;)<>"
}
["textproto"] {
"""
1"2
3\t4'
"""
"+* /\\-;)❌#✅<>"
"""
directiveProperty: ✅/&\\;)*❌
normalProperty: 42
listing: "foo"
listing: 💰
listing: "baz"
mapping: {
key: "key"
value: "value"
}
mapping: {
key: 🔑
value: 42
}
mapping: {
key: "other"
value: 💰
}
"""
"""
✅\\❌ /-#;)<>
"""
}
["xml"] {
"""
1"2
@@ -79,22 +79,6 @@ examples {
"""
}
["textproto"] {
"""
property: (value)
elements: (element1)
elements: (element2)
entries: {
key: (key1)
value: (value1)
}
entries: {
key: (key2)
value: (value2)
}
"""
}
["xml"] {
"""
<?xml version="1.0" encoding="UTF-8"?>
@@ -20,7 +20,6 @@ pkl:net
pkl:pklbinary
pkl:platform
pkl:Project
pkl:protobuf
pkl:ref
pkl:reflect
pkl:release
@@ -1,5 +0,0 @@
result = "ok"
pkl: WARN: Cannot reference `module` type within a class body. This will be an error in a future release. (file:///$snippetsDir/input/types/currentModuleType1.pkl)
pkl: WARN: Cannot reference `module` type within a class body. This will be an error in a future release. (file:///$snippetsDir/input/types/currentModuleType1.pkl)
pkl: WARN: Cannot reference `module` type within a class body. This will be an error in a future release. (file:///$snippetsDir/input/types/currentModuleType1.pkl)
pkl: WARN: Cannot reference `module` type within a class body. This will be an error in a future release. (file:///$snippetsDir/input/types/currentModuleType1.pkl)
@@ -0,0 +1 @@
result = "ok"
@@ -1,5 +0,0 @@
result = "ok"
pkl: WARN: Cannot reference `module` type within a class body. This will be an error in a future release. (file:///$snippetsDir/input/types/currentModuleType2.pkl)
pkl: WARN: Cannot reference `module` type within a class body. This will be an error in a future release. (file:///$snippetsDir/input/types/currentModuleType2.pkl)
pkl: WARN: Cannot reference `module` type within a class body. This will be an error in a future release. (file:///$snippetsDir/input/types/currentModuleType2.pkl)
pkl: WARN: Cannot reference `module` type within a class body. This will be an error in a future release. (file:///$snippetsDir/input/types/currentModuleType2.pkl)
@@ -0,0 +1 @@
result = "ok"
@@ -1,5 +0,0 @@
result = "ok"
pkl: WARN: Cannot reference `module` type within a class body. This will be an error in a future release. (file:///$snippetsDir/input/types/currentModuleType2.pkl)
pkl: WARN: Cannot reference `module` type within a class body. This will be an error in a future release. (file:///$snippetsDir/input/types/currentModuleType2.pkl)
pkl: WARN: Cannot reference `module` type within a class body. This will be an error in a future release. (file:///$snippetsDir/input/types/currentModuleType2.pkl)
pkl: WARN: Cannot reference `module` type within a class body. This will be an error in a future release. (file:///$snippetsDir/input/types/currentModuleType2.pkl)
@@ -0,0 +1 @@
result = "ok"
@@ -1,13 +0,0 @@
qux = false
corge {
grault {
garply = false
}
}
pkl: WARN: Cannot reference `module` type within an annotation body. This will be an error in a future release. (file:///$snippetsDir/input/types/currentModuleType4.pkl)
pkl: WARN: Cannot reference `module` type within a class body. This will be an error in a future release. (file:///$snippetsDir/input/types/currentModuleType4.pkl)
pkl: WARN: Cannot reference `module` type within a type alias body. This will be an error in a future release. (file:///$snippetsDir/input/types/currentModuleType4.pkl)
pkl: WARN: Cannot reference `module` type from const property `currentModuleType4#qux`. This will be an error in a future release. (file:///$snippetsDir/input/types/currentModuleType4.pkl)
pkl: WARN: Cannot reference `module` type from const property `currentModuleType4#corge`. This will be an error in a future release. (file:///$snippetsDir/input/types/currentModuleType4.pkl)
pkl: WARN: Cannot reference `module` type from const property `currentModuleType4#waldo`. This will be an error in a future release. (file:///$snippetsDir/input/types/currentModuleType4.pkl)
pkl: WARN: Cannot reference `module` type from const method `currentModuleType4#quux`. This will be an error in a future release. (file:///$snippetsDir/input/types/currentModuleType4.pkl)
@@ -0,0 +1,6 @@
–– Pkl Error ––
Cannot reference `module` type within a type alias body.
x | typealias Foo = module
^^^^^^
at currentModuleType4a#Foo (file:///$snippetsDir/input/types/currentModuleType4a.pkl)
@@ -0,0 +1,6 @@
–– Pkl Error ––
Cannot reference `module` type within an annotation body.
x | @Baz { valid = true is module }
^^^^^^
at currentModuleType4b#Bar.valid (file:///$snippetsDir/input/types/currentModuleType4b.pkl)
@@ -0,0 +1,6 @@
–– Pkl Error ––
Cannot reference `module` type within a class body.
x | baz: module
^^^^^^
at currentModuleType4c#Bar.baz (file:///$snippetsDir/input/types/currentModuleType4c.pkl)
@@ -0,0 +1,6 @@
–– Pkl Error ––
Cannot reference `module` type from const property `currentModuleType4d#qux`.
x | const qux = true is module
^^^^^^
at currentModuleType4d#qux (file:///$snippetsDir/input/types/currentModuleType4d.pkl)
@@ -0,0 +1,6 @@
–– Pkl Error ––
Cannot reference `module` type from const method `currentModuleType4e#quux`.
x | const function quux() = true is module
^^^^^^
at currentModuleType4e#quux (file:///$snippetsDir/input/types/currentModuleType4e.pkl)
@@ -0,0 +1,6 @@
–– Pkl Error ––
Cannot reference `module` type from const property `currentModuleType4f#corge`.
x | garply = true is module
^^^^^^
at currentModuleType4f#corge.grault.garply (file:///$snippetsDir/input/types/currentModuleType4f.pkl)
@@ -0,0 +1,6 @@
–– Pkl Error ––
Cannot reference `module` type from const property `currentModuleType4g#waldo`.
x | hidden const waldo = (x: module) -> true
^^^^^^
at currentModuleType4g#waldo.<function#1> (file:///$snippetsDir/input/types/currentModuleType4g.pkl)
@@ -13,7 +13,5 @@ res3 {
x = 2
y = 2
modName = "currentModuleType6#ModuleSubclass"
mod2x = -1
}
res4 = "Expected value of type `currentModuleType6#ModuleSubclass`, but got type `moduleTypeProperty`. Value: new moduleTypeProperty { x = ?; y = ?; modName = ? }"
pkl: WARN: Cannot reference `module` type within a class body. This will be an error in a future release. (file:///$snippetsDir/input/types/currentModuleType6.pkl)
@@ -1,16 +0,0 @@
pkl: WARN: Cannot reference `module` type within a type alias body. This will be an error in a future release. (file:///$snippetsDir/input-helper/types/typeAliasModule.pkl)
–– Pkl Error ––
Expected value of type `typeAliasModule`, but got type `typeAlias6`.
Value: new typeAlias6 { res = ? }
x | res: typeAliasModule = module
^^^^^^^^^^^^^^^
at typeAlias6#res (file:///$snippetsDir/input/types/typeAlias6.pkl)
xxx | renderer.renderDocument(value)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
at pkl.base#Module.output.text (pkl:base)
xxx | if (renderer is BytesRenderer) renderer.renderDocument(value) else text.encodeToBytes("UTF-8")
^^^^
at pkl.base#Module.output.bytes (pkl:base)
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 Apple Inc. and the Pkl project authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -30,7 +30,6 @@ class ReflectModuleTest {
"pkl:json",
"pkl:jsonnet",
"pkl:math",
"pkl:protobuf",
"pkl:reflect",
"pkl:settings",
"pkl:shell",
@@ -1,26 +0,0 @@
start_timestamp_ms: 0
end_timestamp_ms: 100
people: {
key: "Pigeon"
value: {
name: "Pigeon"
profile: {
isExtinct: false
}
fictional: true
height: 1.77
hobbies: "cooing"
role: Lead
}
}
people: {
key: "Parrot"
value: {
name: "Parrot"
fictional: true
height: 1.76
hobbies: "singing"
role: Lead
}
}
owner: "Pigeon"
@@ -29,9 +29,9 @@ class Foo {
x5: String|moduleTypes1|Int
x6: module
x6: this
x7: List<module>
x7: List<this>
x8: String|module|Int
x8: String|this|Int
}
@@ -108,7 +108,7 @@
<div class="member-modifiers"></div>
</div>
<div class="member-main">
<div class="member-signature"><span class="name-decl">x6</span>: module<a class="member-source-link" href="https://example.com/package1/moduleTypes2.pkl#L123-L456">Source</a></div>
<div class="member-signature"><span class="name-decl">x6</span>: this<a class="member-source-link" href="https://example.com/package1/moduleTypes2.pkl#L123-L456">Source</a></div>
</div>
</div>
</li>
@@ -119,7 +119,7 @@
<div class="member-modifiers"></div>
</div>
<div class="member-main">
<div class="member-signature"><span class="name-decl">x7</span>: <a href="https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/base/List.html" class="name-ref">List</a>&lt;module&gt;<a class="member-source-link" href="https://example.com/package1/moduleTypes2.pkl#L123-L456">Source</a></div>
<div class="member-signature"><span class="name-decl">x7</span>: <a href="https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/base/List.html" class="name-ref">List</a>&lt;this&gt;<a class="member-source-link" href="https://example.com/package1/moduleTypes2.pkl#L123-L456">Source</a></div>
</div>
</div>
</li>
@@ -130,7 +130,7 @@
<div class="member-modifiers"></div>
</div>
<div class="member-main">
<div class="member-signature"><span class="name-decl">x8</span>: <a href="https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/base/String.html" class="name-ref">String</a>|module|<a href="https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/base/Int.html" class="name-ref">Int</a><a class="member-source-link" href="https://example.com/package1/moduleTypes2.pkl#L123-L456">Source</a></div>
<div class="member-signature"><span class="name-decl">x8</span>: <a href="https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/base/String.html" class="name-ref">String</a>|this|<a href="https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/base/Int.html" class="name-ref">Int</a><a class="member-source-link" href="https://example.com/package1/moduleTypes2.pkl#L123-L456">Source</a></div>
</div>
</div>
</li>
@@ -1 +1 @@
{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3"},"summary":"Docs for Package 1.","deprecation":"com.package1 is deprecated","sourceCode":"https://example.com/package1/","sourceCodeUrlScheme":"https://example.com/package1%{path}#L%{line}-L%{endLine}","dependencies":[{"ref":{"pkg":"com.package2","pkgUri":null,"version":"4.5.6"}},{"ref":{"pkg":"com.externalpackage","pkgUri":null,"version":"7.8.9"}},{"ref":{"pkg":"pkl","pkgUri":null,"version":"0.24.0"}}],"modules":[{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"Module Containing Spaces"},"summary":"This is a module that has spaces in its name.","moduleClass":{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"Module Containing Spaces","type":"ModuleClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Module"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]}},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"baseModule"},"moduleClass":{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"baseModule","type":"ModuleClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Module"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},"classes":[{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"baseModule","type":"BaseClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]}]},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classAnnotations"},"moduleClass":{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classAnnotations","type":"ModuleClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Module"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},"classes":[{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classAnnotations","type":"AnnotatedClss"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classAnnotations","type":"AnnotatedClssWithExpandableComment"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classAnnotations","type":"AnnotatedClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]}]},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classComments"},"summary":"The greatest breakthrough since ever.","moduleClass":{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classComments","type":"ModuleClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Module"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},"classes":[{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classComments","type":"Comments1"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classComments","type":"Comments2"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},{"ref":{"pkg":Line truncated
{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3"},"summary":"Docs for Package 1.","deprecation":"com.package1 is deprecated","sourceCode":"https://example.com/package1/","sourceCodeUrlScheme":"https://example.com/package1%{path}#L%{line}-L%{endLine}","dependencies":[{"ref":{"pkg":"com.package2","pkgUri":null,"version":"4.5.6"}},{"ref":{"pkg":"com.externalpackage","pkgUri":null,"version":"7.8.9"}},{"ref":{"pkg":"pkl","pkgUri":null,"version":"0.24.0"}}],"modules":[{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"Module Containing Spaces"},"summary":"This is a module that has spaces in its name.","moduleClass":{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"Module Containing Spaces","type":"ModuleClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Module"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]}},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"baseModule"},"moduleClass":{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"baseModule","type":"ModuleClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Module"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},"classes":[{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"baseModule","type":"BaseClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]}]},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classAnnotations"},"moduleClass":{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classAnnotations","type":"ModuleClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Module"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},"classes":[{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classAnnotations","type":"AnnotatedClss"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classAnnotations","type":"AnnotatedClssWithExpandableComment"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classAnnotations","type":"AnnotatedClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]}]},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classComments"},"summary":"The greatest breakthrough since ever.","moduleClass":{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classComments","type":"ModuleClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Module"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},"classes":[{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classComments","type":"Comments1"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classComments","type":"Comments2"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},{"ref":{"pkg":Line truncated
@@ -1 +1 @@
searchData='[{"name":"com.package1.Module Containing Spaces","kind":1,"url":"Module Containing Spaces/index.html"},{"name":"com.package1.baseModule","kind":1,"url":"baseModule/index.html"},{"name":"baseProperty","kind":5,"url":"baseModule/index.html#baseProperty","sig":": unknown","parId":1},{"name":"baseMethod","kind":4,"url":"baseModule/index.html#baseMethod()","sig":"(): unknown","parId":1},{"name":"BaseClass","kind":3,"url":"baseModule/BaseClass.html","parId":1},{"name":"com.package1.classAnnotations","kind":1,"url":"classAnnotations/index.html"},{"name":"AnnotatedClss","kind":3,"url":"classAnnotations/AnnotatedClss.html","parId":5,"deprecated":true,"aka":["OtherName"]},{"name":"AnnotatedClssWithExpandableComment","kind":3,"url":"classAnnotations/AnnotatedClssWithExpandableComment.html","parId":5,"deprecated":true,"aka":["OtherName"]},{"name":"AnnotatedClass","kind":3,"url":"classAnnotations/AnnotatedClass.html","parId":5,"deprecated":true,"aka":["OtherName"]},{"name":"com.package1.classComments","kind":1,"url":"classComments/index.html"},{"name":"Comments1","kind":3,"url":"classComments/Comments1.html","parId":9},{"name":"Comments2","kind":3,"url":"classComments/Comments2.html","parId":9},{"name":"Comments3","kind":3,"url":"classComments/Comments3.html","parId":9},{"name":"Comments4","kind":3,"url":"classComments/Comments4.html","parId":9},{"name":"Comments5","kind":3,"url":"classComments/Comments5.html","parId":9},{"name":"Comments6","kind":3,"url":"classComments/Comments6.html","parId":9},{"name":"Comments7","kind":3,"url":"classComments/Comments7.html","parId":9},{"name":"Comments8","kind":3,"url":"classComments/Comments8.html","parId":9},{"name":"com.package1.classInheritance","kind":1,"url":"classInheritance/index.html"},{"name":"MyClass1","kind":3,"url":"classInheritance/MyClass1.html","parId":18},{"name":"property1","kind":5,"url":"classInheritance/MyClass1.html#property1","sig":": Boolean","parId":19},{"name":"method1","kind":4,"url":"classInheritance/MyClass1.html#method1()","sig":"(arg): Boolean","parId":19},{"name":"MyClass2","kind":3,"url":"classInheritance/MyClass2.html","parId":18},{"name":"property1","kind":5,"url":"classInheritance/MyClass2.html#property1","sig":": Boolean","parId":22},{"name":"property2","kind":5,"url":"classInheritance/MyClass2.html#property2","sig":": String","parId":22},{"name":"method1","kind":4,"url":"classInheritance/MyClass2.html#method1()","sig":"(arg): Boolean","parId":22},{"name":"method2","kind":4,"url":"classInheritance/MyClass2.html#method2()","sig":"(arg): Boolean","parId":22},{"name":"MyClass3","kind":3,"url":"classInheritance/MyClass3.html","parId":18},{"name":"property1","kind":5,"url":"classInheritance/MyClass3.html#property1","sig":": Boolean","parId":27},{"name":"method1","kind":4,"url":"classInheritance/MyClass3.html#method1()","sig":"(arg): Boolean","parId":27},{"name":"MyClass4","kind":3,"url":"classInheritance/MyClass4.html","parId":18},{"name":"property4","kind":5,"url":"classInheritance/MyClass4.html#property4","sig":": String","parId":30},{"name":"method3","kind":4,"url":"classInheritance/MyClass4.html#method3()","sig":"(arg): Boolean","parId":30},{"name":"com.package1.classMethodComments","kind":1,"url":"classMethodComments/index.html"},{"name":"Comments","kind":3,"url":"classMethodComments/Comments.html","parId":33},{"name":"method1","kind":4,"url":"classMethodComments/Comments.html#method1()","sig":"(): Float","parId":34},{"name":"method2","kind":4,"url":"classMethodComments/Comments.html#method2()","sig":"(): Float","parId":34},{"name":"method3","kind":4,"url":"classMethodComments/Comments.html#method3()","sig":"(): Float","parId":34},{"name":"method4","kind":4,"url":"classMethodComments/Comments.html#method4()","sig":"(): Float","parId":34},{"name":"method5","kind":4,"url":"classMethodComments/Comments.html#method5()","sig":"(): Float","parId":34},{"name":"method6","kind":4,"url":"classMethodComments/Comments.html#method6()","sig":"(): Float","parId":34},{"name":"method7","kind":4,"url":"classMethodComments/Comments.html#method7()","sig":"(): Float","parId":34},{"name":"com.package1.classMethodModifiers","kind":1,"url":"classMethodModifiers/index.html"},{"name":"Modifiers","kind":3,"url":"classMethodModifiers/Modifiers.html","parId":42},{"name":"method1","kind":4,"url":"classMethodModifiers/Modifiers.html#method1()","sig":"(arg): Boolean","parId":43},{"name":"com.package1.classMethodTypeAnnotations","kind":1,"url":"classMethodTypeAnnotations/index.html"},{"name":"TypeAnnotations","kind":3,"url":"classMethodTypeAnnotations/TypeAnnotations.html","parId":45},{"name":"method1","kind":4,"url":"classMethodTypeAnnotations/TypeAnnotations.html#method1()","sig":"(): unknown","parId":46},{"name":"method2","kind":4,"url":"classMethodTypeAnnotations/TypeAnnotations.html#method2()","sig":"(arg1): unknown","parId":46},{"name":"method3","kind":4,"url":"classMethodTypeAnnotations/TypeAnnotations.html#method3()","sig":"(arg1, arg2): unknown","parId":46}Line truncated
searchData='[{"name":"com.package1.Module Containing Spaces","kind":1,"url":"Module Containing Spaces/index.html"},{"name":"com.package1.baseModule","kind":1,"url":"baseModule/index.html"},{"name":"baseProperty","kind":5,"url":"baseModule/index.html#baseProperty","sig":": unknown","parId":1},{"name":"baseMethod","kind":4,"url":"baseModule/index.html#baseMethod()","sig":"(): unknown","parId":1},{"name":"BaseClass","kind":3,"url":"baseModule/BaseClass.html","parId":1},{"name":"com.package1.classAnnotations","kind":1,"url":"classAnnotations/index.html"},{"name":"AnnotatedClss","kind":3,"url":"classAnnotations/AnnotatedClss.html","parId":5,"deprecated":true,"aka":["OtherName"]},{"name":"AnnotatedClssWithExpandableComment","kind":3,"url":"classAnnotations/AnnotatedClssWithExpandableComment.html","parId":5,"deprecated":true,"aka":["OtherName"]},{"name":"AnnotatedClass","kind":3,"url":"classAnnotations/AnnotatedClass.html","parId":5,"deprecated":true,"aka":["OtherName"]},{"name":"com.package1.classComments","kind":1,"url":"classComments/index.html"},{"name":"Comments1","kind":3,"url":"classComments/Comments1.html","parId":9},{"name":"Comments2","kind":3,"url":"classComments/Comments2.html","parId":9},{"name":"Comments3","kind":3,"url":"classComments/Comments3.html","parId":9},{"name":"Comments4","kind":3,"url":"classComments/Comments4.html","parId":9},{"name":"Comments5","kind":3,"url":"classComments/Comments5.html","parId":9},{"name":"Comments6","kind":3,"url":"classComments/Comments6.html","parId":9},{"name":"Comments7","kind":3,"url":"classComments/Comments7.html","parId":9},{"name":"Comments8","kind":3,"url":"classComments/Comments8.html","parId":9},{"name":"com.package1.classInheritance","kind":1,"url":"classInheritance/index.html"},{"name":"MyClass1","kind":3,"url":"classInheritance/MyClass1.html","parId":18},{"name":"property1","kind":5,"url":"classInheritance/MyClass1.html#property1","sig":": Boolean","parId":19},{"name":"method1","kind":4,"url":"classInheritance/MyClass1.html#method1()","sig":"(arg): Boolean","parId":19},{"name":"MyClass2","kind":3,"url":"classInheritance/MyClass2.html","parId":18},{"name":"property1","kind":5,"url":"classInheritance/MyClass2.html#property1","sig":": Boolean","parId":22},{"name":"property2","kind":5,"url":"classInheritance/MyClass2.html#property2","sig":": String","parId":22},{"name":"method1","kind":4,"url":"classInheritance/MyClass2.html#method1()","sig":"(arg): Boolean","parId":22},{"name":"method2","kind":4,"url":"classInheritance/MyClass2.html#method2()","sig":"(arg): Boolean","parId":22},{"name":"MyClass3","kind":3,"url":"classInheritance/MyClass3.html","parId":18},{"name":"property1","kind":5,"url":"classInheritance/MyClass3.html#property1","sig":": Boolean","parId":27},{"name":"method1","kind":4,"url":"classInheritance/MyClass3.html#method1()","sig":"(arg): Boolean","parId":27},{"name":"MyClass4","kind":3,"url":"classInheritance/MyClass4.html","parId":18},{"name":"property4","kind":5,"url":"classInheritance/MyClass4.html#property4","sig":": String","parId":30},{"name":"method3","kind":4,"url":"classInheritance/MyClass4.html#method3()","sig":"(arg): Boolean","parId":30},{"name":"com.package1.classMethodComments","kind":1,"url":"classMethodComments/index.html"},{"name":"Comments","kind":3,"url":"classMethodComments/Comments.html","parId":33},{"name":"method1","kind":4,"url":"classMethodComments/Comments.html#method1()","sig":"(): Float","parId":34},{"name":"method2","kind":4,"url":"classMethodComments/Comments.html#method2()","sig":"(): Float","parId":34},{"name":"method3","kind":4,"url":"classMethodComments/Comments.html#method3()","sig":"(): Float","parId":34},{"name":"method4","kind":4,"url":"classMethodComments/Comments.html#method4()","sig":"(): Float","parId":34},{"name":"method5","kind":4,"url":"classMethodComments/Comments.html#method5()","sig":"(): Float","parId":34},{"name":"method6","kind":4,"url":"classMethodComments/Comments.html#method6()","sig":"(): Float","parId":34},{"name":"method7","kind":4,"url":"classMethodComments/Comments.html#method7()","sig":"(): Float","parId":34},{"name":"com.package1.classMethodModifiers","kind":1,"url":"classMethodModifiers/index.html"},{"name":"Modifiers","kind":3,"url":"classMethodModifiers/Modifiers.html","parId":42},{"name":"method1","kind":4,"url":"classMethodModifiers/Modifiers.html#method1()","sig":"(arg): Boolean","parId":43},{"name":"com.package1.classMethodTypeAnnotations","kind":1,"url":"classMethodTypeAnnotations/index.html"},{"name":"TypeAnnotations","kind":3,"url":"classMethodTypeAnnotations/TypeAnnotations.html","parId":45},{"name":"method1","kind":4,"url":"classMethodTypeAnnotations/TypeAnnotations.html#method1()","sig":"(): unknown","parId":46},{"name":"method2","kind":4,"url":"classMethodTypeAnnotations/TypeAnnotations.html#method2()","sig":"(arg1): unknown","parId":46},{"name":"method3","kind":4,"url":"classMethodTypeAnnotations/TypeAnnotations.html#method3()","sig":"(arg1, arg2): unknown","parId":46}Line truncated
@@ -1,8 +1 @@
{
"knownUsages": [
{
"text": "Foo",
"href": "Foo.html"
}
]
}
{}
@@ -108,7 +108,7 @@
<div class="member-modifiers"></div>
</div>
<div class="member-main">
<div class="member-signature"><span class="name-decl">x6</span>: module<a class="member-source-link" href="https://example.com/package1/moduleTypes2.pkl#L123-L456">Source</a></div>
<div class="member-signature"><span class="name-decl">x6</span>: this<a class="member-source-link" href="https://example.com/package1/moduleTypes2.pkl#L123-L456">Source</a></div>
</div>
</div>
</li>
@@ -119,7 +119,7 @@
<div class="member-modifiers"></div>
</div>
<div class="member-main">
<div class="member-signature"><span class="name-decl">x7</span>: <a href="https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/base/List.html" class="name-ref">List</a>&lt;module&gt;<a class="member-source-link" href="https://example.com/package1/moduleTypes2.pkl#L123-L456">Source</a></div>
<div class="member-signature"><span class="name-decl">x7</span>: <a href="https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/base/List.html" class="name-ref">List</a>&lt;this&gt;<a class="member-source-link" href="https://example.com/package1/moduleTypes2.pkl#L123-L456">Source</a></div>
</div>
</div>
</li>
@@ -130,7 +130,7 @@
<div class="member-modifiers"></div>
</div>
<div class="member-main">
<div class="member-signature"><span class="name-decl">x8</span>: <a href="https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/base/String.html" class="name-ref">String</a>|module|<a href="https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/base/Int.html" class="name-ref">Int</a><a class="member-source-link" href="https://example.com/package1/moduleTypes2.pkl#L123-L456">Source</a></div>
<div class="member-signature"><span class="name-decl">x8</span>: <a href="https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/base/String.html" class="name-ref">String</a>|this|<a href="https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/base/Int.html" class="name-ref">Int</a><a class="member-source-link" href="https://example.com/package1/moduleTypes2.pkl#L123-L456">Source</a></div>
</div>
</div>
</li>
@@ -1 +1 @@
{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3"},"summary":"Docs for Package 1.","deprecation":"com.package1 is deprecated","sourceCode":"https://example.com/package1/","sourceCodeUrlScheme":"https://example.com/package1%{path}#L%{line}-L%{endLine}","dependencies":[{"ref":{"pkg":"com.package2","pkgUri":null,"version":"4.5.6"}},{"ref":{"pkg":"com.externalpackage","pkgUri":null,"version":"7.8.9"}},{"ref":{"pkg":"pkl","pkgUri":null,"version":"0.24.0"}}],"modules":[{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"Module Containing Spaces"},"summary":"This is a module that has spaces in its name.","moduleClass":{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"Module Containing Spaces","type":"ModuleClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Module"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]}},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"baseModule"},"moduleClass":{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"baseModule","type":"ModuleClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Module"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},"classes":[{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"baseModule","type":"BaseClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]}]},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classAnnotations"},"moduleClass":{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classAnnotations","type":"ModuleClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Module"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},"classes":[{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classAnnotations","type":"AnnotatedClss"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classAnnotations","type":"AnnotatedClssWithExpandableComment"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classAnnotations","type":"AnnotatedClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]}]},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classComments"},"summary":"The greatest breakthrough since ever.","moduleClass":{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classComments","type":"ModuleClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Module"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},"classes":[{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classComments","type":"Comments1"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classComments","type":"Comments2"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},{"ref":{"pkg":Line truncated
{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3"},"summary":"Docs for Package 1.","deprecation":"com.package1 is deprecated","sourceCode":"https://example.com/package1/","sourceCodeUrlScheme":"https://example.com/package1%{path}#L%{line}-L%{endLine}","dependencies":[{"ref":{"pkg":"com.package2","pkgUri":null,"version":"4.5.6"}},{"ref":{"pkg":"com.externalpackage","pkgUri":null,"version":"7.8.9"}},{"ref":{"pkg":"pkl","pkgUri":null,"version":"0.24.0"}}],"modules":[{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"Module Containing Spaces"},"summary":"This is a module that has spaces in its name.","moduleClass":{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"Module Containing Spaces","type":"ModuleClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Module"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]}},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"baseModule"},"moduleClass":{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"baseModule","type":"ModuleClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Module"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},"classes":[{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"baseModule","type":"BaseClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]}]},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classAnnotations"},"moduleClass":{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classAnnotations","type":"ModuleClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Module"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},"classes":[{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classAnnotations","type":"AnnotatedClss"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classAnnotations","type":"AnnotatedClssWithExpandableComment"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classAnnotations","type":"AnnotatedClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]}]},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classComments"},"summary":"The greatest breakthrough since ever.","moduleClass":{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classComments","type":"ModuleClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Module"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},"classes":[{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classComments","type":"Comments1"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"classComments","type":"Comments2"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},{"ref":{"pkg":Line truncated
@@ -1 +1 @@
searchData='[{"name":"com.package1.Module Containing Spaces","kind":1,"url":"Module Containing Spaces/index.html"},{"name":"com.package1.baseModule","kind":1,"url":"baseModule/index.html"},{"name":"baseProperty","kind":5,"url":"baseModule/index.html#baseProperty","sig":": unknown","parId":1},{"name":"baseMethod","kind":4,"url":"baseModule/index.html#baseMethod()","sig":"(): unknown","parId":1},{"name":"BaseClass","kind":3,"url":"baseModule/BaseClass.html","parId":1},{"name":"com.package1.classAnnotations","kind":1,"url":"classAnnotations/index.html"},{"name":"AnnotatedClss","kind":3,"url":"classAnnotations/AnnotatedClss.html","parId":5,"deprecated":true,"aka":["OtherName"]},{"name":"AnnotatedClssWithExpandableComment","kind":3,"url":"classAnnotations/AnnotatedClssWithExpandableComment.html","parId":5,"deprecated":true,"aka":["OtherName"]},{"name":"AnnotatedClass","kind":3,"url":"classAnnotations/AnnotatedClass.html","parId":5,"deprecated":true,"aka":["OtherName"]},{"name":"com.package1.classComments","kind":1,"url":"classComments/index.html"},{"name":"Comments1","kind":3,"url":"classComments/Comments1.html","parId":9},{"name":"Comments2","kind":3,"url":"classComments/Comments2.html","parId":9},{"name":"Comments3","kind":3,"url":"classComments/Comments3.html","parId":9},{"name":"Comments4","kind":3,"url":"classComments/Comments4.html","parId":9},{"name":"Comments5","kind":3,"url":"classComments/Comments5.html","parId":9},{"name":"Comments6","kind":3,"url":"classComments/Comments6.html","parId":9},{"name":"Comments7","kind":3,"url":"classComments/Comments7.html","parId":9},{"name":"Comments8","kind":3,"url":"classComments/Comments8.html","parId":9},{"name":"com.package1.classInheritance","kind":1,"url":"classInheritance/index.html"},{"name":"MyClass1","kind":3,"url":"classInheritance/MyClass1.html","parId":18},{"name":"property1","kind":5,"url":"classInheritance/MyClass1.html#property1","sig":": Boolean","parId":19},{"name":"method1","kind":4,"url":"classInheritance/MyClass1.html#method1()","sig":"(arg): Boolean","parId":19},{"name":"MyClass2","kind":3,"url":"classInheritance/MyClass2.html","parId":18},{"name":"property1","kind":5,"url":"classInheritance/MyClass2.html#property1","sig":": Boolean","parId":22},{"name":"property2","kind":5,"url":"classInheritance/MyClass2.html#property2","sig":": String","parId":22},{"name":"method1","kind":4,"url":"classInheritance/MyClass2.html#method1()","sig":"(arg): Boolean","parId":22},{"name":"method2","kind":4,"url":"classInheritance/MyClass2.html#method2()","sig":"(arg): Boolean","parId":22},{"name":"MyClass3","kind":3,"url":"classInheritance/MyClass3.html","parId":18},{"name":"property1","kind":5,"url":"classInheritance/MyClass3.html#property1","sig":": Boolean","parId":27},{"name":"method1","kind":4,"url":"classInheritance/MyClass3.html#method1()","sig":"(arg): Boolean","parId":27},{"name":"MyClass4","kind":3,"url":"classInheritance/MyClass4.html","parId":18},{"name":"property4","kind":5,"url":"classInheritance/MyClass4.html#property4","sig":": String","parId":30},{"name":"method3","kind":4,"url":"classInheritance/MyClass4.html#method3()","sig":"(arg): Boolean","parId":30},{"name":"com.package1.classMethodComments","kind":1,"url":"classMethodComments/index.html"},{"name":"Comments","kind":3,"url":"classMethodComments/Comments.html","parId":33},{"name":"method1","kind":4,"url":"classMethodComments/Comments.html#method1()","sig":"(): Float","parId":34},{"name":"method2","kind":4,"url":"classMethodComments/Comments.html#method2()","sig":"(): Float","parId":34},{"name":"method3","kind":4,"url":"classMethodComments/Comments.html#method3()","sig":"(): Float","parId":34},{"name":"method4","kind":4,"url":"classMethodComments/Comments.html#method4()","sig":"(): Float","parId":34},{"name":"method5","kind":4,"url":"classMethodComments/Comments.html#method5()","sig":"(): Float","parId":34},{"name":"method6","kind":4,"url":"classMethodComments/Comments.html#method6()","sig":"(): Float","parId":34},{"name":"method7","kind":4,"url":"classMethodComments/Comments.html#method7()","sig":"(): Float","parId":34},{"name":"com.package1.classMethodModifiers","kind":1,"url":"classMethodModifiers/index.html"},{"name":"Modifiers","kind":3,"url":"classMethodModifiers/Modifiers.html","parId":42},{"name":"method1","kind":4,"url":"classMethodModifiers/Modifiers.html#method1()","sig":"(arg): Boolean","parId":43},{"name":"com.package1.classMethodTypeAnnotations","kind":1,"url":"classMethodTypeAnnotations/index.html"},{"name":"TypeAnnotations","kind":3,"url":"classMethodTypeAnnotations/TypeAnnotations.html","parId":45},{"name":"method1","kind":4,"url":"classMethodTypeAnnotations/TypeAnnotations.html#method1()","sig":"(): unknown","parId":46},{"name":"method2","kind":4,"url":"classMethodTypeAnnotations/TypeAnnotations.html#method2()","sig":"(arg1): unknown","parId":46},{"name":"method3","kind":4,"url":"classMethodTypeAnnotations/TypeAnnotations.html#method3()","sig":"(arg1, arg2): unknown","parId":46}Line truncated
searchData='[{"name":"com.package1.Module Containing Spaces","kind":1,"url":"Module Containing Spaces/index.html"},{"name":"com.package1.baseModule","kind":1,"url":"baseModule/index.html"},{"name":"baseProperty","kind":5,"url":"baseModule/index.html#baseProperty","sig":": unknown","parId":1},{"name":"baseMethod","kind":4,"url":"baseModule/index.html#baseMethod()","sig":"(): unknown","parId":1},{"name":"BaseClass","kind":3,"url":"baseModule/BaseClass.html","parId":1},{"name":"com.package1.classAnnotations","kind":1,"url":"classAnnotations/index.html"},{"name":"AnnotatedClss","kind":3,"url":"classAnnotations/AnnotatedClss.html","parId":5,"deprecated":true,"aka":["OtherName"]},{"name":"AnnotatedClssWithExpandableComment","kind":3,"url":"classAnnotations/AnnotatedClssWithExpandableComment.html","parId":5,"deprecated":true,"aka":["OtherName"]},{"name":"AnnotatedClass","kind":3,"url":"classAnnotations/AnnotatedClass.html","parId":5,"deprecated":true,"aka":["OtherName"]},{"name":"com.package1.classComments","kind":1,"url":"classComments/index.html"},{"name":"Comments1","kind":3,"url":"classComments/Comments1.html","parId":9},{"name":"Comments2","kind":3,"url":"classComments/Comments2.html","parId":9},{"name":"Comments3","kind":3,"url":"classComments/Comments3.html","parId":9},{"name":"Comments4","kind":3,"url":"classComments/Comments4.html","parId":9},{"name":"Comments5","kind":3,"url":"classComments/Comments5.html","parId":9},{"name":"Comments6","kind":3,"url":"classComments/Comments6.html","parId":9},{"name":"Comments7","kind":3,"url":"classComments/Comments7.html","parId":9},{"name":"Comments8","kind":3,"url":"classComments/Comments8.html","parId":9},{"name":"com.package1.classInheritance","kind":1,"url":"classInheritance/index.html"},{"name":"MyClass1","kind":3,"url":"classInheritance/MyClass1.html","parId":18},{"name":"property1","kind":5,"url":"classInheritance/MyClass1.html#property1","sig":": Boolean","parId":19},{"name":"method1","kind":4,"url":"classInheritance/MyClass1.html#method1()","sig":"(arg): Boolean","parId":19},{"name":"MyClass2","kind":3,"url":"classInheritance/MyClass2.html","parId":18},{"name":"property1","kind":5,"url":"classInheritance/MyClass2.html#property1","sig":": Boolean","parId":22},{"name":"property2","kind":5,"url":"classInheritance/MyClass2.html#property2","sig":": String","parId":22},{"name":"method1","kind":4,"url":"classInheritance/MyClass2.html#method1()","sig":"(arg): Boolean","parId":22},{"name":"method2","kind":4,"url":"classInheritance/MyClass2.html#method2()","sig":"(arg): Boolean","parId":22},{"name":"MyClass3","kind":3,"url":"classInheritance/MyClass3.html","parId":18},{"name":"property1","kind":5,"url":"classInheritance/MyClass3.html#property1","sig":": Boolean","parId":27},{"name":"method1","kind":4,"url":"classInheritance/MyClass3.html#method1()","sig":"(arg): Boolean","parId":27},{"name":"MyClass4","kind":3,"url":"classInheritance/MyClass4.html","parId":18},{"name":"property4","kind":5,"url":"classInheritance/MyClass4.html#property4","sig":": String","parId":30},{"name":"method3","kind":4,"url":"classInheritance/MyClass4.html#method3()","sig":"(arg): Boolean","parId":30},{"name":"com.package1.classMethodComments","kind":1,"url":"classMethodComments/index.html"},{"name":"Comments","kind":3,"url":"classMethodComments/Comments.html","parId":33},{"name":"method1","kind":4,"url":"classMethodComments/Comments.html#method1()","sig":"(): Float","parId":34},{"name":"method2","kind":4,"url":"classMethodComments/Comments.html#method2()","sig":"(): Float","parId":34},{"name":"method3","kind":4,"url":"classMethodComments/Comments.html#method3()","sig":"(): Float","parId":34},{"name":"method4","kind":4,"url":"classMethodComments/Comments.html#method4()","sig":"(): Float","parId":34},{"name":"method5","kind":4,"url":"classMethodComments/Comments.html#method5()","sig":"(): Float","parId":34},{"name":"method6","kind":4,"url":"classMethodComments/Comments.html#method6()","sig":"(): Float","parId":34},{"name":"method7","kind":4,"url":"classMethodComments/Comments.html#method7()","sig":"(): Float","parId":34},{"name":"com.package1.classMethodModifiers","kind":1,"url":"classMethodModifiers/index.html"},{"name":"Modifiers","kind":3,"url":"classMethodModifiers/Modifiers.html","parId":42},{"name":"method1","kind":4,"url":"classMethodModifiers/Modifiers.html#method1()","sig":"(arg): Boolean","parId":43},{"name":"com.package1.classMethodTypeAnnotations","kind":1,"url":"classMethodTypeAnnotations/index.html"},{"name":"TypeAnnotations","kind":3,"url":"classMethodTypeAnnotations/TypeAnnotations.html","parId":45},{"name":"method1","kind":4,"url":"classMethodTypeAnnotations/TypeAnnotations.html#method1()","sig":"(): unknown","parId":46},{"name":"method2","kind":4,"url":"classMethodTypeAnnotations/TypeAnnotations.html#method2()","sig":"(arg1): unknown","parId":46},{"name":"method3","kind":4,"url":"classMethodTypeAnnotations/TypeAnnotations.html#method3()","sig":"(arg1, arg2): unknown","parId":46}Line truncated
@@ -1,8 +1 @@
{
"knownUsages": [
{
"text": "Foo",
"href": "Foo.html"
}
]
}
{}
+1 -1
View File
@@ -36,7 +36,7 @@
///
/// Warning: Although this module is ready for initial use,
/// benchmark results may be inaccurate or inconsistent.
@ModuleInfo { minPklVersion = "0.33.0" }
@ModuleInfo { minPklVersion = "0.34.0" }
module pkl.Benchmark
import "pkl:platform" as _platform
+1 -1
View File
@@ -29,7 +29,7 @@
/// // ...
/// }
/// ```
@ModuleInfo { minPklVersion = "0.33.0" }
@ModuleInfo { minPklVersion = "0.34.0" }
open module pkl.Command
import "pkl:Command"
+1 -1
View File
@@ -63,7 +63,7 @@
/// @Deprecated { message = "Use `com.example.Birds.Parrot` instead" }
/// amends "pkl:PackageInfo"
/// ```
@ModuleInfo { minPklVersion = "0.33.0" }
@ModuleInfo { minPklVersion = "0.34.0" }
module pkl.DocPackageInfo
// used by doc comments
+1 -1
View File
@@ -31,7 +31,7 @@
///
/// title = "Title displayed in the header of each page"
/// ```
@ModuleInfo { minPklVersion = "0.33.0" }
@ModuleInfo { minPklVersion = "0.34.0" }
module pkl.DocsiteInfo
import "pkl:reflect"
+1 -1
View File
@@ -15,7 +15,7 @@
//===----------------------------------------------------------------------===//
/// Common settings for Pkl's own evaluator.
@ModuleInfo { minPklVersion = "0.33.0" }
@ModuleInfo { minPklVersion = "0.34.0" }
@Since { version = "0.26.0" }
module pkl.EvaluatorSettings
+1 -1
View File
@@ -64,7 +64,7 @@
/// value = project
/// }
/// ```
@ModuleInfo { minPklVersion = "0.33.0" }
@ModuleInfo { minPklVersion = "0.34.0" }
module pkl.Project
import "pkl:EvaluatorSettings" as EvaluatorSettingsModule
+1 -1
View File
@@ -19,7 +19,7 @@
/// These tools differentiate from [pkl:reflect][reflect] in that they parse Pkl modules, but do not
/// execute any code within these modules.
@Since { version = "0.27.0" }
@ModuleInfo { minPklVersion = "0.33.0" }
@ModuleInfo { minPklVersion = "0.34.0" }
module pkl.analyze
// used by doc comments
+2 -5
View File
@@ -17,7 +17,7 @@
/// Fundamental properties, methods, and classes for writing Pkl programs.
///
/// Members of this module are automatically available in every Pkl module.
@ModuleInfo { minPklVersion = "0.33.0" }
@ModuleInfo { minPklVersion = "0.34.0" }
module pkl.base
import "pkl:json"
@@ -26,7 +26,6 @@ import "pkl:math"
import "pkl:net"
import "pkl:pklbinary"
// noinspection Deprecated
import "pkl:protobuf"
import "pkl:xml"
import "pkl:yaml"
@@ -116,8 +115,6 @@ abstract external class Module {
new PListRenderer {}
else if (format == "properties")
new PropertiesRenderer {}
else if (format == "textproto")
new protobuf.Renderer {}
else if (format == "xml")
new xml.Renderer {}
else if (format == "yaml")
@@ -126,7 +123,7 @@ abstract external class Module {
new pklbinary.Renderer {}
else
throw(
"Unknown output format: `\(format)`. Supported formats are `json`, `jsonnet`, `pcf`, `plist`, `properties`, `textproto`, `xml`, `yaml`, `pkl-binary`."
"Unknown output format: `\(format)`. Supported formats are `json`, `jsonnet`, `pcf`, `plist`, `properties`, `xml`, `yaml`, `pkl-binary`."
)
text =
if (renderer is ValueRenderer)
+1 -1
View File
@@ -15,7 +15,7 @@
//===----------------------------------------------------------------------===//
/// A JSON parser.
@ModuleInfo { minPklVersion = "0.33.0" }
@ModuleInfo { minPklVersion = "0.34.0" }
module pkl.json
/// Annotate properties of classes and modules with this class to override how a [JsonRenderer]
+1 -1
View File
@@ -15,7 +15,7 @@
//===----------------------------------------------------------------------===//
/// A [Jsonnet](https://jsonnet.org) renderer.
@ModuleInfo { minPklVersion = "0.33.0" }
@ModuleInfo { minPklVersion = "0.34.0" }
module pkl.jsonnet
/// Constructs an [ImportStr].
+1 -1
View File
@@ -18,7 +18,7 @@
///
/// Note that some mathematical functions, such as `sign()`, `abs()`, and `round()`,
/// are directly defined in classes [Number], [Int], and [Float].
@ModuleInfo { minPklVersion = "0.33.0" }
@ModuleInfo { minPklVersion = "0.34.0" }
module pkl.math
/// The minimum [Int] value: `-9223372036854775808`.
+1 -1
View File
@@ -15,7 +15,7 @@
//===----------------------------------------------------------------------===//
/// Utilities for networking, like URL parsing.
@ModuleInfo { minPklVersion = "0.33.0" }
@ModuleInfo { minPklVersion = "0.34.0" }
@Since { version = "0.33.0" }
module pkl.net
+1 -1
View File
@@ -28,7 +28,7 @@
/// The `pkl-binary` format uses MessagePack encoding.
/// Its specification is available at
/// <https://pkl-lang.org/main/current/bindings-specification/binary-encoding.html>.
@ModuleInfo { minPklVersion = "0.33.0" }
@ModuleInfo { minPklVersion = "0.34.0" }
module pkl.pklbinary
/// Render values as `pkl-binary`.
+1 -1
View File
@@ -15,7 +15,7 @@
//===----------------------------------------------------------------------===//
/// Information about the platform that the current program runs on.
@ModuleInfo { minPklVersion = "0.33.0" }
@ModuleInfo { minPklVersion = "0.34.0" }
module pkl.platform
/// The platform that the current program runs on.
-66
View File
@@ -1,66 +0,0 @@
//===----------------------------------------------------------------------===//
// Copyright © 2024-2026 Apple Inc. and the Pkl project authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//===----------------------------------------------------------------------===//
/// A renderer for [Protocol Buffers](https://developers.google.com/protocol-buffers).
///
/// WARNING:
/// This module is deprecated, and scheduled for removal without replacement.
/// For rendering into a protobuf wire format, consider rendering to
/// [ProtoJSON](https://protobuf.dev/programming-guides/json/) using [json.Renderer].
@ModuleInfo { minPklVersion = "0.33.0" }
@Deprecated { since = "0.33.0"; message = "Scheduled for removal without replacement" }
module pkl.protobuf
import "pkl:json"
import "pkl:reflect"
/// A renderer for [Protocol Buffers](https://developers.google.com/protocol-buffers).
/// Note: This class is _experimental_ and not ready for production use.
///
/// As of this release, only Protocol Buffers' text format is supported.
///
/// The [Property] annotation can be used to change how a property name renders into Protobuf.
///
/// Example:
/// ```
/// import "pkl:protobuf"
///
/// @protobuf.Property { name = "wing_span" }
/// wingSpan: Int
/// ```
class Renderer extends ValueRenderer {
/// The characters to use for indenting output.
///
/// Defaults to two spaces.
indent: String = " "
external function renderDocument(value: Any): String
external function renderValue(value: Any): String
/// Returns the canonical name for [type].
external function renderType(type: reflect.Type): String
}
/// Annotate properties of classes and modules with this class to override how a [Renderer]
/// interprets a property's name.
@Since { version = "0.31.0" }
class Property extends ConvertProperty {
/// The new name to use for the annotated property when rendered by [Renderer].
name: String
render = (prop, renderer) -> if (renderer is Renderer) Pair(name, prop.value) else prop
}
+1 -1
View File
@@ -25,7 +25,7 @@
/// * CI pipelines
/// * Build graphs
/// * Workflow tools
@ModuleInfo { minPklVersion = "0.33.0" }
@ModuleInfo { minPklVersion = "0.34.0" }
@Since { version = "0.32.0" }
module pkl.ref
+1 -1
View File
@@ -26,7 +26,7 @@
/// - Documentation generators (such as *Pkldoc*)
/// - Code generators (such as *pkl-codegen-java* and *pkl-codegen-kotlin*)
/// - Domain-specific schema validators
@ModuleInfo { minPklVersion = "0.33.0" }
@ModuleInfo { minPklVersion = "0.34.0" }
module pkl.reflect
import "pkl:base"
+1 -1
View File
@@ -15,7 +15,7 @@
//===----------------------------------------------------------------------===//
/// Information about the Pkl release that the current program runs on.
@ModuleInfo { minPklVersion = "0.33.0" }
@ModuleInfo { minPklVersion = "0.34.0" }
module pkl.release
import "pkl:semver"
+1 -1
View File
@@ -15,7 +15,7 @@
//===----------------------------------------------------------------------===//
/// Parsing, comparison, and manipulation of [semantic version](https://semver.org/spec/v2.0.0.html) numbers.
@ModuleInfo { minPklVersion = "0.33.0" }
@ModuleInfo { minPklVersion = "0.34.0" }
module pkl.semver
/// Tells whether [version] is a valid semantic version number.
+1 -1
View File
@@ -28,7 +28,7 @@
/// (dirs separated by `:` on Unix, `;` on Windows).
/// 5. `/etc/xdg/pkl/settings.pkl`
/// 6. `~/.pkl/settings.pkl` (legacy location used by Pkl 0.32 and lower)
@ModuleInfo { minPklVersion = "0.33.0" }
@ModuleInfo { minPklVersion = "0.34.0" }
module pkl.settings
import "pkl:EvaluatorSettings"
+1 -1
View File
@@ -15,7 +15,7 @@
//===----------------------------------------------------------------------===//
/// Utilities for generating shell scripts.
@ModuleInfo { minPklVersion = "0.33.0" }
@ModuleInfo { minPklVersion = "0.34.0" }
module pkl.shell
/// Escapes [str] by enclosing it in single quotes.
+1 -1
View File
@@ -15,7 +15,7 @@
//===----------------------------------------------------------------------===//
/// Utilities for managing Pkl source code.
@ModuleInfo { minPklVersion = "0.33.0" }
@ModuleInfo { minPklVersion = "0.34.0" }
@Since { version = "0.33.0" }
module pkl.syntax
Loaded 100 of 103 files, more files were not shown because too many files have changed in this diff. Show more