2256 Commits

Author SHA1 Message Date
René Kijewski
a9e0132b28 book: add toc 2024-11-14 11:12:02 +01:00
René Kijewski
b76d1000b6 book: pin to mdbook v0.4.40 for now 2024-11-14 11:12:02 +01:00
René Kijewski
d3b9b6ea56 Raise MSRV to 1.80 2024-11-13 23:33:06 +01:00
René Kijewski
9b733d8887 parser: use built-in whitespace trimming
Our `is_ws()` implementation was the same since the earliest days of askama:
<4805acc8eb (diff-a9b78e3979c46af7f12ceef379a5a7a657fbe8d77900aa6b4e88b7519b415ca3R31-R34)>.
It considers spaces ` `, horizontal tabs `\t`, carriage return `\r`, and
end of line `\n` characters as white spaces characters. Rust's
`u8::is_ascii_whitespace()` adds formfeed `\f` to the list.

This PR replaces `is_ws()` with the built-in
`char::is_ascii_whitespace()`. The parser is a tiny bit faster, and we
are a bit more standard conforming:

<details>
<summary>benchmark results</summary>

```text
     Running benches/from_str.rs (/home/kijewski/git/rust/rinja/target/release/deps/from_str-fae58673a015eed7)
librustdoc/all          time:   [322.12 µs 323.71 µs 325.71 µs]
                        thrpt:  [43.355 MiB/s 43.623 MiB/s 43.837 MiB/s]
                 change:
                        time:   [-6.3192% -5.9056% -5.4469%] (p = 0.00 < 0.05)
                        thrpt:  [+5.7607% +6.2763% +6.7454%]
                        Performance has improved.
librustdoc/item_info    time:   [5.6035 µs 5.6117 µs 5.6220 µs]
                        thrpt:  [27.989 MiB/s 28.041 MiB/s 28.082 MiB/s]
                 change:
                        time:   [-5.7565% -5.2861% -4.7532%] (p = 0.00 < 0.05)
                        thrpt:  [+4.9904% +5.5811% +6.1081%]
                        Performance has improved.
librustdoc/item_union   time:   [32.750 µs 32.863 µs 32.984 µs]
                        thrpt:  [29.926 MiB/s 30.036 MiB/s 30.139 MiB/s]
                 change:
                        time:   [-8.0835% -7.2746% -6.3867%] (p = 0.00 < 0.05)
                        thrpt:  [+6.8224% +7.8453% +8.7944%]
                        Performance has improved.
librustdoc/page         time:   [149.16 µs 149.45 µs 149.84 µs]
                        thrpt:  [41.327 MiB/s 41.433 MiB/s 41.515 MiB/s]
                 change:
                        time:   [-7.1007% -6.8131% -6.5353%] (p = 0.00 < 0.05)
                        thrpt:  [+6.9922% +7.3113% +7.6435%]
                        Performance has improved.
librustdoc/print_item   time:   [18.142 µs 18.197 µs 18.253 µs]
                        thrpt:  [51.726 MiB/s 51.883 MiB/s 52.040 MiB/s]
                 change:
                        time:   [-5.4557% -5.0690% -4.6229%] (p = 0.00 < 0.05)
                        thrpt:  [+4.8470% +5.3396% +5.7706%]
                        Performance has improved.
librustdoc/short_item_info
                        time:   [17.533 µs 17.552 µs 17.576 µs]
                        thrpt:  [51.547 MiB/s 51.618 MiB/s 51.674 MiB/s]
                 change:
                        time:   [-6.0722% -5.6344% -5.2641%] (p = 0.00 < 0.05)
                        thrpt:  [+5.5566% +5.9708% +6.4647%]
                        Performance has improved.
librustdoc/sidebar      time:   [35.947 µs 36.056 µs 36.176 µs]
                        thrpt:  [34.113 MiB/s 34.226 MiB/s 34.330 MiB/s]
                 change:
                        time:   [-7.6516% -7.0295% -6.4676%] (p = 0.00 < 0.05)
                        thrpt:  [+6.9148% +7.5611% +8.2856%]
                        Performance has improved.
librustdoc/source       time:   [13.274 µs 13.318 µs 13.364 µs]
                        thrpt:  [55.161 MiB/s 55.353 MiB/s 55.537 MiB/s]
                 change:
                        time:   [-6.2263% -5.9307% -5.6552%] (p = 0.00 < 0.05)
                        thrpt:  [+5.9941% +6.3047% +6.6397%]
                        Performance has improved.
librustdoc/type_layout_size
                        time:   [8.1719 µs 8.2034 µs 8.2364 µs]
                        thrpt:  [32.884 MiB/s 33.016 MiB/s 33.143 MiB/s]
                 change:
                        time:   [-5.6332% -5.3531% -5.0853%] (p = 0.00 < 0.05)
                        thrpt:  [+5.3578% +5.6559% +5.9695%]
                        Performance has improved.
librustdoc/type_layout  time:   [29.034 µs 29.101 µs 29.175 µs]
                        thrpt:  [92.278 MiB/s 92.513 MiB/s 92.726 MiB/s]
                 change:
                        time:   [-8.3192% -7.9370% -7.4312%] (p = 0.00 < 0.05)
                        thrpt:  [+8.0278% +8.6212% +9.0741%]
                        Performance has improved.
```
</details>

