2595 Commits

Author SHA1 Message Date
René Kijewski
ab1c3d499c book: update mdbook version and highlight jinja blocks 2025-07-27 02:44:34 +02:00
René Kijewski
6d849880d9 parser: remove one indirection in punction() finding 2025-07-26 00:51:39 +02:00
René Kijewski
b8e11e86b6 parser/derive: replaces usages of Expr/Node with Box<Expr>/Box<Node>
This means that there is much less copying of data done at runtime.

Two new `unsafe` transmutations had to be added, both in the same
function, because even though `&T` and `Box<T>` have the same layout,
rust currently rejects any `Box`es in a `const` value. Miri is happy
with `askama_derive`'s tests.

<details>
<summary>askama_derive benchmark</summary>

```text
synthetic/hello_world   time:   [35.108 µs 35.271 µs 35.412 µs]
                        thrpt:  [1.3735 MiB/s 1.3790 MiB/s 1.3854 MiB/s]
                 change:
                        time:   [−6.2826% −5.1769% −4.1151%] (p = 0.00 < 0.05)
                        thrpt:  [+4.2917% +5.4595% +6.7038%]
                        Performance has improved.

librustdoc/item_info.html
                        time:   [39.687 µs 39.957 µs 40.186 µs]
                        thrpt:  [3.9157 MiB/s 3.9381 MiB/s 3.9649 MiB/s]
                 change:
                        time:   [−3.5603% −2.5102% −1.3793%] (p = 0.00 < 0.05)
                        thrpt:  [+1.3986% +2.5749% +3.6917%]
                        Performance has improved.

librustdoc/item_union.html
                        time:   [101.64 µs 101.95 µs 102.27 µs]
                        thrpt:  [9.6516 MiB/s 9.6818 MiB/s 9.7111 MiB/s]
                 change:
                        time:   [−4.0638% −3.5966% −3.1652%] (p = 0.00 < 0.05)
                        thrpt:  [+3.2686% +3.7307% +4.2359%]
                        Performance has improved.

librustdoc/page.html    time:   [379.80 µs 381.74 µs 383.65 µs]
                        thrpt:  [16.140 MiB/s 16.221 MiB/s 16.304 MiB/s]
                 change:
                        time:   [−6.6429% −5.2611% −4.3384%] (p = 0.00 < 0.05)
                        thrpt:  [+4.5351% +5.5533% +7.1156%]
                        Performance has improved.

librustdoc/print_item.html
                        time:   [88.483 µs 88.849 µs 89.313 µs]
                        thrpt:  [10.571 MiB/s 10.626 MiB/s 10.670 MiB/s]
                 change:
                        time:   [−2.5658% −2.0639% −1.5517%] (p = 0.00 < 0.05)
                        thrpt:  [+1.5761% +2.1074% +2.6333%]
                        Performance has improved.

librustdoc/short_item_info.html
                        time:   [90.028 µs 90.157 µs 90.281 µs]
                        thrpt:  [10.035 MiB/s 10.049 MiB/s 10.063 MiB/s]
                 change:
                        time:   [−2.4814% −1.9435% −1.3640%] (p = 0.00 < 0.05)
                        thrpt:  [+1.3829% +1.9821% +2.5445%]
                        Performance has improved.

librustdoc/sidebar.html time:   [106.91 µs 108.17 µs 109.57 µs]
                        thrpt:  [11.263 MiB/s 11.408 MiB/s 11.543 MiB/s]
                 change:
                        time:   [−4.2433% −3.3985% −2.6066%] (p = 0.00 < 0.05)
                        thrpt:  [+2.6763% +3.5181% +4.4314%]
                        Performance has improved.

librustdoc/source.html  time:   [71.149 µs 71.416 µs 71.652 µs]
                        thrpt:  [10.289 MiB/s 10.322 MiB/s 10.361 MiB/s]
                 change:
                        time:   [−2.7381% −2.1144% −1.5588%] (p = 0.00 < 0.05)
                        thrpt:  [+1.5835% +2.1601% +2.8152%]
                        Performance has improved.

librustdoc/type_layout.html
                        time:   [88.405 µs 88.920 µs 89.595 µs]
                        thrpt:  [30.049 MiB/s 30.277 MiB/s 30.453 MiB/s]
                 change:
                        time:   [+0.6665% +1.8855% +3.0267%] (p = 0.00 < 0.05)
                        thrpt:  [−2.9378% −1.8506% −0.6621%]
                        Change within noise threshold.

librustdoc/type_layout_size.html
                        time:   [44.048 µs 44.246 µs 44.398 µs]
                        thrpt:  [6.1004 MiB/s 6.1213 MiB/s 6.1488 MiB/s]
                 change:
                        time:   [−5.8376% −4.9477% −4.0335%] (p = 0.00 < 0.05)
                        thrpt:  [+4.2030% +5.2052% +6.1996%]
                        Performance has improved.
```
</details>
2025-07-25 23:44:34 +02:00
dependabot[bot]
f0a1fa467d build(deps): update criterion requirement from 0.6 to 0.7
Updates the requirements on [criterion](https://github.com/bheisler/criterion.rs) to permit the latest version.
- [Changelog](https://github.com/bheisler/criterion.rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bheisler/criterion.rs/compare/0.6.0...0.7.0)

---
updated-dependencies:
- dependency-name: criterion
  dependency-version: 0.7.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-25 23:36:35 +02:00
Guillaume Gomez
37ded317f1
Merge pull request #540 from Kijewski/pr-uninline-expr-call
derive: un-inline `Expr::Call` handling for `{{ expressions }}` and remove parentheses
2025-07-24 18:13:16 +02:00
René Kijewski
bbf9d1c234 derive: remove parentheses before handling {{ (expr) }} 2025-07-24 16:53:51 +02:00
René Kijewski
bbb2932da2 derive: un-inline Expr::Call handling for {{ expressions }}
This is by far the biggest part of the function.
2025-07-24 16:27:55 +02:00
René Kijewski
22092ecb15 parser: un-inline more error messages
Tiny follow up to [#501].

[#501]: <https://redirect.github.com/askama-rs/askama/pull/501>
2025-07-23 18:23:59 +02:00
Guillaume Gomez
8dcc794a9e
Merge pull request #538 from Kijewski/pr-always-false
derive: make `EvaluatedResult` know its unknown result
2025-07-23 15:10:53 +02:00
René Kijewski
78c0ab97bf derive: make EvaluatedResult know its unknown result
This PR adds a `WithSpan<Expr>` member to `EvaluatedResult::Unknown`,
so `Generator::evaluate_condition()` does not have to return a tuple.
2025-07-23 14:45:43 +02:00
Guillaume Gomez
6ac150e096
Merge pull request #533 from seijikun/mr-callexpr-named
Implement #531: Allow named arguments in call expr macro invocations
2025-07-22 13:17:04 +02:00
Markus Ebner
48d5dba024
Fix #531: Allow named arguments in expr macro calls 2025-07-22 12:33:26 +02:00
Markus Ebner
0613a509b6
Add unit-test for #531 2025-07-22 00:58:36 +02:00
Markus Ebner
526ce78cf0
Add ui tests for named arguments in rust call expressions 2025-07-22 00:58:33 +02:00
René Kijewski
70b41f704e Address comments 2025-07-21 22:31:05 +02:00
René Kijewski
564a8463ee More tests for DefaultFilterable + impl for floats 2025-07-21 22:31:05 +02:00
René Kijewski
ba7b0a7967 Move DefaultFilterable into its own file 2025-07-21 22:31:05 +02:00
René Kijewski
b2b0d4cbba Add filters |default, |assigned_or and |defined_or
Also, `enum Pluralize<S, P>` is renamed into `enum Either<L, R>` and
exported.
2025-07-21 22:31:05 +02:00
Guillaume Gomez
3317858d1d
Merge pull request #532 from Kijewski/pr-more-if-let
derive: more if-let
2025-07-21 21:33:49 +02:00
René Kijewski
a37d9f5a90 derive: more if-let 2025-07-21 20:43:46 +02:00
Markus Ebner
53ddd3cfc3 Fix #517: Implement expr-call syntax for macro invocations 2025-07-21 16:55:31 +02:00
Markus Ebner
1b1d604dbc Add unit-tests for #517 2025-07-21 16:55:31 +02:00
Markus Ebner
fcf793c35a generator: Move macro invocation code generation to helper module
Introduced a new helpers module where code generation can be placed.
For this, some generator methods had to become pub(crate) instead of private.
2025-07-21 16:55:31 +02:00
Guillaume Gomez
cf558be7e6 Add regression test for generics support in macro default value and call 2025-07-21 00:38:55 +02:00
Guillaume Gomez
fc2b0349ac Add ui test for generics on loop.cycle 2025-07-21 00:38:55 +02:00
Guillaume Gomez
0d256b011d Support generics in more locations 2025-07-21 00:38:55 +02:00
Guillaume Gomez
da0bdcc34b Add new fuzzing test case 2025-07-21 00:35:48 +02:00
Guillaume Gomez
6de8ff8042 Forbid string literal suffix 2025-07-21 00:35:48 +02:00
Guillaume Gomez
d8bf38978c Add fuzzing test 2025-07-20 16:27:23 +02:00
Guillaume Gomez
57554f3d42 Update tests 2025-07-20 16:27:23 +02:00
Guillaume Gomez
9e32a28d11 Improve Span information 2025-07-20 16:27:23 +02:00
Guillaume Gomez
f7e88e021a Replace ANSI escape characters in generated code output 2025-07-19 13:24:38 +02:00
Guillaume Gomez
c1e4d4cd59 Improve askama_derive error output 2025-07-19 13:24:38 +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
Guillaume Gomez
e876730191
Merge pull request #528 from Kijewski/pr-no-nightly-rtd
book: fix rust-docs on readthedocs
2025-07-14 12:33:49 +02:00
Guillaume Gomez
97366c741b
Merge pull request #526 from Kijewski/6236623325167616
parser: reject bare CR in doc comments
2025-07-14 12:32:12 +02:00
René Kijewski
f691e72429 book: fix rust-docs on readthedocs
We want to use the nightly features `doc_cfg` and `doc_auto_cfg` when we
build our documentation. Still, we want to use a stable compiler, e.g.
to have stable links in our docs, so we opt in to the use of unstable
features with the use of `RUSTC_BOOTSTRAP=1`.

The problem is that `proc-macro2` only checks whether it can use any
unstable features, not which unstable features, and it always assumes
that you run the newest nightly rust version if the use of unstable
features is possible.

This PR disables the detection if unstable features are available to
`proc-macro2` by pretending that we are in an early stage of a
bootstrapped rustc build.
2025-07-14 01:49:11 +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
Guillaume Gomez
b16b47b4a9
Merge pull request #524 from Kijewski/5387873899839488
parser: reject isolated CR in macro inputs, too
2025-07-07 19:43:31 +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
Guillaume Gomez
37d2bad936
Merge pull request #521 from Kijewski/pr-rtd-1.88
book: update to rust 1.88
2025-07-06 12:47:19 +02:00
René Kijewski
a757469a2b book: update to rust 1.88 2025-07-06 02:32:59 +02:00
Guillaume Gomez
bbcb70e3f5
Merge pull request #510 from seijikun/mr-storable-caller
Treat caller() as variable with support for aliasing
2025-07-05 23:21:39 +02:00
Guillaume Gomez
6b936f4c1b
Merge pull request #519 from Kijewski/4793932351602688
parser: fix `check_expr()` recursion
2025-07-05 22:48:00 +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
Markus Ebner
d50cb4fcb7
Fix #505 and 507 - Treat caller() as local variable with aliasing 2025-07-05 03:21:34 +02:00
Markus Ebner
fca6e6f78b
Switch Rust edition of askama_derive to 2024 2025-07-05 03:21:34 +02:00
Markus Ebner
2bd436417a
Add unit-tests for #505 2025-07-05 03:21:34 +02:00