Commit graph

277 commits

Author SHA1 Message Date
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
David Aguilar
16f3ea39e1 yaml: add YamlLoader::documents() to get a read-only view of the parsed documents 2024-03-24 14:21:33 -07:00
Ethiraric
ee92e953f1 Switch from encoding to encoding_rs.
See https://github.com/rustsec/advisory-db/issues/1605.
2024-03-24 17:14:44 +01:00
Ethiraric
3279baaab9 Fix rustdoc ignore directive. 2024-03-20 16:00:33 +01:00
Ethiraric
ccd7b6e718 Add missing_docs warning. 2024-03-20 16:00:30 +01:00
Ethiraric
8247f481c7 Forgot to bump some v0.6.0 to v0.7.0. 2024-03-20 16:00:15 +01:00
Ethiraric
011e81ee85 Re-enable clippy warnings. 2024-03-19 18:18:59 +01:00
David Aguilar
cccf769b1c Enable all clippy warnings
Rename Scanner::next() to Scanner::next_token() to avoid
confusiong with the Iterator trait.
2024-03-19 15:26:16 +01:00
David Aguilar
a120d93e7d Enable the missing-errors-doc clippy checks 2024-03-19 15:26:16 +01:00
David Aguilar
9e505d552f Eliminate panics and enable the missing panics docs check 2024-03-19 15:26:16 +01:00
David Aguilar
a42f26b306 Enable the redundant-else clippy checks 2024-03-19 15:26:16 +01:00
David Aguilar
e36369d69c Enable the case-arms clippy checks 2024-03-19 15:26:16 +01:00
lincoln auster [they/them]
7b4422bb5d implement borrowed_or
Allow the usage of `or` without consuming self. This can be useful
for pipelines that maintain some sort of owned state.
2024-03-19 15:26:16 +01:00
lincoln auster [they/them]
f8542f0f97 introduce or function
Similarly to `or` for Rust's options, this patch provides a way to
'override' the value of a Yaml node if it's some form of error.
2024-03-19 15:26:16 +01:00
Marko Mikulicic
c32db2986c Use a YamlDecoder builder to implement optional encoding_trap parameter. 2024-03-19 15:26:16 +01:00
Marko Mikulicic
5240918cac Implement load_from_bytes
Also helps in some cases with #142, when the BOM is at the beginning of
the file (common), but not in corner case where the BOM is at the start
of a document which is not the first one.

Closes: #155
2024-03-19 15:26:16 +01:00
Jim Turner
03e3047937 Add byte a offset to the error message 2024-03-19 15:26:16 +01:00
larkbyte
54ca9294fa Replace linked_hash_map with hashlink 2024-03-19 15:26:16 +01:00
David Aguilar
5369a002ba Emit multi-line string values as block scalars 2024-03-19 15:26:16 +01:00
Ethiraric
a33d0ffe68 Update to v0.6. 2024-03-15 20:14:26 +01:00
Ethiraric
e7a4f30627 Replace VecDeque with ArrayDeque.
This removes all allocations in the `Scanner` code. The downside is that
the buffer is now stored in the `Scanner` structure, making it 48 bytes
larger. This however makes the code much more performant.
2024-02-13 23:10:32 +01:00
Ethiraric
603c3c546f Fix some clippy lints. 2024-02-13 23:10:17 +01:00
Ethiraric
e93947bcfe Minor improvements. 2024-01-31 22:02:53 +01:00
Ethiraric
4fee65f27a Improve scan_plain_scalar readability.
Take whitespace checking out of the innermost loop for performance.
2024-01-25 03:06:18 +01:00
Ethiraric
28893c4567 Avoid a trip to self.buffer.
`self.buffer` is a `VecDeque<char>`, meaning that characters are stored
on 4B. When reading as we used to do, this means that every 1 byte
character we read was turned into 4 bytes, which was turned into 1 byte
in `String::extend`.

Instead of going through `self.buffer`, use a local `String` to store
the characters before pushing them to `string`.
2024-01-24 23:02:02 +01:00
Ethiraric
2471c5793a Buffer block scalar lines.
Instead of doing a loop that goes:
  * fetch from input stream
  * push char into string

Make a loop that fetches characters while they're not a breakz and
_then_ extend the string. This avoids a bunch of reallocations.
2024-01-24 21:45:18 +01:00
Ethiraric
7a51c3dfca Split skip into more specific variants.
This function is a hotpath and sometimes removing the conditional jump
to detect line breaks saves a bunch of instructions.
2024-01-24 20:20:52 +01:00
Ethiraric
666965ef4f Doing this leads to worse performance. 2024-01-24 19:42:18 +01:00
Ethiraric
4153a98973 Pre-load chars in skip_block_scalar_indent. 2024-01-24 19:31:45 +01:00
Ethiraric
980d5b0335 Help the compiler inline read_break. 2024-01-24 17:14:52 +01:00
Ethiraric
bcdd725049 Remove debug prints code from release builds.
If building release mode, remove debug code. Now, the `debug_print!`
macro resolves to nothing in release build.

