* 3.x:
Add an additional example in the docs
Fix ignored parenthesis in expressions
Tweak previous merge
Added details in the doc of filters and functions of IntlExtension
Add more information about the filter and the negative operators
Update plural.rst: Fixing filter name
* 3.x:
Deprecate using Node directly, introduce EmptyNode and Nodes
Add support for inline comments
Update plural.rst: Fixing(?) broken links
Fix CS
Add support for accessing class constants with the dot operator
Fix getting a property on an object casted to an array
Replace strtr() by strtolower()
Improve escape deprecation message
Remove useless assign in compiled code
Add fixture filename as key
Be more precise about double-escaping
Fix template name in error for an unknown dynamic extends called from an include
* 3.x:
Rename a variable for more clarity
Set IteratorAggregate generics for Node
Add cross-link
Let's no deprecate the attribute function yet
Add more precise types for the registration of safe classes
Clarify coding standards
Fix markup
Fix markup
Clarify docs for the u filter
Allow to use a dynamic attribute on the . operator via ()
Remove most usage of foo/bar/baz in the docs
Tweak docs
Add StringCastUnary
* 3.x:
Fix typo
Add support for argument unpacking
Fix CS
Add JSON support for the file extension escaping strategy
Stringify dynamic mapping keys
Replace most empty() calls
Simplify parser calls when possible
* 3.x:
Improve the way one can deprecate a Twig callable
Bump version
Prepare the 3.14.0 release
Fix a security issue when an included sandboxed template has been loaded before without the sandbox context
Fix test
fix the version mergeGlobals() is deprecated since
Tweak code
Fix CS
Add more tests
Remove unused private methods
Bump version
* 3.x:
Fix doc markup
Add an example on how to iterate over a string
Remove NodeCaptureInterface from TypesNode
Use CPP in full code base
Add types tag
Bump version
Bump version
Prepare the 3.12.0 release
Fix CS
Add conditional return types to `ensureTraversable`
Add return type `isTraitable`
This PR was squashed before being merged into the 3.x branch.
Discussion
----------
Use CPP in full code base
Commits
-------
28923f42 Use CPP in full code base
This PR was squashed before being merged into the 3.x branch.
Discussion
----------
Mark implicit macro argument default values as such with an attribute in AST
This change causes no difference to compiled templates or to macro argument semantics.
Consider the following macro:
```twig
{% macro marco(po, lo = null) %}{% endmacro %}
```
With this change, the `ConstantExpression` for argument `po` will have an attribute `is_implicit`, whose value will be `true`. (Note that `lo` will not have that attribute.)
This allows node visitors to distinguish between arguments that do and those that do not have explicit default values even if the value is `null`.
This is useful for [static code analysis](https://github.com/twigphp/Twig/issues/4003).
For example, a static analysis tool might consider arguments with no explicit default value as non-optional.
Commits
-------
e83a8028 Mark implicit macro argument default values as such with an attribute in AST
* 3.x:
Move FunctionExpression/FilterExpression/TestExpression attributes from compilation time to parsing time
Cleanup the implementation of the defined test for constants