Commit graph

271 commits

Author SHA1 Message Date
Ethiraric
ccf6394d9f Add more debug prints.
When running tests that involve 2 runs of the parser, one with the
`StrInput` and another with the `BufferedInput`, the output of debug
prints can be confusing as it's unclear where one parser ends parsing
and the other starts. These 2 prints allow us to know when each is
started and, if one errors but not the other, to know which did.
2024-10-19 18:53:18 +02:00
Ethiraric
3358629dd1 Fix infinite loop on {.... 2024-10-19 04:14:50 +02:00
Ethiraric
55858d15d9 Add Parser::new_from_iter. 2024-10-17 19:17:26 +02:00
Ethiraric
979f8eabf9 Fix rustdoc warnings.
This requires making the `input` mod public, as some items in
`char_traits` are referenced in `Input`'s function doccomments.
The items have been exposed in `input` directly, rather than in a
`saphyr::input::char_traits` submod.
2024-10-13 16:21:37 +02:00
Ethiraric
95fe3fea16 Fix issue with --- in the middle of a scalar.
This issue arises in the `yaml-test-suite` not in a test, but rather in
the test description files themselves. Since we now use the library
itself to load the test files, this made the `yaml-test-suite` fail.
2024-10-13 16:19:58 +02:00
jneem
d82866555a Look ahead before testing for EOF. (#12)
Look ahead before testing for EOF.

This fixes panics in saphyr's test_multiline_trailing_newline and
test_multiline_leading_newline tests, in which `self.input.next_is_z`
would be called on an empty buffer and panic in `peek`
2024-10-13 14:48:06 +02:00
jneem
434f4521dd Better tracking for beginning and ending positions of mappings. (#10)
Previously, we often used the scanner state to infer the positions of
mappings. This is sometimes wrong, because the scanner has already
scanned ahead by the time the mapping is parsed.

This commit adds a check to the test suite, asserting that parser event
positions are all observed in order, and it fixes the scanner and parser
to make the new check pass.
2024-10-13 14:47:41 +02:00
Eduardo Sánchez Muñoz
833343757a Make StrInput type publicly visible
For cases where you might need to, e.g, define a function with a `Parser<StrInput<'_>>` as argument
2024-10-13 14:43:33 +02:00
Ethiraric
59048f68ae Code cleanup after monorepo-ing. 2024-10-13 14:42:50 +02:00
jneem
d3b9641125 Remove bad assert. (#11)
We reserve bufmaxlen bytes in the string, but then proceed to push
up to bufmaxlen chars. Therefore it is possible that the string will
need to reallocate. A different solution would be to reserve
4*bufmaxlen bytes. Removing the assert is probably ok, because the
attempt to pre-allocate is just a performance optimization.
2024-09-13 23:17:23 +02:00
Eduardo Sánchez Muñoz
e215f546f3 Remove all unsafe code.
* Use `str::strip_prefix` to avoid using `str::from_utf8_unchecked`
* Avoid most uses of `extend_left` unsafe function
* Remove `Input::push_back` and remaining unsafe
2024-08-12 17:06:14 +02:00
Eduardo Sánchez Muñoz
6c57b5b5e4 Add "explicit" flag to Event::DocumentStart (#5)
Allows the event consumer to know whether the document explicitly starts with a `---`
2024-08-05 17:23:04 +02:00
jneem
926fdfb01b Use spans instead of markers (#3) 2024-08-05 17:08:23 +02:00
Ethiraric
4a5241e0bb Improve buffer handling in scan_plain_scalar. 2024-08-05 01:11:13 +02:00
Ethiraric
93b7e55bcf Move scanning low-level functions to Input. 2024-07-14 17:01:44 +02:00
Ethiraric
696ca59a16 Move next_can_be_plain_scalar to Input trait. 2024-07-14 17:01:44 +02:00
Ethiraric
8d7c3a1c1b Move skip_ws_to_eol to Input trait. 2024-07-14 17:01:44 +02:00
Ethiraric
db4f26da42 Add StrInput. 2024-07-14 17:01:44 +02:00
Ethiraric
0e9cee18f2 Move buffered_input to an input module. 2024-07-14 17:01:44 +02:00
Ethiraric
65fcb6fde3 Move next_can_be_plain_scalar as free fn.
This is, for some reason, a huge pessimization. `rustc` fails to
optimize it as well as it did when it was part of `Scanner`.

This is however kinda needed if I want to avoid having this code
duplicated in every implementation of the input.
2024-07-14 17:01:44 +02:00
Ethiraric
693cc19042 Avoid too many lookaheads in scan_plain_scalar. 2024-07-14 17:00:10 +02:00
Ethiraric
d27bae9fa5 Fix debug_prints in release mode. 2024-07-14 17:00:10 +02:00
Ethiraric
93a35ab6f7 Move document indicator detection to Input. 2024-07-14 17:00:10 +02:00
Ethiraric
afa1b2319f Remove 1 line wrappers. 2024-07-14 17:00:08 +02:00
Ethiraric
f8b6d849d3 Performance improvement.
The refactoring added `next_is` which takes a `&str` as parameter, while
we only use it with strings of lengths 2 and 3. Replacing this by 2
dedicated methods (which can be added to the trait interface and only
specialized if needed) removes almost all the overhead that was added by
`Input`.
2024-07-14 16:59:10 +02:00
Ethiraric
d9bb7a1693 Add Input interface.
Hiding character fetching behind this interface allows us to create more
specific implementations when is appropriate. For instance, an instance
of `Input` can be created for a `&str`, allowing for borrowing and more
efficient peeking and traversing than if we were to fetch characters one
at a time and placing them into a temporary buffer.
2024-07-14 16:59:09 +02:00
Ethiraric
11cffc6df8 Fix issue with deeply indented block scalars.
Fixes #2
2024-07-14 16:57:26 +02:00
Ethiraric
750c992121 Add support for nested implicit flow mappings.
These are corner cases not tested by the `yaml-test-suite`.
Parsing for the reported input has been fixed, as well as other
similar-looking inputs which make use of nested implicit flow mappings
and implicit null keys and values.

Fixes #1.
2024-07-02 01:56:34 +02:00
Ethiraric
60f8919565 v0.0.2 2024-06-13 22:18:27 +02:00
Ethiraric
f8f6281e41 Add Marker::default and pub to new. 2024-06-13 22:17:54 +02:00
Ethiraric
c3d83fbfe1 Fix warnings. 2024-06-13 22:05:43 +02:00
Ethiraric
9ee2d113bc Fix error with comments after tags. 2024-04-16 12:03:42 +02:00
Ethiraric
cbba46fa72 Have ScanError::new take a String.
Internally, `ScanError` stores a `String`. Having `new` take a `&str`
misleadingly indicates that it stores a `&str`. This commit changes
`new` so that it takes a `String`, and adds a convenience method,
`new_str` that takes a `&str` and allocates a `String` for it.
2024-04-07 02:04:45 +02:00
Ethiraric
3b1dee5ef7 Remove deprecated method implementations of Error. 2024-04-07 02:01:26 +02:00
Ethiraric
737f9d0ab1 Improve Parser's next() option handling. 2024-04-02 23:06:15 +02:00
Ethiraric
40670f3c48 Minor improvements. 2024-04-02 23:06:08 +02:00
Ethiraric
3365ccadb6 Readability improvement in tag handling. 2024-04-02 23:00:33 +02:00
Ethiraric
6b01b554e0 yaml-rust2 -> saphyr-parser
* Drop non-parser files
* Rename everything
* Fix tests
* Start rewriting a bit of docs
2024-04-02 17:14:06 +02:00
Ethiraric
787403daa1 Messed up the MSRV. 2024-03-30 19:39:53 +01:00
Ethiraric
c90c1ed1fb Use cargo features. 2024-03-30 19:24:54 +01:00
Alistair Francis
1fb76ae745 yaml: Implement IndexMut
This implements the IndexMut trait for Yaml. This allows indexing the
Yaml type while having a mutable reference.

Unlike the Index, this will panic on a failure. That is allowed as per
the Rust documentation [1]. We don't have the option of returning a
mutable reference to BAD_VALUE as that is unsafe. So instead we just
panic.

1: https://doc.rust-lang.org/std/ops/trait.IndexMut.html#tymethod.index_mut

Resolves: https://github.com/chyh1990/yaml-rust/issues/123
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
Co-authored-by: Ethiraric <ethiraric@gmail.com>
2024-03-30 18:52:39 +01:00
Ethiraric
bf2aaf8044 Add doc checks to before_commit. 2024-03-28 21:06:32 +01:00
David Aguilar
5c7e11ea3f maint: version-up and minimize where we mention the version
Remove the version number from tools/gen_large_yaml so that we
can avoid needing to update the version in two places.
2024-03-25 22:25:46 -07:00
John Vandenberg
6ec65e636f fix typos 2024-03-25 14:52:44 +01:00
David Aguilar
d7f7c7ce15 yaml: add YamlLoader::load_from_parser(&Parser)
Make it easier to load documents from a prebuilt Parser.
2024-03-25 00:06:10 +01:00
David Aguilar
c00b27bb95 parser: add Parser::new_from_str(&str) 2024-03-25 00:06:10 +01:00
David Aguilar
61b0e70a4e parser: fixup typos from github 2024-03-24 15:01:38 -07:00
David Aguilar
c8e82c00d1 parser: add a test for keep_tags(false)
Co-authored-by: Ethiraric <ethiraric@gmail.com>
2024-03-24 14:21:33 -07:00
David Aguilar
dec6bf35bb parser: better document keep_tags
Co-authored-by: Ethiraric <ethiraric@gmail.com>
2024-03-24 14:21:33 -07:00
David Aguilar
150b6f0927 parser: add an option to keep tags across multiple documents
Documents are self-contained and tags defined in the first document are not
visible to subsequent documents.

Add support for having tags that span across all documents by making the
clearing of tags in the parser opt-out.

Closes: #10
2024-03-24 14:21:33 -07:00