In debug build, don't check the environment for each print. This has a
huge overhead. The environment is only checked once and next checks are
made against a simple boolean value.
2024-01-24 02:22:02 +01:00
Ethiraric
06936742f2 Move char is_xxx fn to their own file. 2024-01-24 01:02:20 +01:00
Ethiraric
2481df7f9d Update licence, readme, doc. 2024-02-08 07:12:14 +01:00
Ethiraric
f2d0968a89 Fix null nodes with tags in flow constructs. 2024-01-23 00:19:04 +01:00
Ethiraric
4b37abf2b7 Fix tag scanning. 2024-01-23 00:19:04 +01:00
Ethiraric
84a7d2a0ab Fix indent in block scalars. 2024-01-23 00:19:04 +01:00
Ethiraric
3868b83756 Fix dquote indentation. 2024-01-23 00:19:04 +01:00
Ethiraric
36c4f8951e Fix dquote string escape sequences. 2024-01-23 00:19:04 +01:00
Ethiraric
71c54f318f Fix tests related to anchor/alias indentation.
I have no idea what I'm doing.
2024-01-23 00:19:04 +01:00
Ethiraric
ca7579a3c9 Fix flow adjacent value with complex key. 2024-01-23 00:19:04 +01:00
Ethiraric
ef799af5eb Fix use of dashes in flow contexts. 2024-01-23 00:19:04 +01:00
Ethiraric
c60099af9b Fix block scalar / eof interactions. 2024-01-23 00:19:04 +01:00
Ethiraric
9b653e607b Fix block scalars and document end interaction. 2024-01-23 00:19:04 +01:00
Ethiraric
308b07bad2 Fix duplicate version directive. 2024-01-23 00:19:04 +01:00
Ethiraric
31dc4a1456 Fixes towards implicit document end. 2024-01-23 00:19:04 +01:00
Ethiraric
7a3e3b05b4 Fixes towards spaces before comments. 2024-01-23 00:19:04 +01:00
Ethiraric
99d82be6a3 Fix possible misindent in block scalar. 2024-01-23 00:19:04 +01:00
Ethiraric
b2aa95b4c1 Fix towards multiple documents in a single stream. 2024-01-23 00:19:04 +01:00
Ethiraric
bff3c4ccaf Fix towards invalid trailing characters. 2024-01-23 00:19:04 +01:00
Ethiraric
032efff867 Split fetch_flow_scalar. 2024-01-23 00:19:04 +01:00
Ethiraric
81104ba833 Fix towards flow mapping and colons. 2024-01-23 00:19:04 +01:00
Ethiraric
4603e31a67 Finally grasped how SimpleKey works.
This is a huge commit that cannot easily be broken down as it contains
fixes for the next ignored test in the suite which, one fixed, broke
tests that used to pass and were only then fixed.

There is also a substantial amount of comments that were added,
especially around `SimpleKey`. Minor improvements around the code were
added and I did not bother making a separate commit for them.

