Commit Graph

6593 Commits

Author SHA1 Message Date
Fabien Potencier df63bead99 minor #4243 Clarify block function (ruudk)
This PR was merged into the 3.x branch.

Discussion
----------

Clarify block function

It actually renders the block again.

Commits
-------

8c3df0c0 Clarify block function
2024-08-28 08:24:18 +02:00
Ruud Kamphuis 8c3df0c0bc Clarify block function
It actually renders the block again.
2024-08-28 08:20:39 +02:00
Fabien Potencier f9b7e815b0 bug #4242 Fix CoreExtension::captureOutput (nicolas-grekas)
This PR was merged into the 3.x branch.

Discussion
----------

Fix CoreExtension::captureOutput

Fix #4146

I forgot these lines in #4216

Commits
-------

7ba68667 Fix CoreExtension::captureOutput
2024-08-27 16:10:32 +02:00
Nicolas Grekas 7ba6866759 Fix CoreExtension::captureOutput 2024-08-27 16:00:06 +02:00
Fabien Potencier f9f7b7959f feature #4010 Mark implicit macro argument default values as such with an attribute in AST (drjayvee)
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
2024-08-27 13:21:41 +02:00
Jeroen Versteeg e83a8028f0 Mark implicit macro argument default values as such with an attribute in AST 2024-08-27 13:21:06 +02:00
Fabien Potencier 41459e0ddb Fix CS 2024-08-27 13:18:23 +02:00
Fabien Potencier 7e7808d56e bug #4237 Fix two-word tests precedence over one-word tests (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Fix two-word tests precedence over one-word tests

Closes #3282

Commits
-------

58d5780e Fix two-word tests precedence over one-word tests
2024-08-26 17:47:48 +02:00
Fabien Potencier 58d5780ef3 Fix two-word tests precedence over one-word tests 2024-08-26 17:47:41 +02:00
Fabien Potencier 220b95c080 minor #4239 Use Stringable when possible (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Use Stringable when possible

Commits
-------

11813da8 Use Stringable when possible
2024-08-26 17:46:18 +02:00
Fabien Potencier 11813da84d Use Stringable when possible 2024-08-26 17:41:21 +02:00
Fabien Potencier 303e3ea9d6 minor #4240 Fix tests (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Fix tests

Commits
-------

2511b658 Fix tests
2024-08-26 17:41:05 +02:00
Fabien Potencier 2511b658da Fix tests 2024-08-26 17:29:01 +02:00
Fabien Potencier 98a8210e25 feature #4236 Deprecate the spaceless filter (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Deprecate the spaceless filter

Closes #3576

Deprecate the `spaceless` filter for the following reasons:

