Commit graph

249 commits

Author SHA1 Message Date
Ethiraric
99fb05c937 Improve scan_plain_scalar readability.
Take whitespace checking out of the innermost loop for performance.
2024-01-25 03:06:18 +01:00
Ethiraric
f535e505a7 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
cfbf287b3d 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
26ef839cd3 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
6babe8de60 Doing this leads to worse performance. 2024-01-24 19:42:18 +01:00
Ethiraric
aaa9288842 Pre-load chars in skip_block_scalar_indent. 2024-01-24 19:31:45 +01:00
Ethiraric
2cebf0af1d Help the compiler inline read_break. 2024-01-24 17:14:52 +01:00
Ethiraric
5789169ceb 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
b4f66c457a Move char is_xxx fn to their own file. 2024-01-24 01:02:20 +01:00
Ethiraric
eed3433841 Update licence, readme, doc. 2024-02-08 07:12:14 +01:00
Ethiraric
68c7afcb4c Fix null nodes with tags in flow constructs. 2024-01-23 00:19:04 +01:00
Ethiraric
7f7919748a Fix tag scanning. 2024-01-23 00:19:04 +01:00
Ethiraric
76b3773ffd Fix indent in block scalars. 2024-01-23 00:19:04 +01:00
Ethiraric
9f4b1480df Fix dquote indentation. 2024-01-23 00:19:04 +01:00
Ethiraric
2e94a4217b Fix dquote string escape sequences. 2024-01-23 00:19:04 +01:00
Ethiraric
7145ee8282 Fix tests related to anchor/alias indentation.
I have no idea what I'm doing.
2024-01-23 00:19:04 +01:00
Ethiraric
9281e35bbb Fix flow adjacent value with complex key. 2024-01-23 00:19:04 +01:00
Ethiraric
5dbd6f9a55 Fix use of dashes in flow contexts. 2024-01-23 00:19:04 +01:00
Ethiraric
628549085c Fix block scalar / eof interactions. 2024-01-23 00:19:04 +01:00
Ethiraric
c0caeb84e9 Fix block scalars and document end interaction. 2024-01-23 00:19:04 +01:00
Ethiraric
ff28b55d22 Fix duplicate version directive. 2024-01-23 00:19:04 +01:00
Ethiraric
7b744d092e Fixes towards implicit document end. 2024-01-23 00:19:04 +01:00
Ethiraric
f27a7c25a8 Fixes towards spaces before comments. 2024-01-23 00:19:04 +01:00
Ethiraric
0b58be1458 Fix possible misindent in block scalar. 2024-01-23 00:19:04 +01:00
Ethiraric
0a1aebaf3c Fix towards multiple documents in a single stream. 2024-01-23 00:19:04 +01:00
Ethiraric
1606523193 Fix towards invalid trailing characters. 2024-01-23 00:19:04 +01:00
Ethiraric
4118cfab7c Split fetch_flow_scalar. 2024-01-23 00:19:04 +01:00
Ethiraric
f0ae6473aa Fix towards flow mapping and colons. 2024-01-23 00:19:04 +01:00
Ethiraric
4c1376a2b0 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
79046225e7 Minor improvement to debug prints. 2024-01-23 00:19:04 +01:00
Ethiraric
e9bcc8a28b Fix anchor names' character set. 2024-01-23 00:19:04 +01:00
Ethiraric
6308bbe98f Fix empty documents tests. 2024-01-23 00:19:04 +01:00
Ethiraric
e7f29450ca Fix empty keys in implicit mappings. 2024-01-23 00:19:04 +01:00
Ethiraric
7006620027 Add comments to TokenType and Scanner. 2024-01-23 00:19:04 +01:00
Ethiraric
be6a05916f Add debugging helpers. 2024-01-23 00:19:04 +01:00
Ethiraric
2e5605ddc2 More fixes towards invalid tabs. 2024-01-23 00:19:04 +01:00
Ethiraric
6e8af26435 More fixes towards invalid tabs? 2024-01-23 00:19:04 +01:00
Ethiraric
06b03f5cf5 More fixes towards invalid tabs. 2024-01-23 00:19:04 +01:00
Ethiraric
5437f5d9cb More fixes towards invalid tabs. 2024-01-23 00:19:04 +01:00
Ethiraric
49bfa590a6 More fixes towards invalid tabs. 2024-01-23 00:19:04 +01:00
Ethiraric
125c0a411a Fix towards invalid tabs. 2024-01-23 00:19:04 +01:00
Ethiraric
458d22ef80 Fix indent when - & entry have \n in-between. 2024-01-23 00:19:04 +01:00
Ethiraric
a80091795b More fixes towards invalid tabs. 2024-01-23 00:19:04 +01:00
Ethiraric
88833f8a06 Fix DK95-00, I guess. 2024-01-23 00:19:04 +01:00
Ethiraric
e683932e7a Rework block scalar indent skipping. 2024-01-23 00:19:04 +01:00
Ethiraric
abac504295 Minor improvements. 2024-01-23 00:19:04 +01:00
Ethiraric
29b513bea3 More fixes towards tabulations. 2024-01-23 00:19:04 +01:00
Ethiraric
e1ae3bd5b2 Fix more inappropriate use of tabs. 2024-01-23 00:19:04 +01:00
Ethiraric
d9287638b9 Use type aliases where appropriate. 2024-01-23 00:19:04 +01:00
Ethiraric
1590018312 Doccomment is_ series of functions. 2024-01-23 00:19:04 +01:00
Ethiraric
c670b32461 Fix tab used as indentation checks. 2024-01-23 00:19:04 +01:00
Ethiraric
06a6fb34c1 Handle "!!" tag overriding. 2024-01-23 00:19:04 +01:00
Ethiraric
92e20e6eb4 Don't inherit tag directives between documents. 2024-01-23 00:19:04 +01:00
Ethiraric
5f6dc2246f Reslove tag directives. 2024-01-23 00:19:04 +01:00
Ethiraric
8da6ddef10 Remove _ prefix to used method. 2024-01-23 00:19:04 +01:00
Ethiraric
3f10cf9e5d Propagate tag to SequenceStart event. 2024-01-23 00:19:04 +01:00
Ethiraric
e6fdcddceb Propagate tag to MappingStart event. 2024-01-23 00:19:04 +01:00
Ethiraric
3ffb231e40 Minor improvements.
* Doc comments
* Helper functions
* Line breaks for readability
2024-01-23 00:19:04 +01:00
Ethiraric
8c4ea2c838 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
ff2d5fc5b6 Expose ScanError::info.
From https://github.com/chyh1990/yaml-rust/pull/190.
2023-08-17 23:43:15 +02:00
Ethiraric
0c4a395829 Add documentation and move tests to their folder. 2023-08-17 23:16:06 +02:00
Ethiraric
fd37ebd6e5 Clippy set to pedantic. 2023-08-14 16:11:33 +02:00
Alexander Kjäll
b6e65fb359 library is now in the crates repo (#164) 2021-07-12 15:48:17 +08:00
Yuheng Chen
bb249d9b36 Bump to v0.4.5 2021-01-03 11:57:28 -08:00
Yuheng Chen
a833b49831 Bump to v0.4.4 2020-06-01 21:02:16 +08:00
Evan Harvey
35619eaa5c Spellcheck (#143)
* Spellcheck src

* Spellcheck README
2020-06-01 20:59:27 +08:00
Yuheng Chen
e35bbd7c5a fix CI for clippy 0.9 2020-06-01 20:34:13 +08:00
Anton Kochkov
92d775a448 Remove deprecated API 2020-05-27 14:19:22 +08:00
Anton Kochkov
5170d0374d Rust 2018 transition 2020-05-27 14:15:28 +08:00
Hendrik Sollich
de742fbcd6 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
508ed37d05 Bump to v0.4.3 2019-03-07 14:27:03 +08:00
Robin Stocker
3ae23d47de 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
Tibo Delor
3f8a60627f Format using rustfmt 1.0 2018-12-13 18:35:01 +11:00
David Tolnay
9fc1b3f22d Address write_with_newline lint 2018-09-16 00:00:48 -07:00
David Tolnay
20190538af Replace try! with question mark 2018-09-15 23:58:48 -07:00
David Tolnay
e73d5d0256 Release 0.4.2 2018-09-15 13:09:48 -07:00
David Tolnay
dc1ed3d396 Lowercase the recursion limit error message
To be consistent with the other errors in this crate.
2018-09-15 13:09:11 -07:00
David Tolnay
fd169229b0 Release 0.4.1 2018-09-15 12:31:11 -07:00
David Tolnay
5443ce4368 Set html_root_url 2018-09-15 12:30:27 -07:00
David Tolnay
cedb185876 Escape string containing colon
I don't know whether this is always necessary but it is required for
correctly serializing `["x: %"]`. If we serialize this without quotes to
`[x: %]` then the result is not valid YAML.
2018-09-15 12:20:14 -07:00
David Tolnay
ef9b526d59 Ignore should_implement_trait lint
The Parser::next method is already a public API.
2018-09-15 10:07:05 -07:00
David Tolnay
1f0d33259b Address redundant_field_names lint 2018-09-15 10:06:34 -07:00
David Tolnay
760f4f86d0 Don't yet use tool attrs because they are not stable 2018-09-15 10:02:56 -07:00
David Tolnay
f26a44bcdc Format with rustfmt 0.99.4 2018-09-15 09:49:08 -07:00
David Tolnay
1078665c32 Merge branch 'master' into prevent-too-deep-recursion 2018-09-15 09:16:25 -07:00
David Tolnay
b09c5518da Merge pull request #104 from hoodie/feature/test-indentation-behaviour
Add tests to show expected indentation interpretation
2018-09-15 09:09:05 -07:00
Konrad Borowski
b17fbe703c Prevent too deep recursion 2018-09-15 12:34:21 +02:00
Hendrik Sollich
2249926d86 Add tests to show expected indentation interpretation 2018-06-22 21:17:16 +02:00
Hannes De Valkeneer
2ad74a791b Do not quote hyphenated strings unnecessarily.
fixes #54
2018-04-20 21:01:45 +02:00
Yuheng Chen
6761ff9b48 fix boolean quotes
Fix #92
2018-01-03 21:44:54 +08:00
Yuheng Chen
e14465c6a2 Fix warning 2018-01-02 14:57:27 +08:00
Chen Yuheng
bf0ec957d2 Merge pull request #89 from marcaddeo/master
Add a cause() method to EmitError
2017-11-22 10:48:52 +08:00
cetra3
652e42d1c4 Include Scanner 2017-11-15 14:11:39 +10:30
cetra3
201c16217a Allow the Marker from ScanError 2017-11-15 12:06:16 +10:30
Marc Addeo
bccfe35587 Add a cause() method to EmitError
For compatibility with error_chain
2017-11-12 12:02:34 -05:00
Chen Yuheng
5923972e42 Merge pull request #80 from chris-m-h/pull-parser
Make pull parser accessible
2017-11-02 12:16:58 +08:00
Martin Hoffmann
b9b79a5cf8 Allow access to Marker’s content. 2017-09-02 13:49:53 +02:00
Christian Hofer
7471f27194 Replace ? by try! 2017-07-16 18:00:50 +02:00
Christian Hofer
b2f0df8e00 Extract pull parser. 2017-07-15 18:49:27 +02:00
David Tolnay
92809b3f8a Merge pull request #78 from chris-m-h/do-not-clone-on-peek
Parser: Do not clone on peeking
2017-07-11 07:04:59 -07:00