Release 0.2.1
This release is focused on bug fixes and compliance with the YAML test suite.
Breaking changes
- Fix parsing behavior of root-level scalars: now these are parsed into a DOCVAL, not SEQ->VAL (5ba0d56, from PR #144). Eg,
--- this is a scalar --- # previously this was parsed as - this is a scalar
- Cleanup type predicate API (PR #155):
- ensure all type predicates from
Tree
andNodeRef
forward to the corresponding predicate inNodeType
- remove all type predicates and methods from
NodeData
; use the equivalent call fromTree
orNodeRef
. For example, foris_map()
:Tree t = parse("{foo: bar}"); size_t map_id = t.root_id(); NodeRef map = t.rootref(); t.get(map_id)->is_map(); // compile error: no longer exists assert(t.is_map(map_id)); // OK assert(map.is_map()); // OK
- Further cleanup to the type predicate API will be done in the future, especially around the
.has_*()
vs corresponding.is_*()
naming scheme.
- ensure all type predicates from
New features & improvements
Tree::lookup_path_or_modify()
: add overload to graft existing branches (PR #141)- Callbacks: improve test coverage (PR #141)
- YAML test suite (PR #144, PR #145): big progress towards compliance with the suite. There are still a number of existing problems, which are the subject of ongoing work. See the list of current known failures in the test suite file.
- Python wheels and source package are now uploaded to PyPI as part of the release process.
Fixes
Anchors and references
- Fix resolving of nodes with keyref+valref (PR #144):
{&a a: &b b, *b: *a}
- Fix parsing of implicit scalars when tags are present (PR #145):
- &a # test case PW8X - a - &a : a b: &b - &c : &a - ? &d - ? &e : &a
- Fix #151: scalars beginning with
*
or&
or<<
are now correctly quoted when emitting (PR #156). - Also from PR #156, map inheritance nodes like
<<: *anchor
or<<: [*anchor1, *anchor2]
now have aKEYREF
flag in their type (until a call toTree::resolve()
):Tree tree = parse("{map: &anchor {foo: bar}, copy: {<<: *anchor}}"); assert(tree["copy"]["<<"].is_key_ref()); // previously this did not hold assert(tree["copy"]["<<"].is_val_ref()); // ... but this did
Tags
- Fix parsing of tag dense maps and seqs (PR #144):
--- !!map { k: !!seq [ a, !!str b], j: !!seq [ a, !!str b] --- !!seq [ !!map { !!str k: v}, !!map { !!str ? k: v} ] --- !!map !!str foo: !!map # there was a parse error with the multiple tags !!int 1: !!float 20.0 !!int 3: !!float 40.0 --- !!seq - !!map !!str k1: v1 !!str k2: v2 !!str k3: v3
Whitespace
- Fix parsing of double-quoted scalars with tabs (PR #145):
"This has a\ttab" # is now correctly parsed as "This has a<TAB>tab"
- Fix filtering of leading and trailing whitespace within double-quoted scalars (PR #145):
# test case 4ZYM, 7A4E, TL85 " <SPC><SPC>foo<SPC> <SPC> <SPC><TAB><SPC>bar <SPC><SPC>baz " # is now correctly parsed as " foo\nbar\nbaz "
- Fix parsing of tabs within YAML tokens (PR #145):
---<TAB>scalar # test case K54U ---<TAB>{} # test case Q5MG --- # test case DC7X a: b<TAB> seq:<TAB> - a<TAB> c: d<TAB>#X
- Fix parsing of flow-style maps with ommitted values without any space (PR #145):
# test case 4ABK - {foo: , bar: , baz: } # this was parsed correctly as {foo: ~, bar: ~, baz: ~} - {foo:, bar:, baz:} # ... but this was parsed as {'foo:': , 'bar:': ~, 'baz:': ~}
Scalars
- Unescape forward slashes in double quoted string (PR #145):
--- escaped slash: "a\/b" # test case 3UYS # is now parsed as: --- escaped slash: "a/b"
- Fix filtering of indented regions in folded scalars (PR #145):
is now correctly parsed as
# test case 7T8X - > folded line next line * bullet * list * lines last line
\nfolded line\nnext line\n * bullet\n\n * list\n * lines\n\nlast line\n
. - Fix parsing of special characters within plain scalars (PR #145):
# test case 3MYT k:#foo &a !t s !t s # now correctly parsed as "k:#foo &a !t s !t s"
- Fix parsing of comments after complex keys (PR #145):
# test case X8DW ? key # comment : value # now correctly parsed as {key: value}
- Fix parsing of consecutive complex keys within maps (PR #145)
# test case 7W2P, ZWK4 ? a ? b c: ? d e: # now correctly parsed as {a: ~, b: ~, c: ~, d: ~, e: ~}
- Fix #152: parse error with folded scalars that are the last in a container (PR #157):
exec: command: # before the fix, this folded scalar failed to parse - | exec pg_isready -U "dog" -d "dbname=dog" -h 127.0.0.1 -p 5432 parses: no
- Fix: documents consisting of a quoted scalar now retain the VALQUO flag (PR #156)
Tree tree = parse("'this is a quoted scalar'"); assert(tree.rootref().is_doc()); assert(tree.rootref().is_val()); assert(tree.rootref().is_val_quoted());
Document structure
- Empty docs are now parsed as a docval with a null node:
is now parsed as
--- # test cases 6XDY, 6ZKB, 9BXL, PUW8 --- ---
--- ~ --- ~ --- ~
- Prevent creation of DOC nodes from stream-level comments or tags (PR #145):
was parsed as
!foo "bar" ... # Global %TAG ! tag:example.com,2000:app/ --- !foo "bar"
and it is now correctly parsed as--- !foo "bar" --- # notice the empty doc in here --- !foo "bar"
(other than the known limitation that ryml does not do tag lookup).--- !foo "bar" --- !foo "bar"
General
- Fix #147: serialize/deserialize special float values
.nan
,.inf
,-.inf
(PR #149) - Fix #142:
preprocess_json()
: ensure quoted ranges are skipped when slurping containers - Ensure error macros expand to a single statement (PR #141)
- Update c4core to 0.1.4