René Kijewski
a37d9f5a90
derive: more if-let
2025-07-21 20:43:46 +02:00
Guillaume Gomez
0d256b011d
Support generics in more locations
2025-07-21 00:38:55 +02:00
Guillaume Gomez
6de8ff8042
Forbid string literal suffix
2025-07-21 00:35:48 +02:00
Guillaume Gomez
9e32a28d11
Improve Span
information
2025-07-20 16:27:23 +02:00
Guillaume Gomez
6f4a799e77
Merge pull request #527 from Kijewski/pr-if-let-chain
...
Use if-let-chains
2025-07-14 12:34:48 +02:00
René Kijewski
f201285ede
Use if-let-chains
...
I ran `cargo +nightly clippy --all-targets --fix -- -D warnings` and
made only tiny manual improvements.
2025-07-13 23:16:26 +02:00
René Kijewski
1836ffde5a
parser: reject bare CR in doc comments
...
Resolves <https://issues.oss-fuzz.com/issues/431448399 >.
2025-07-13 21:39:46 +02:00
Guillaume Gomez
79d8f8886b
Update to rust edition 2024 and to MSRV 1.88
2025-07-07 22:23:29 +02:00
René Kijewski
e8a3dba413
parser: reject isolated CR in macro inputs, too
...
Resolves <https://issues.oss-fuzz.com/issues/429645376 >.
2025-07-07 19:11:04 +02:00
René Kijewski
d47b791957
parser: fix check_expr()
recursion
...
`check_expr()` did not recurse for all recursive `Expr`s. This PR fixes
the problem.
Resolves <https://issues.oss-fuzz.com/issues/429130577 >.
2025-07-05 21:08:44 +02:00
René Kijewski
c71aead21b
parser: understand nested block comments in macro calls
...
Fixes <https://issues.oss-fuzz.com/issues/427825995 >.
2025-06-29 11:21:33 +02:00
René Kijewski
83e0f9c9c4
Fix clippy warnings for rust 1.90
2025-06-29 08:52:44 +02:00
René Kijewski
6c32499533
parser: un-inline error message generation
...
This change cuts 40 to 150 instructions per parsing function that
generates a `ErrorContext`, and reduces the stack usage per function 500
or more bytes.
Also, it's less code you have to read and type per error message.
<details>
<summary>Benchmark results (benches/from_str.rs)</summary>
```text
librustdoc/all time: [177.24 µs 177.92 µs 178.56 µs]
thrpt: [79.081 MiB/s 79.369 MiB/s 79.674 MiB/s]
change:
time: [−2.3057% −2.0764% −1.8236%] (p = 0.00 < 0.05)
thrpt: [+1.8575% +2.1204% +2.3601%]
Performance has improved.
librustdoc/item_info time: [3.1792 µs 3.1890 µs 3.1973 µs]
thrpt: [49.216 MiB/s 49.344 MiB/s 49.495 MiB/s]
change:
time: [−4.3188% −3.9734% −3.6065%] (p = 0.00 < 0.05)
thrpt: [+3.7414% +4.1378% +4.5137%]
Performance has improved.
librustdoc/item_union time: [18.237 µs 18.297 µs 18.369 µs]
thrpt: [53.734 MiB/s 53.945 MiB/s 54.123 MiB/s]
change:
time: [−3.6142% −3.2857% −2.9748%] (p = 0.00 < 0.05)
thrpt: [+3.0660% +3.3974% +3.7497%]
Performance has improved.
librustdoc/page time: [83.761 µs 84.102 µs 84.414 µs]
thrpt: [73.355 MiB/s 73.627 MiB/s 73.927 MiB/s]
change:
time: [−2.4929% −2.2196% −1.9439%] (p = 0.00 < 0.05)
thrpt: [+1.9825% +2.2700% +2.5566%]
Performance has improved.
librustdoc/print_item time: [9.5466 µs 9.5528 µs 9.5603 µs]
thrpt: [98.756 MiB/s 98.834 MiB/s 98.898 MiB/s]
change:
time: [−1.4294% −1.2085% −0.9713%] (p = 0.00 < 0.05)
thrpt: [+0.9808% +1.2233% +1.4501%]
Change within noise threshold.
librustdoc/short_item_info
time: [8.8031 µs 8.8127 µs 8.8204 µs]
thrpt: [102.72 MiB/s 102.80 MiB/s 102.92 MiB/s]
change:
time: [−4.3207% −3.9712% −3.6035%] (p = 0.00 < 0.05)
thrpt: [+3.7382% +4.1355% +4.5158%]
Performance has improved.
librustdoc/sidebar time: [20.181 µs 20.218 µs 20.253 µs]
thrpt: [60.933 MiB/s 61.036 MiB/s 61.150 MiB/s]
change:
time: [−2.5827% −2.3381% −2.0839%] (p = 0.00 < 0.05)
thrpt: [+2.1283% +2.3940% +2.6512%]
Performance has improved.
librustdoc/source time: [7.2338 µs 7.2377 µs 7.2423 µs]
thrpt: [101.79 MiB/s 101.85 MiB/s 101.91 MiB/s]
change:
time: [−3.1453% −2.8930% −2.6317%] (p = 0.00 < 0.05)
thrpt: [+2.7028% +2.9792% +3.2475%]
Performance has improved.
librustdoc/type_layout_size
time: [4.3755 µs 4.3774 µs 4.3792 µs]
thrpt: [61.847 MiB/s 61.874 MiB/s 61.900 MiB/s]
change:
time: [−6.6822% −6.5162% −6.3593%] (p = 0.00 < 0.05)
thrpt: [+6.7912% +6.9704% +7.1607%]
Performance has improved.
librustdoc/type_layout time: [14.297 µs 14.316 µs 14.331 µs]
thrpt: [187.86 MiB/s 188.06 MiB/s 188.30 MiB/s]
change:
time: [−3.2479% −2.8916% −2.6244%] (p = 0.00 < 0.05)
thrpt: [+2.6952% +2.9777% +3.3569%]
Performance has improved.
```
</details>
2025-06-24 19:34:23 +02:00
René Kijewski
758a75bc54
parser: import winnow::error::ErrMode
2025-06-24 17:37:22 +02:00
René Kijewski
4f5272406f
parser: replace manual i_before
with .with_taken()
2025-06-24 15:02:41 +02:00
René Kijewski
1a1b507722
parser: refactor |filter
and {% filter %}
parsing
...
Deduplicated and easier to read code.
2025-06-24 15:02:41 +02:00
Guillaume Gomez
ca6573bf56
Rename Expr::Attr
into Expr::AssociatedItem
2025-06-24 14:09:34 +02:00
René Kijewski
338369a424
parser: box Expr::Filter
to reduce Expr
's size
2025-06-24 12:21:41 +02:00
René Kijewski
2086d4f898
parser: introduce askama_parser::expr::Call
2025-06-24 12:21:41 +02:00
René Kijewski
49d4397f51
parser: introduce askama_parser::expr::Range
2025-06-24 12:21:41 +02:00
René Kijewski
9f882e2ca7
parser: introduce askama_parser::expr::BinOp
2025-06-24 12:21:41 +02:00
René Kijewski
edfa31f9cf
parser: ensure valid paths in generics
2025-06-23 18:31:16 +02:00
René Kijewski
749d4edd89
Import ErrMode
2025-06-23 18:31:16 +02:00
René Kijewski
3f380721a2
parser: reject illegal raw identifiers in attribute access
2025-06-23 18:31:16 +02:00
René Kijewski
76b26cd5fa
parser: str lit must not be followed by suffix#
...
Resolves <https://issues.oss-fuzz.com/issues/426509683 >.
2025-06-21 19:43:28 +02:00
René Kijewski
5ec46333de
parser: fix {% raw %}
for delimiters starting with -
...
Looking at the code once more I came up with an odd edge case. This PR
fixes it.
2025-06-17 15:29:54 +02:00
René Kijewski
53f4eb0b81
Add missing #[inline]
for <_ as Deref>::deref()
2025-06-17 05:25:40 +02:00
René Kijewski
9c67e2a7d9
parser: implement Lit::parse()
without skip_till()
2025-06-17 05:22:12 +02:00
René Kijewski
61bdb49bc7
parser: implement {% raw %}
without skip_till
...
The implementation is longer than before, but also more correct:
Before, the input `{% raw %}{% endraw }}{% endraw %}` would be a syntax
error, now it renders the string `{% endraw }}`.
2025-06-17 01:01:39 +02:00
René Kijewski
b6acf7b3a8
parser: simplify {# comment #}
parsing
...
`winnow`'s `take_until` with feature `simd` enabled is implemented like
our "optimized" `skip_till`. There is no need to reinvent the wheel.
2025-06-16 23:49:58 +02:00
René Kijewski
568ced0c55
parser: recognize comments in macro calls
...
Fixes issue <https://issues.oss-fuzz.com/issues/425145246 >
2025-06-16 23:49:47 +02:00
Guillaume Gomez
e329f98433
Merge pull request #484 from Kijewski/pr-u+10ffff
...
parser: U+10FFFF is the highest Unicode codepoint
2025-06-16 16:50:36 +02:00
René Kijewski
00b640c93b
parser: better error message for bare CRs
2025-06-13 22:19:17 +02:00
René Kijewski
9ffa6b954c
parser: U+10FFFF is the highest Unicode codepoint
...
Fix a small typo: parsing '\u{123456}` should parse up to 6 characters,
inclusively.
2025-06-13 11:32:51 +02:00
René Kijewski
341b850351
parser: reject isolated CRs in string literals
...
According to <https://doc.rust-lang.org/reference/tokens.html#string-literals >.
Fixes <https://github.com/askama-rs/askama/issues/482 >.
Fixes <https://issues.oss-fuzz.com/issues/424227903 >.
2025-06-13 06:17:12 +02:00
René Kijewski
878b28b71c
parser: truly terrible code was generated in punctuation
2025-06-09 19:24:08 +02:00
René Kijewski
532e343c40
parser: reject illegal string literals
2025-06-09 19:24:08 +02:00
René Kijewski
66ce299a4a
parser: in macro calls reject cstrings with NULs
2025-06-09 19:24:07 +02:00
René Kijewski
d531c96d13
parser: recognize/reject prefixed ids and lits in macro calls
2025-06-05 18:44:02 +02:00
René Kijewski
ca50787f92
parser: macro calls need proper tokens
...
With this PR invalid tokens inside a macro call `macro_name!(..)` are
rejected. Otherwise we might emit invalid code that cannot be parsed by
rust.
2025-06-01 19:14:28 +02:00
Guillaume Gomez
9ee2afecfa
Add support for mutable variables
2025-06-01 16:26:57 +02:00
René Kijewski
377253945e
crate!
etc are invalid macro names
2025-05-23 21:01:00 +02:00
Guillaume Gomez
657dcea10f
Merge pull request #422 from pollend/feature/add-support-for-caller
...
feat: add caller pattern from jinja
2025-05-23 13:57:18 +02:00
René Kijewski
eaccbb02ae
Comparison operators cannot be chained
2025-05-23 01:26:19 +02:00
Guillaume Gomez
06c32d6d18
Allow super
in calls
2025-05-22 23:04:52 +02:00
Michael Pollind
f08ca469c9
add more test add reserved word caller
...
Signed-off-by: Michael Pollind <mpollind@gmail.com>
2025-05-22 22:50:40 +02:00
Michael Pollind
ef489b60f6
add test cases and rework spaces
...
Signed-off-by: Michael Pollind <mpollind@gmail.com>
2025-05-22 22:50:40 +02:00
Michael Pollind
ce73e73720
feat: add caller pattern and adjust syntax to closer match jinja
...
Signed-off-by: Michael Pollind <mpollind@gmail.com>
2025-05-22 22:50:40 +02:00
Michael Pollind
b8c85a07bd
feat: add caller pattern for macro
...
Signed-off-by: Michael Pollind <mpollind@gmail.com>
2025-05-22 22:50:39 +02:00
René Kijewski
f92ed0a074
Deny self
etc. as path element
2025-05-20 21:20:55 +02:00