mirror of
https://github.com/apple/pkl.git
synced 2026-04-30 12:14:17 +02:00
148 lines
4.0 KiB
Plaintext
148 lines
4.0 KiB
Plaintext
= Pkl 0.31 Release Notes
|
||
:version: 0.31
|
||
:version-minor: 0.XX.0
|
||
:release-date: TBD
|
||
|
||
include::ROOT:partial$component-attributes.adoc[]
|
||
|
||
Pkl {version} was released on {release-date}. +
|
||
[.small]#The latest bugfix release is {version-minor}. (xref:changelog.adoc[All Versions])#
|
||
|
||
The next release (0.XX) is scheduled for ???..
|
||
To see what's coming in the future, follow the {uri-pkl-roadmap}[Pkl Roadmap].
|
||
|
||
Please send feedback and questions to https://github.com/apple/pkl/discussions[GitHub Discussions], or submit an issue on https://github.com/apple/pkl/issues/new[GitHub]. +
|
||
|
||
[small]#Pkl is hosted on https://github.com/apple/pkl[GitHub].
|
||
To get started, follow xref:pkl-cli:index.adoc#installation[Installation].#
|
||
|
||
== Highlights [small]#💖#
|
||
|
||
News you don't want to miss.
|
||
|
||
=== Power Assertions
|
||
|
||
Pkl's test output and error output has been improved with power assertions (https://github.com/apple/pkl/pull/1384[#1384])!
|
||
|
||
Pkl has two places that are effectively assertions.
|
||
These are:
|
||
|
||
* Type constraint expressions
|
||
* Test facts
|
||
|
||
Currently, when these assertions fail, the error message prints the assertion's source section.
|
||
However, this information can sometimes be lacking.
|
||
It tells you what the mechanics of the assertion is, but doesn't tell you _why_ the assertion is failing.
|
||
|
||
For example, here is the current error output of a failing typecheck.
|
||
|
||
[source,text]
|
||
----
|
||
–– Pkl Error ––
|
||
Type constraint `name.endsWith(lastName)` violated.
|
||
Value: new Person { name = "Bub Johnson" }
|
||
|
||
7 | passenger: Person(name.endsWith(lastName)) = new { name = "Bub Johnson" }
|
||
----
|
||
|
||
Just from this error message, we don't know what the last name is supposed to be.
|
||
What is `name` supposed to end with?
|
||
We just know it's some property called `lastName` but, we don't know what it _is_.
|
||
|
||
In Pkl 0.31, the error output becomes:
|
||
|
||
[source,text]
|
||
----
|
||
–– Pkl Error ––
|
||
Type constraint `name.endsWith(lastName)` violated.
|
||
Value: new Person { name = "Bub Johnson" }
|
||
|
||
name.endsWith(lastName)
|
||
│ │ │
|
||
│ false "Smith"
|
||
"Bub Johnson"
|
||
|
||
7 | passenger: Person(name.endsWith(lastName)) = new { name = "Bub Johnson" }
|
||
----
|
||
|
||
Now, we know what the expecation actually is.
|
||
|
||
This type of diagram is also added to test facts.
|
||
When tests fail, Pkl emits a diagram of the expression, and the values produced.
|
||
|
||
For example, given the following test:
|
||
|
||
.math.pkl
|
||
[source,pkl]
|
||
----
|
||
amends "pkl:test"
|
||
|
||
facts {
|
||
local function add(a: Int, b: Int) = a * b
|
||
local function divide(a: Int, b: Int) = a % b
|
||
["math"] {
|
||
add(3, 4) == 7
|
||
divide(8, 2) == 4
|
||
}
|
||
}
|
||
----
|
||
|
||
The error output now includes a power assertion diagram, which helps explain why the test failed.
|
||
|
||
[source,text]
|
||
----
|
||
module math
|
||
facts
|
||
✘ math
|
||
add(3, 4) == 7 (math.pkl:9)
|
||
│ │
|
||
12 false
|
||
divide(8, 2) == 4 (math.pkl:10)
|
||
│ │
|
||
0 false
|
||
|
||
0.0% tests pass [1/1 failed], 0.0% asserts pass [2/2 failed]
|
||
----
|
||
|
||
== Noteworthy [small]#🎶#
|
||
|
||
Ready when you need them.
|
||
|
||
=== Standard Library changes
|
||
|
||
New properties have been added to the standard library (https://github.com/apple/pkl/pull/1396[#1396]).
|
||
|
||
==== Additions to `pkl:base`
|
||
|
||
The following APIs have been added:
|
||
|
||
* link:{uri-stdlib-List}#isNotEmpty[`List.isNotEmpty`]
|
||
* link:{uri-stdlib-Map}#isNotEmpty[`Map.isNotEmpty`]
|
||
* link:{uri-stdlib-Set}#isNotEmpty[`Set.isNotEmpty`]
|
||
* link:{uri-stdlib-Listing}#isNotEmpty[`Listing.isNotEmpty`]
|
||
* link:{uri-stdlib-Mapping}#isNotEmpty[`Mapping.isNotEmpty`]
|
||
* link:{uri-stdlib-String}#isNotEmpty[`String.isNotEmpty`]
|
||
* link:{uri-stdlib-String}#isNotBlank[`String.isNotBlank`]
|
||
|
||
== Breaking Changes [small]#💔#
|
||
|
||
Things to watch out for when upgrading.
|
||
|
||
=== XXX
|
||
|
||
== Miscellaneous [small]#🐸#
|
||
|
||
* Improve formatting of imports to keep surrounding comments (https://github.com/apple/pkl/pull/1424[#1424]).
|
||
|
||
== Bugs fixed [small]#🐜#
|
||
|
||
The following bugs have been fixed.
|
||
|
||
* Incorrect Function.toString() (https://github.com/apple/pkl/issues/1410[#1410]).
|
||
|
||
== Contributors [small]#🙏#
|
||
|
||
We would like to thank the contributors to this release (in alphabetical order):
|
||
|
||
* XXX
|