mirror of https://github.com/kdl-org/kdl.git
86 lines
4.4 KiB
Markdown
86 lines
4.4 KiB
Markdown
# KDL Changelog
|
|
|
|
## 2.0.0 (2024-02-07)
|
|
|
|
### Grammar
|
|
|
|
* Solidus/Forward slash (`/`) is no longer an escaped character.
|
|
* Space (`U+0020`) can now be written into quoted strings with the `\s`
|
|
escape.
|
|
* Single line comments (`//`) can now be immediately followed by a newline.
|
|
* All literal whitespace following a `\` in a string is now discarded.
|
|
* Vertical tabs (`U+000B`) are now considered to be whitespace.
|
|
* The grammar syntax itself has been described, and some confusing definitions
|
|
in the grammar have been fixed accordingly (mostly related to escaped
|
|
characters).
|
|
* `,`, `<`, and `>` are now legal identifier characters. They were previously
|
|
reserved for KQL but this is no longer necessary.
|
|
* Code points under `0x20` (except newline and whitespace code points), code
|
|
points above `0x10FFFF`, Delete control character (`0x7F`), and the [unicode
|
|
"direction control"
|
|
characters](https://www.w3.org/International/questions/qa-bidi-unicode-controls)
|
|
are now completely banned from appearing literally in KDL documents. They
|
|
can now only be represented in regular strings, and there's no facilities to
|
|
represent them in raw strings. This should be considered a security
|
|
improvement.
|
|
* Raw strings no longer require an `r` prefix: they are now specified by using
|
|
`#""#`.
|
|
* Line continuations can be followed by an EOF now, instead of requiring a
|
|
newline (or comment). `node \<EOF>` is now a legal KDL document.
|
|
* `#` is no longer a legal identifier character.
|
|
* `null`, `true`, and `false` are now `#null`, `#true`, and `#false`. Using
|
|
the unprefixed versions of these values is a syntax error.
|
|
* The spec prose has more explicitly stated that whitespace and newlines are
|
|
not valid identifier characters, even though the grammar already expressed
|
|
this.
|
|
* Bare identifiers can now be used as values in Arguments and Properties, and are interpreted as string values.
|
|
* The spec prose now more explicitly states that strings and raw strings can
|
|
be used as type annotations.
|
|
* A statement in the spec prose that said "It is reasonable for an
|
|
implementation to ignore null values altogether when deserializing". This is
|
|
no longer encouraged or desired.
|
|
* Code points have been constrained to [Unicode Scalar
|
|
Values](https://unicode.org/glossary/#unicode_scalar_value) only, including
|
|
values used in string escapes (`\u{}`). All KDL documents and string values
|
|
should be valid UTF-8 now, as was intended.
|
|
* The last node in a child block no longer needs to be terminated with `;`,
|
|
even if the closing `}` is on the same line, so this is now a legal node:
|
|
`node {foo;bar;baz}`
|
|
* More places allow whitespace (node-spaces, specifically) now. With great
|
|
power comes great responsibility:
|
|
* Inside `(foo)` annotations (so, `( foo )` would be legal (`( f oo )` would
|
|
not be, since it has two identifiers))
|
|
* Between annotations and the thing they're annotating (`(blah) node (thing)
|
|
1 y= (who) 2`)
|
|
* Around `=` for props (`x = 1`)
|
|
* The BOM is now only allowed as the first character in a document. It was
|
|
previously treated as generic whitespace.
|
|
* Multi-line strings are now automatically dedented, according to the common
|
|
whitespace matching the whitespace prefix of the closing line. Multiline
|
|
strings and raw strings now must have a newline immediately following their
|
|
opening `"`, and a final newline plus whitespace preceding the closing `"`.
|
|
* SMALL EQUALS SIGN (`U+FE66`), FULLWIDTH EQUALS SIGN (`U+FF1D`), and HEAVY
|
|
EQUALS SIGN (`U+1F7F0`) are now treated the same as `=` and can be used for
|
|
properties (e.g. `お名前=☜(゚ヮ゚☜)`). They are also no longer valid in bare
|
|
identifiers.
|
|
* `.1`, `+.1` etc are no longer valid identifiers, to prevent confusion and
|
|
conflicts with numbers.
|
|
* Multi-line strings' literal Newline sequences are now normalized to single
|
|
`LF`s.
|
|
* `#inf`, `#-inf`, and `#nan` have been added in order to properly support
|
|
IEEE floats for implementations that choose to represent their decimals that
|
|
way.
|
|
* Correspondingly, the identifiers `inf`, `-inf`, and `nan` are now syntax
|
|
errors.
|
|
|
|
### KQL
|
|
|
|
* There's now a _required_ descendant selector (`>>`), instead of using plain
|
|
spaces for that purpose.
|
|
* The "any sibling" selector is now `++` instead of `~`, for consistency with
|
|
the new descendant selector.
|
|
* Some parsing logic around the grammar has changed.
|
|
* Multi- and single-line comments are now supported, as well as line
|
|
continuations with `\`.
|
|
* Map operators have been removed entirely.
|