This PR was submitted for the 2.x branch but it was merged into the 1.x branch instead.
Discussion
----------
[Documentation] Emphase the fact that the include tag outputs data
Commits
-------
ef6debec Emphase the fact that the include tag outputs data
This PR was submitted for the 3.x branch but it was merged into the 1.x branch instead.
Discussion
----------
Fix missing delimiter for preg_quote in lexer
Is is a really edge case (PHP < 7.3 and '#' as whitespace_trim symbol), but for the sake of consistency here's a proper fix.
Commits
-------
41605057 Fix missing delimiter for preg_quote in lexer
This PR was merged into the 1.x branch.
Discussion
----------
Add test to verify that filter is not working when template_from_string
When using {{ include(sandboxed = true) }} in conjunction with {{ template_from_string() }} - sandbox is not active.
Commits
-------
c7be1bb3 Fix sandbox support when using include(template_from_string())
04431228 Add test to verify that filter is not working when template_from_string is used.
This PR was squashed before being merged into the 1.x branch.
Discussion
----------
In |filter(), |map(), and |reduce(), throw a RuntimeError instead of a TypeError
If a template accidentally performs `|filter(...)` on a variable that isn't traversable (e.g. `null`), the calling code will encouter the raw `TypeError` that results from Twig trying to construct an `IteratorIterator` on that variable. This means that context information (e.g., in which exact template the error occurred, and on which line) is discarded, which makes it very difficult to debug your templates.
This commit adds code to throw a `RuntimeError` if Twig encounters a situation where there's no valid way to filter an array.
Commits
-------
567b1e2a In |filter(), |map(), and |reduce(), throw a RuntimeError instead of a TypeError
This PR was submitted for the 3.x branch but it was squashed and merged into the 1.x branch instead.
Discussion
----------
Make round brackets optional for one argument tests like sameas
Currently Twig forces round brackets when doing tests with `is` if there is an argument:
{{ 1 is same as(1) ? 'OK' }}
{{ 8 is divisible by(2) ? 'OK' }}
That syntax always bumped me, because without the brackets it would be easier to understand and write, especially for people who do not know Twig internals:
{{ 1 is same as 1 ? 'OK' }}
{{ 8 is divisible by 2 ? 'OK' }}
Twig only has the `same as` and `divisible by` tests which need arguments (in the base library), and for both you usually only need one argument, so it could make the template syntax more concise. [Jinja already supports this syntax](https://jinja.palletsprojects.com/en/2.11.x/templates/#tests) for one argument tests, so it would be one less difference between Jinja and Twig for people who use both.
The changes in this pull request should be fully backwards-compatible - instead of Twig throwing a SyntaxError it now accepts one argument when the round brackets are missing. I added an option for TwigTest to signal that there is one mandatory argument for the test, otherwise the ExpressionParser does not know it should look for that mandatory argument, and this feature is therefore available to anybody writing their own TwigTests, which could help extensions to Twig to simplify their syntax too.
I also adjusted the unit tests for `sameas` and `divisibleby` in hopefully a sensible way.
Commits
-------
1ee72d9e Make round brackets optional for one argument tests like sameas
This PR was submitted for the 3.x branch but it was merged into the 1.x branch instead.
Discussion
----------
Support object initialisation shortcut {a} == {a:a} from ES2015
Object declaration in Twig is very close to the Javascript syntax and is targeting the same profil of developers. In order to provide a smooth developer experience, Twig should implement some new feature of ECMAScript.
Since ECMAScript 2015, a short syntax can be used to declare an object when the key is identical to a defined variable (see [MDN doc](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Operators/Object_initializer))
```js
// Shorthand property names (ES2015)
let a = 'foo', b = 42, c = {};
let o = {a, b, c}
```
This PR adds the same syntax to Twig.
This can be very useful for `include ... with ... only` :
```twig
{% set title = "My title" %}
{% set image = "image.jpg" %}
{{ include "template.twig" with {title, image} only }}
# instead of
{{ include "template.twig" with {title: title, image: image} only }}
```
Commits
-------
133edb36 Support object init from variable
This PR was squashed before being merged into the 1.x branch.
Discussion
----------
More PHPUnit fixes
Commits
-------
f787c032 Migrate more tests
ad8d012e Update phpunit config
This PR was submitted for the 3.x branch but it was merged into the 1.x branch instead.
Discussion
----------
fix typo in ApplyTokenParser PHP doc
Typo
Commits
-------
47b5028f fix typo in ApplyTokenParser PHP doc
This PR was submitted for the 3.x branch but it was squashed and merged into the 1.x branch instead.
Discussion
----------
Fixes#3351
Sandbox mode is not disabled if syntax error occurs inside {% sandbox %} tag
Fixes#3351
Commits
-------
04658c9fFixes#3351
This PR was merged into the 1.x branch.
Discussion
----------
Fix a regression when not using a space before an operator
Commits
-------
841906b1 Fix a regression when not using a space before an operator
This PR was merged into the 1.x branch.
Discussion
----------
Unify code style
I noticed that the code style in `ExpressionParser` changed from v1 to v3. So this PR now fixes it, that the file in v1 looks more clean.
@fabpot this is a small addendum to #3363
Commits
-------
38cb89c2 Unify code style
This PR was squashed before being merged into the 1.x branch.
Discussion
----------
Allow trailing commas in macros + functions + filters
I implemented support for trailing commas in
- function calls
- filter arguments
- macro parameters + arguments (so call + definition)
Lists + maps are already supported https://twigfiddle.com/6atiz3
Is something missing?
Commits
-------
ccc2dbb0 Allow trailing commas in macros + functions + filters