* The performance is bad (as the work is done at runtime via a regexp)
* Optimizing the size of an HTML doc server side is "almost never" a good idea (compression is better and enough)
* There are some edge cases where you want to keep some spaces (see #3576)
* Controlling whitespace is possible and fine-grained via the dedicated Twig modifiers on `{{ }}`

If someone find it useful, re-creating it is trivial (`return trim(preg_replace('/>\s+</', '><', $content ?? ''));`),
but with so many caveats and not so many use cases, I think it does not belong to core.

Commits
-------

9fd4c487 Deprecate the spaceless filter
2024-08-26 17:00:09 +02:00
Fabien Potencier 9fd4c487e7 Deprecate the spaceless filter 2024-08-26 16:25:20 +02:00
Fabien Potencier 727cbe9a39 feature #4232 Deprecate some internal methods from Parser (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Deprecate some internal methods from Parser

Commits
-------

9e6c4a6a Deprecate some internal methods from Parser
2024-08-26 09:27:11 +02:00
Fabien Potencier 9e6c4a6ac1 Deprecate some internal methods from Parser 2024-08-26 09:24:03 +02:00
Fabien Potencier a8c5100e45 minor #4230 Move code from ExtendsTokenParser to Parser (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Move code from ExtendsTokenParser to Parser

Commits
-------

cf472760 Move code from ExtendsTokenParser to Parser
2024-08-26 07:57:31 +02:00
Fabien Potencier cf4727606a Move code from ExtendsTokenParser to Parser 2024-08-26 07:56:37 +02:00
Fabien Potencier e2f3435c81 feature #4229 Update Node::__toString() to include the node tag if set (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Update Node::__toString() to include the node tag if set

Commits
-------

157d36ae Update Node::__toString() to include the node tag if set
2024-08-24 17:34:12 +02:00
Fabien Potencier 157d36ae43 Update Node::__toString() to include the node tag if set 2024-08-24 17:28:38 +02:00
Fabien Potencier 4b99692e2a Fix class name 2024-08-24 17:12:56 +02:00
Fabien Potencier 758be4dde3 Fix error message 2024-08-24 12:57:39 +02:00
Fabien Potencier 7173182537 Fix code 2024-08-24 10:55:34 +02:00
Fabien Potencier 3a90b86f0a feature #4227 Deprecate returning null from TokenParserInterface::parse() (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Deprecate returning null from TokenParserInterface::parse()

Commits
-------

0c751361 Deprecate returning null from TokenParserInterface::parse()
2024-08-24 10:52:38 +02:00
Fabien Potencier 0c75136162 Deprecate returning null from TokenParserInterface::parse() 2024-08-24 10:52:24 +02:00
Fabien Potencier 63105a6410 feature #4225 Deprecate not passing a BodyNode instance as the body of a ModuleNode or MacroNode constructor (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Deprecate not passing a `BodyNode` instance as the body of a `ModuleNode` or `MacroNode` constructor

Commits
-------

51e93aa1 Deprecate not passing a BodyNode instance as the body of a ModuleNode constructor
2024-08-24 10:50:09 +02:00
Fabien Potencier 51e93aa130 Deprecate not passing a BodyNode instance as the body of a ModuleNode constructor 2024-08-24 10:49:53 +02:00
Fabien Potencier fb46572f94 minor #4224 Update a phpdoc (ModuleNode is final now) (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Update a phpdoc (ModuleNode is final now)

Commits
-------

313303b3 Update a phpdoc (ModuleNode is final now)
2024-08-24 10:48:55 +02:00
Fabien Potencier 992f637297 feature #4223 Add support for integers in methods of Twig\Node\Node that take a Node name (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Add support for integers in methods of `Twig\Node\Node` that take a Node name

Closes #3811

Commits
-------

1ee4210b Deprecate node names that are not strings or integers
2024-08-24 10:45:55 +02:00
Fabien Potencier 75d888f2e0 minor #4226 Remove Template::*_CALL const optimisations (smnandre)
This PR was merged into the 3.x branch.

Discussion
----------

Remove `Template::*_CALL` const optimisations

* Template::ANY_CALL
* Template::ARRAY_CALL
* Template::METHOD_CALL

Commits
-------

094892aa Remove `Template::*_CALL` const optimisations
2024-08-24 10:11:23 +02:00
Simon André 094892aa3b Remove Template::*_CALL const optimisations
* Template::ANY_CALL
* Template::ARRAY_CALL
* Template::METHOD_CALL
2024-08-24 10:03:24 +02:00
Fabien Potencier 313303b366 Update a phpdoc (ModuleNode is final now) 2024-08-24 09:53:44 +02:00
Fabien Potencier 1ee4210ba9 Deprecate node names that are not strings or integers 2024-08-23 22:35:24 +02:00
Fabien Potencier 86330fb9bc Update docs 2024-08-23 09:26:18 +02:00
Fabien Potencier 1fe2c00fa2 bug #4221 Deprecate OptimizerNodeVisitor::OPTIMIZE_TEXT_NODES (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Deprecate OptimizerNodeVisitor::OPTIMIZE_TEXT_NODES

Refs #4146

While trying to debug #4146, I realized that this optimization is not possible as we don't know how nodes are going to be used.

See the script provided in #4146 to reproduce the problem.

`@brandonkelly` Can you confirm that this fixes your problem? Maybe there is also an issue with yield vs echo, but the script provided in the issue runs fine for me after this PR.

Commits
-------

7121673c Deprecate OptimizerNodeVisitor::OPTIMIZE_TEXT_NODES
2024-08-23 09:23:28 +02:00
Fabien Potencier 7121673c9c Deprecate OptimizerNodeVisitor::OPTIMIZE_TEXT_NODES 2024-08-23 09:22:06 +02:00
Fabien Potencier e0077a4a6c minor #4219 Improve deprecation message (ruudk)
This PR was merged into the 3.x branch.

Discussion
----------

Improve deprecation message

See https://github.com/twigphp/Twig/pull/4199#discussion_r1723456834

/cc `@stof` `@fabpot`

Commits
-------

90107929 Improve deprecation message
2024-08-21 19:39:46 +02:00
Ruud Kamphuis 90107929da Improve deprecation message
See https://github.com/twigphp/Twig/pull/4199#discussion_r1723456834
2024-08-21 19:36:27 +02:00
Fabien Potencier 302971f34e Fix CS 2024-08-20 18:10:26 +02:00
Fabien Potencier f4bca4fa44 Remove obsolete comment 2024-08-20 18:06:11 +02:00
Fabien Potencier 5918aa939f feature #4212 ChainLoader constructor should accept iterable instead of array (TheCelavi)
This PR was merged into the 3.x branch.

Discussion
----------

ChainLoader constructor should accept iterable instead of array

Closes #4200

Commits
-------

6ef13d1e Resolves #4200
2024-08-20 18:00:03 +02:00
Nikola Svitlica a.k.a TheCelavi 6ef13d1e0b Resolves #4200 2024-08-20 17:30:37 +02:00
Fabien Potencier b9b8d52572 minor #4217 Refactor code (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Refactor code

Commits
-------

31037d0e Refactor code
2024-08-20 17:20:15 +02:00
Fabien Potencier 31037d0e51 Refactor code 2024-08-20 15:39:54 +02:00
Fabien Potencier 63e35b9620 Add a test 2024-08-20 09:34:22 +02:00
Fabien Potencier 3a307cd41d Update CHANGELOG and docs 2024-08-19 20:06:41 +02:00
Fabien Potencier 80c15749f9 feature #4216 Swap BC layer for yield-ready and reclaim perf loss (nicolas-grekas)
This PR was merged into the 3.x branch.

Discussion
----------

Swap BC layer for yield-ready and reclaim perf loss

Follows #3999

Fix #4146
Fix #4103

When `use_yield` is set to false (the default), this PR reverts the implementation of the `render()` method to use a wrapping output buffer instead of hooking between each steps of generators. In this mode, the behavior of the yield method is not "pure": it triggers a mix of yield and echo. But this is fine for render and display methods.

When `use_yield` is set to `true`, we skip that wrapping output buffer. This makes twig compatible with fibers (and this also makes compilation fail if a non-YieldReady extension is found.)

That makes the name of the option not ideal, but BC rulez FTW.

Commits
-------

5d1a19a8 Swap BC layer for yield-ready and reclaim perf loss
2024-08-19 20:02:33 +02:00
Nicolas Grekas 5d1a19a80c Swap BC layer for yield-ready and reclaim perf loss 2024-08-19 17:31:12 +02:00
Fabien Potencier 17997cf7fc minor #4214 Add test about Environment version constants. (VincentLanglet)
This PR was merged into the 3.x branch.

Discussion
----------

Add test about Environment version constants.

Hi `@fabpot`

The Environment Version constants seems to be manually updated.
https://github.com/twigphp/Twig/blob/fe36e084b4e208c44e30886053c8594bb99bd78f/src/Environment.php#L46-L51

A mistake was made on the 3.11 version, the MAJOR_VERSION was set to 4 instead of 3
https://github.com/twigphp/Twig/blob/e80fb8ebba85c7341a97a9ebf825d7fd4b77708d/src/Environment.php#L48

It was fixed in another version, but I think it could be useful to have some test about the consistency of all those constants.
Such test would have fail for the 3.11 version and avoid the mistake.

Commits
-------

254abc8c Add test about version
2024-08-19 08:48:36 +02:00