This PR was merged into the 4.4 branch.
Discussion
----------
Add return-types with help from DebugClassLoader in the CI
| Q | A
| ------------- | ---
| Branch? | 4.4
| Bug fix? | no
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | #33228
| License | MIT
| Doc PR | -
I've spent a great deal of time on this PR, experimenting with adding return types to the codebase.
TL;DR: my conclusion is that we cannot make it for 5.0.
There are two reasons for this:
1. The burden this will put on the community is immense, especially when considering that third party libs must also be updated for any apps to work at all on a return-typed 5.0. Symfony must add them last, not first.
2. We need return type covariance, yet this won't be available before PHP 7.4, while 5.0 supports 7.2.
What's attached?
- ~a draft patching logic in `DebugClassLoader` to add return-type where it discovers this should be done~
- return types added automatically thanks to #33283
- ~manual fixes for situations not handled (yet, if possible at all) by that logic in `DebugClassLoader`~ #33332
What's achieved? Tests are green \o/
At this stage, I think we have to acknowledge we won't add return-types in 5.0 but prepare a serious plan to add them in 6.0.
This plan could be:
- [x] make DebugClassLoader able to automate adding return types.
- [x] in 4.4: add all possible return types that don't break BC, e.g. in `Tests` and in generated code
- [x] spot and fix places where annotations aren't accurate, add more annotations where possible.
- [x] ensure `DebugClassLoader` triggers the best possible deprecations that encourage ppl to add return-types in their libs/apps. This means we could decide to disable the current ones (see #33235) and to re-enable them in 5.1. This will also give us the time to fine-tune the tooling (item 1. on this list)
Ideally, we could reach a point where we could test branch 4.4 *with* return-types: we'd use the tooling to add them automatically in the CI job, then we'd run tests and they should be green. Let's do this?
Help Wanted, here is how:
*With PHP 7.4*, run `php .github/patch-types.php`. This will add return types everywhere possible.
Then run tests, e.g. `./phpunit src/Symfony/Component/HttpFoundation --exclude-group legacy,issue-32995`
Here are the components that fail with return types added, please help me check them all with a PR on [my fork](https://github.com/nicolas-grekas/symfony/tree/eh-return-types):
- [x] src/Symfony/Bridge/Doctrine
- [x] src/Symfony/Bridge/Monolog
- [x] src/Symfony/Bridge/PhpUnit
- [x] src/Symfony/Bridge/ProxyManager
- [x] src/Symfony/Bridge/Twig
- [x] src/Symfony/Bundle/DebugBundle
- [x] src/Symfony/Bundle/FrameworkBundle
- [x] src/Symfony/Bundle/SecurityBundle
- [x] src/Symfony/Bundle/TwigBundle
- [x] src/Symfony/Bundle/WebProfilerBundle
- [x] src/Symfony/Bundle/WebServerBundle
- [x] src/Symfony/Component/Asset
- [x] src/Symfony/Component/BrowserKit
- [x] src/Symfony/Component/Cache
- [x] https://github.com/nicolas-grekas/symfony/pull/28 src/Symfony/Component/Config
- [x] src/Symfony/Component/Console
- [x] src/Symfony/Component/CssSelector
- [x] src/Symfony/Component/Debug
- [x] https://github.com/nicolas-grekas/symfony/pull/28 src/Symfony/Component/DependencyInjection
- [x] src/Symfony/Component/DomCrawler
- [x] src/Symfony/Component/Dotenv
- [x] src/Symfony/Component/ErrorHandler
- [x] src/Symfony/Component/ErrorRenderer
- [x] https://github.com/nicolas-grekas/symfony/pull/24 src/Symfony/Component/EventDispatcher
- [x] src/Symfony/Component/ExpressionLanguage
- [x] src/Symfony/Component/Filesystem
- [x] src/Symfony/Component/Finder
- [x] src/Symfony/Component/Form
- [x] src/Symfony/Component/HttpClient
- [x] src/Symfony/Component/HttpFoundation
- [x] src/Symfony/Component/HttpKernel
- [x] src/Symfony/Component/Inflector
- [x] src/Symfony/Component/Intl
- [x] src/Symfony/Component/Ldap
- [x] src/Symfony/Component/Lock
- [x] src/Symfony/Component/Mailer
- [x] src/Symfony/Component/Messenger
- [x] src/Symfony/Component/Mime
- [x] src/Symfony/Component/OptionsResolver
- [x] src/Symfony/Component/Process
- [x] src/Symfony/Component/PropertyAccess
- [x] src/Symfony/Component/PropertyInfo
- [x] https://github.com/nicolas-grekas/symfony/pull/25 src/Symfony/Component/Routing
- [x] https://github.com/nicolas-grekas/symfony/pull/26 src/Symfony/Component/Security
- [x] src/Symfony/Component/Security/Core
- [x] src/Symfony/Component/Security/Guard
- [x] src/Symfony/Component/Security/Http
- [x] https://github.com/nicolas-grekas/symfony/pull/29 src/Symfony/Component/Serializer
- [x] src/Symfony/Component/Security/Csrf
- [x] src/Symfony/Component/Stopwatch
- [x] src/Symfony/Component/Templating
- [x] https://github.com/nicolas-grekas/symfony/pull/27 src/Symfony/Component/Translation
- [x] src/Symfony/Component/Validator
- [x] src/Symfony/Component/VarDumper
- [x] src/Symfony/Component/VarExporter
- [x] src/Symfony/Component/WebLink
- [x] src/Symfony/Component/Workflow
- [x] src/Symfony/Component/Yaml
- [x] src/Symfony/Contracts
Commits
-------
11149a1fbb Add return-types with help from DebugClassLoader in the CI
This PR was merged into the 4.4 branch.
Discussion
----------
[HttpKernel] do not mock removed getPublicDir() method
| Q | A
| ------------- | ---
| Branch? | 4.4
| Bug fix? | no
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets |
| License | MIT
| Doc PR |
Commits
-------
54cb471 do not mock removed getPublicDir() method
This PR was merged into the 4.4 branch.
Discussion
----------
[ErrorHandler] make DebugClassLoader able to add return type declarations
| Q | A
| ------------- | ---
| Branch? | 4.4
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | #33236
| License | MIT
| Doc PR | -
This is the current state of the patching logic I'm using in `DebugClassLoader`.
I run it after a `composer i -o` with the excluded classes emptied.
It's not perfect, it requires manual changes/review, but it did the job so far.
Patching is enabled with the `SYMFONY_PATCH_TYPE_DECLARATIONS` env var.
The value of the env var is an URL-encoded array, with the following parameters as of now:
- `force=0/1/docblock`:
- `0` adds return types only to non-BC breaking places: internal/final/test methods;
- `1` adds return types everywhere possible, potentially breaking BC with child classes that didn't declare the return types before;
- `docblock` adds `@return` annotations to opt-out from deprecation notices that `DebugClassLoader` trigger otherwise - the annotation meaning: "I know a return type should be used here instead of an annotation, but I can't add it for BC reasons for now".
- `php71-compat=0/1`: to prevent using the `object` type when the code must be compatible with PHP 7.1
Commits
-------
72f6a970fc [ErrorHandler] make DebugClassLoader able to add return type declarations
This PR was merged into the 4.4 branch.
Discussion
----------
[TwigBridge] Throw an exception when one uses email as a context variable in a TemplatedEmail
| Q | A
| ------------- | ---
| Branch? | 4.4
| Bug fix? | no
| New feature? | yes <!-- please update src/**/CHANGELOG.md files -->
| BC breaks? | no <!-- see https://symfony.com/bc -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tests pass? | yes <!-- please add some, will be required by reviewers -->
| Fixed tickets | refs #33310
| License | MIT
| Doc PR | symfony/symfony-docs#... <!-- required for new features -->
<!--
Replace this notice by a short README for your feature/bugfix. This will help people
understand your PR and can be used as a start for the documentation.
Additionally (see https://symfony.com/roadmap):
- Bug fixes must be submitted against the lowest maintained branch where they apply
(lowest branches are regularly merged to upper ones so they get the fixes too).
- Features and deprecations must be submitted against branch 4.4.
- Legacy code removals go to the master branch.
-->
Commits
-------
0cc705bf7d [TwigBridge] Throw an exception when one uses email as a context variable in a TemplatedEmail
This PR was merged into the 4.3 branch.
Discussion
----------
[DomCrawler] Fix @throws
| Q | A
| ------------- | ---
| Branch? | 4.3
| Bug fix? | no
| New feature? | no <!-- please update src/**/CHANGELOG.md files -->
| BC breaks? | no <!-- see https://symfony.com/bc -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tests pass? | yes <!-- please add some, will be required by reviewers -->
| Fixed tickets | n/a <!-- #-prefixed issue number(s), if any -->
| License | MIT
| Doc PR | n/a
A `LogicException` is thrown, not a `RuntimeException`.
Commits
-------
a414c0323a [DomCrawler] Fix @throws
This PR was merged into the 4.4 branch.
Discussion
----------
[SecurityGuard] Deprecate returning non-boolean values from checkCredentials()
| Q | A
| ------------- | ---
| Branch? | 4.4
| Bug fix? | no
| New feature? | no
| BC breaks? | no
| Deprecations? | yes
| Tests pass? | yes
| Fixed tickets | prepares #33228
| License | MIT
| Doc PR | TODO
This PR suggests to deprecate implementations of `Symfony\Component\Security\Guard\AuthenticatorInterface::checkCredentials()` that return non-boolean values. This will allow us to add `bool` as return type declaration in the future.
https://github.com/nicolas-grekas/symfony/pull/26#discussion_r317084918
/cc @nicolas-grekas @weaverryan
Commits
-------
a0ca3afeca Deprecate returning non-boolean values from checkCredentials().
This PR was merged into the 4.4 branch.
Discussion
----------
[PhpUnitBridge] Bump SYMFONY_PHPUNIT_VERSION
| Q | A
| ------------- | ---
| Branch? | 4.4
| Bug fix? | no
| New feature? | yes
| BC breaks? | no <!-- see https://symfony.com/bc -->
| Deprecations? | no
| Tests pass? | yes <!-- please add some, will be required by reviewers -->
| Fixed tickets | #... <!-- #-prefixed issue number(s), if any -->
| License | MIT
| Doc PR | symfony/symfony-docs#... <!-- required for new features -->
👋 here we are again :)
i was wondering... cant we just install the latest minor by default, thus `SYMFONY_PHPUNIT_VERSION=8`? There should be no BC breaks, and would reduce the maintenance to one major bump, once a year ... isnt it? 🤔
Commits
-------
9cbd0e8809 [PhpUnitBridge] Bump SYMFONY_PHPUNIT_VERSION