Overall, that commit fixes 7 tests from the matrix that were related to
the handling of simple keys.
2024-01-23 00:19:04 +01:00
Ethiraric
795193483e Minor improvement to debug prints. 2024-01-23 00:19:04 +01:00
Ethiraric
23f3a512f0 Fix anchor names' character set. 2024-01-23 00:19:04 +01:00
Ethiraric
07a0743288 Fix empty documents tests. 2024-01-23 00:19:04 +01:00
Ethiraric
65a89f41b9 Fix empty keys in implicit mappings. 2024-01-23 00:19:04 +01:00
Ethiraric
f2b5946008 Add comments to TokenType and Scanner. 2024-01-23 00:19:04 +01:00
Ethiraric
19bd49865f Add debugging helpers. 2024-01-23 00:19:04 +01:00
Ethiraric
319b288e60 More fixes towards invalid tabs. 2024-01-23 00:19:04 +01:00
Ethiraric
0889d66c32 More fixes towards invalid tabs? 2024-01-23 00:19:04 +01:00
Ethiraric
84bfd0d3de More fixes towards invalid tabs. 2024-01-23 00:19:04 +01:00
Ethiraric
870f2359dd More fixes towards invalid tabs. 2024-01-23 00:19:04 +01:00
Ethiraric
da233d5426 More fixes towards invalid tabs. 2024-01-23 00:19:04 +01:00
Ethiraric
ffe0cfb6d5 Fix towards invalid tabs. 2024-01-23 00:19:04 +01:00
Ethiraric
cd2c34cabe Fix indent when - & entry have \n in-between. 2024-01-23 00:19:04 +01:00
Ethiraric
5a8c5a3d44 More fixes towards invalid tabs. 2024-01-23 00:19:04 +01:00
Ethiraric
326082e0bc Fix DK95-00, I guess. 2024-01-23 00:19:04 +01:00
Ethiraric
f9e55be2f0 Rework block scalar indent skipping. 2024-01-23 00:19:04 +01:00
Ethiraric
abe5d30b3a Minor improvements. 2024-01-23 00:19:04 +01:00
Ethiraric
01ecc1ab0f More fixes towards tabulations. 2024-01-23 00:19:04 +01:00
Ethiraric
e69953bf80 Fix more inappropriate use of tabs. 2024-01-23 00:19:04 +01:00
Ethiraric
15e02cf53d Use type aliases where appropriate. 2024-01-23 00:19:04 +01:00
Ethiraric
acb35b431a Doccomment is_ series of functions. 2024-01-23 00:19:04 +01:00
Ethiraric
270c75ce03 Fix tab used as indentation checks. 2024-01-23 00:19:04 +01:00
Ethiraric
1afe5e353f Handle "!!" tag overriding. 2024-01-23 00:19:04 +01:00
Ethiraric
0d50cff2b5 Don't inherit tag directives between documents. 2024-01-23 00:19:04 +01:00
Ethiraric
a502625ce8 Reslove tag directives. 2024-01-23 00:19:04 +01:00
Ethiraric
df48d59150 Remove _ prefix to used method. 2024-01-23 00:19:04 +01:00
Ethiraric
b1be5686bf Propagate tag to SequenceStart event. 2024-01-23 00:19:04 +01:00
Ethiraric
ddd768e681 Propagate tag to MappingStart event. 2024-01-23 00:19:04 +01:00
Ethiraric
e4c4182020 Minor improvements.
* Doc comments
* Helper functions
* Line breaks for readability
2024-01-23 00:19:04 +01:00
Ethiraric
f9eb8c6d60 Move emitter/scanner tests to their folder.
Change scanner's complex test:
```diff
-  *coffee:
+  *coffee :
     amount: 4
-  *cookies:
+  *cookies :
     amount: 4
```

According to https://play.yaml.io/main/parser, this example was invalid
in the first place. Adding a space makes it so that the colon is not
part of the alias name.

Also fix colons not being able to be part of anchors.
2024-01-23 00:19:04 +01:00
Ethiraric
da67c9a763 Expose ScanError::info.
From https://github.com/chyh1990/yaml-rust/pull/190.
2023-08-17 23:43:15 +02:00
Ethiraric
2d8c4e8fc9 Add documentation and move tests to their folder. 2023-08-17 23:16:06 +02:00
Ethiraric
91ed5dca21 Clippy set to pedantic. 2023-08-14 16:11:33 +02:00
Alexander Kjäll
beae0f306b library is now in the crates repo (#164) 2021-07-12 15:48:17 +08:00
Yuheng Chen
95d0603129 Bump to v0.4.5 2021-01-03 11:57:28 -08:00
Yuheng Chen
95e1ad2dce Bump to v0.4.4 2020-06-01 21:02:16 +08:00
Evan Harvey
d5bfbcb047 Spellcheck (#143)
* Spellcheck src

* Spellcheck README
2020-06-01 20:59:27 +08:00
Yuheng Chen
2be65d069e fix CI for clippy 0.9 2020-06-01 20:34:13 +08:00
Anton Kochkov
8d26a5eca3 Remove deprecated API 2020-05-27 14:19:22 +08:00
Anton Kochkov
95562ac849 Rust 2018 transition 2020-05-27 14:15:28 +08:00
Hendrik Sollich
faf6e2a8a6 Fix emitting hexlike strings without quotes
The emitter omitted quotes for strings that start with `0x` those would
subsequently be parsed as strings again. This should fix #133.
2019-07-24 16:40:02 +02:00
Yuheng Chen
bd87698008 Bump to v0.4.3 2019-03-07 14:27:03 +08:00
Robin Stocker
a3591b3fef Fix handling of indicators in plain scalars to conform to YAML 1.2
YAML 1.2 has special handling of indicators to be compatible with JSON.
The following is equivalent to `{"a": "b"}` (note, no space after `:`):

    {"a":b}

But without the quoted key, a space is required. So the `:` here is part
of the plain scalar:

    {a:b}  # == {"a:b"}

A plain scalar can also start with a `:` as long as it's followed by
"safe" characters:

    {a: :b}  # == {"a": ":b"}

(Fixes #118)
2019-03-04 11:45:39 +11:00