I doubt that anyone is relying on the fact that the invisible character
`\f` won't be stripped by whitespace control. If you absolutely need
this character to be preserved, then you can always use `{{ '\u{b}' }}`.

Right now, `trim_ascii_start()` is manually implemented, because it is
only stable since rust 1.80.
2024-11-13 23:28:32 +01:00
Guillaume Gomez
e22ab4e0eb
Merge pull request #239 from Kijewski/pr-garbled-closing-blocks
parser: add better error messages for broken closing block tags
2024-11-14 06:11:33 +08:00
René Kijewski
c5ed6af5a3 parser: add better error messages for broken closing block tags 2024-11-13 20:14:42 +01:00
René Kijewski
e7f5de2697 Add garbled closing block test 2024-11-13 20:03:08 +01:00
Guillaume Gomez
ae4ab28fd4
Merge pull request #236 from Kijewski/pr-concat
Add concat operator `~`
2024-11-13 05:40:23 +08:00
René Kijewski
7f9c91de0b Add concat operator ~
The string concatenation operator `~` is present in jinja and tera:
<https://jinja.palletsprojects.com/en/stable/templates/#other-operators>.
While it's not the most important operator, it can come in handy e.g.
with filters: `{{ a|upper }}{{ b|upper }}` → `{{ (a ~ b)|upper }}`.
2024-11-12 17:07:17 +01:00
René Kijewski
473a696638
Merge pull request #235 from Kijewski/pr-filter-as_str
filters: don't collect into intermediate `String` if we can help it
2024-11-11 22:43:04 +01:00
René Kijewski
b8a2614b27 filters: don't collect into intermediate String if we can help it 2024-11-11 22:27:52 +01:00
René Kijewski
013ad4b11e
Merge pull request #234 from epage/winnow-04-cleanup
refactor(parser): Move off of deprecated re-export
2024-11-11 19:04:44 +01:00
René Kijewski
01707b1366
Merge pull request #233 from GuillaumeGomez/differences
Add link to blog post for differences between rinja and askama
2024-11-11 16:19:35 +01:00
Ed Page
8cc7256c3f refactor(parser): Move off of deprecated re-export
The `sequence` mod is deprdcated.
2024-11-11 08:48:32 -06:00
Guillaume Gomez
c92285e24f Add link to blog post for differences between rinja and askama 2024-11-11 15:22:21 +01:00
Guillaume Gomez
d00e638604
Merge pull request #231 from Kijewski/pr-no-unions
derive: reject `union`s as they require `unsafe` code
2024-11-11 18:26:03 +08:00
René Kijewski
3e07719ad9 derive: reject unions as they require unsafe code 2024-11-11 00:55:47 +01:00
René Kijewski
fe551596f3 unions generate invalid code 2024-11-11 00:42:08 +01:00
Guillaume Gomez
428984af93
Merge pull request #230 from Kijewski/pr-fuzzed_excessive_syntax_lengths
parser: reject excessively long syntax delimiters
2024-11-11 05:37:54 +08:00
René Kijewski
fdee5cfaf6 parser: simplify fuzzed_excessive_syntax_lengths 2024-11-10 22:18:02 +01:00
René Kijewski
9c53dcf7ff parser: reject excessively long syntax delimiters 2024-11-10 22:18:02 +01:00
René Kijewski
f8bb54bd96 Add failing test for excessively long syntax delimiters 2024-11-10 22:18:02 +01:00
Guillaume Gomez
c1be649d90
Merge pull request #229 from Kijewski/pr-cluster-fuzz
ci: add cluster-fuzz integration
2024-11-10 18:24:44 +08:00
René Kijewski
3abdf13f35 ci: add cluster-fuzz integration 2024-11-10 04:58:33 +01:00
René Kijewski
9718acaf48
Merge pull request #228 from GuillaumeGomez/move-templates-inside-test
Move types into their tests
2024-11-10 00:57:39 +01:00
Guillaume Gomez
6e13c81a5f Move types into their tests 2024-11-09 22:22:42 +01:00
Guillaume Gomez
e98cfa9ce8
Merge pull request #207 from GuillaumeGomez/macro-default-value
Add support for default value in macros
2024-11-09 19:18:49 +08:00
René Kijewski
19db2765b7 parser: more strict macro argument parsing 2024-11-09 08:37:54 +01:00
René Kijewski
cd898dbd74 derive: no need to use a HashSet 2024-11-09 07:44:30 +01:00
René Kijewski
ba78e25973 derive: kill the Cows 2024-11-09 07:37:47 +01:00
René Kijewski
e0a611da01 derive: add helper function macro_call_ensure_arg_count 2024-11-09 07:37:18 +01:00
Ed Page
1ac0c35144
refactor(parser): Clean up prep for 0.5 (#226)
* refactor(parser): Rely on Parser trait rather than FnMut
* refactor(parser): Consistently use ParseResult
* refactor(parser): Accept Parser rather than FnMut
* refactor(parser): Chain the input through
* refactor(parser): Accept stateful Parser rather than stateless FnMut
* refactor(parser): Remove redundant closures
2024-11-07 20:54:48 +01:00
René Kijewski
80811b5094
Merge pull request #219 from Kijewski/pr-ref-HtmlSafe
Implement `HtmlSafe` for all reference wrappers
2024-11-03 13:19:49 +01:00
René Kijewski
84b76ac966 Add HtmlSafe reference wrapper tests 2024-11-03 00:37:06 +01:00
René Kijewski
216836e08f Implement HtmlSafe for all reference wrappers 2024-11-03 00:21:55 +01:00
René Kijewski
34f18e6293
Merge pull request #221 from Kijewski/pr-more-AsIndent
Implement `AsIndent` for `NonZeroUsize` and `Wrapping<usize>`
2024-11-02 12:57:51 +01:00
René Kijewski
22b56ea163
Merge pull request #220 from Kijewski/pr-primitize_nz
Implement `PrimitiveType` for non-zero integers
2024-11-02 12:57:39 +01:00
René Kijewski
93a998298e
Merge pull request #218 from Kijewski/pr-faster-UrlencodeWriter
Omit `fmt::Formatter` machinery in URL encoding
2024-11-02 12:57:26 +01:00
René Kijewski
a4bd10a6f0
Merge pull request #217 from Kijewski/pr-FastWritable-prop-err
Let `FastWritable` propagate custom errors
2024-11-02 12:57:13 +01:00
René Kijewski
a3f264e4d8 Implement AsIndent for NonZeroUsize and Wrapping<usize> 2024-11-02 03:16:03 +01:00
René Kijewski
a4d6dbcee2 Implement PrimitiveType for non-zero integers 2024-11-02 02:57:19 +01:00
René Kijewski
975c808656 Omit fmt::Formatter machinery in URL encoding 2024-11-02 02:19:00 +01:00
René Kijewski
fa29e2ab61 Let FastWritable propagate custom errors 2024-11-02 02:12:41 +01:00
Guillaume Gomez
a9bf11bb7d
Merge pull request #216 from GuillaumeGomez/improve-filesizeformat
Relax `filesizeformat` filter requirements
2024-11-02 06:06:27 +08:00
René Kijewski
2062ce4a34 filters: optimize FilesizeFormatFilter 2024-11-01 22:50:59 +01:00
Guillaume Gomez
09466d8847 Make PrimitiveType trait public 2024-11-01 00:51:03 +01:00
Guillaume Gomez
c87be3ec36 Relax rules for filesizeformat filter
Remove `humansize` dependency
2024-11-01 00:51:03 +01:00
Guillaume Gomez
a8e92225cf
Merge pull request #213 from epage/winnow-04-cleanup
refactor(parser): Clean up prep for 0.5
2024-10-29 00:08:03 +08:00
Ed Page
bafa30f2c4 refactor(parser): Switch 'impl FnMut' to 'impl Parser'
We did most of this in 88c702e but missed some spots
2024-10-28 10:10:36 -05:00
Ed Page
b08fbebf8f refactor(parser): Rely on Parser trait rather than FnMut
We did most of this in 25067bd but missed some spots.
2024-10-28 10:10:36 -05:00