friendsofphp/php-cs-fixer
A tool to automatically fix PHP code style
v3.95.21
262M downloads/mo
#196 most downloaded on composer
PHP-CS-Fixer/PHP-CS-Fixer
What this package is like to depend on
Last release 2 days ago
21 Aug 2026
Ships fairly regularly
a new release about every 3 weeks
Nearly every release is documented
notes for 353 of 382 stable releases
Nothing withdrawn
no release was ever pulled
14 years old
388 releases · first in 2012
47 releases in the last 12 months
see the full history below
Release timeline
388 releases · Nov 2012 to Aug 2026Releases
latest 60 of 388-
v3.95.2121 Aug 2026Release notes
Open source →What's Changed
- fix:
StatementIndentationFixer- do not treat ternary colon as block start by @lazerg in #9795 - perf: Introduce new candidate check for transformers by @live627 in #9770
- perf: Optimize
NameQualifiedTransformertoken insertion by @live627 in #9759 - CI: add BC check by @keradus in #9791
- deps: upgrade dev-tools by @keradus in #9793
Full Changelog: v3.95.20...v3.95.21
Release notes
Open source →- fix:
StatementIndentationFixer- do not treat ternary colon as block start (#9795) - perf: Introduce new candidate check for transformers (#9770)
- perf: Optimize
NameQualifiedTransformertoken insertion (#9759) - CI: add BC check (#9791)
- deps: upgrade dev-tools (#9793)
- fix:
-
v3.95.2019 Aug 2026Release notes
Open source →What's Changed
- fix:
PsrAutoloadingFixer- do not throw when the file cannot be resolved on disk by @olivier-zenchef in #9762 - test:
NoUnusedImportsFixerTest- add new cases around quoted values by @keradus in #9784 - test: drop
mikey179/vfsstreamby @kubawerlos in #9787 - refactor:
Transformers- move looping over tokens directly into each transformer individually by @keradus in #9782
New Contributors
- @olivier-zenchef made their first contribution in #9762
Full Changelog: v3.95.19...v3.95.20
Release notes
Open source →- fix:
PsrAutoloadingFixer- do not throw when the file cannot be resolved on disk (#9762) - refactor: Transformers - move looping over tokens directly into each transformer individually (#9782)
- test: drop
mikey179/vfsstream(#9787) - test: NoUnusedImportsFixerTest - add new cases around quoted values (#9784)
- fix:
-
v3.95.1917 Aug 2026Release notes
Open source →What's Changed
- fix:
ClassDefinitionFixer- keep multiline constructor args when anonymous class has bothextendsandimplementsby @momala454 in #9625 - fix:
SelfStaticAccessorFixer- do not stop fixing a class after astaticreturn type by @sinemacula-ben in #9774 - fix: binary_operator_spaces alignment for nested single-line arrays in multiline array by @chriscpty in #9654
- chore:
Runner- ignore coverage of non-deterministic parallel branches by @kubawerlos in #9785 - chore: Fix incorrect URL in CommentsAnalyzer.php docblock by @live627 in #9772
- CI: fix using
PHP_CS_FIXER_FAST_LINT_TEST_CASESby @kubawerlos in #9783 - deps: bump phpstan/phpstan from 2.2.7 to 2.2.8 in /dev-tools in the phpstan group by @dependabot[bot] in #9779
- deps: bump squizlabs/php_codesniffer from 4.0.1 to 4.0.4 in /dev-tools by @dependabot[bot] in #9768
- deps: bump the all group across 1 directory with 2 updates by @dependabot[bot] in #9767
- test:
AbstractFixerTestCase- usespl_object_id()to fix PHP 8.6 deprecations by @kubawerlos in #9786 - test: introduce
TestCaseUtils::createTemporaryDirectory()helper by @kubawerlos in #9788 - test: ProjectCodeTest - restore the duplicate check in data providers by @semx in #9761
New Contributors
- @sinemacula-ben made their first contribution in #9774
- @semx made their first contribution in #9761
- @momala454 made their first contribution in #9625
- @chriscpty made their first contribution in #9654
Full Changelog: v3.95.18...v3.95.19
Release notes
Open source →- fix: binary_operator_spaces alignment for nested single-line arrays in multiline array (#9654)
- fix:
ClassDefinitionFixer- keep multiline constructor args when anonymous class has bothextendsandimplements(#9625) - fix:
SelfStaticAccessorFixer- do not stop fixing a class after astaticreturn type (#9774) - chore: Fix incorrect URL in CommentsAnalyzer.php docblock (#9772)
- chore:
Runner- ignore coverage of non-deterministic parallel branches (#9785) - CI: fix using
PHP_CS_FIXER_FAST_LINT_TEST_CASES(#9783) - deps: bump phpstan/phpstan from 2.2.7 to 2.2.8 in /dev-tools in the phpstan group (#9779)
- deps: bump squizlabs/php_codesniffer from 4.0.1 to 4.0.4 in /dev-tools (#9768)
- deps: bump the all group across 1 directory with 2 updates (#9767)
- test: introduce
TestCaseUtils::createTemporaryDirectory()helper (#9788) - test: ProjectCodeTest - restore the duplicate check in data providers (#9761)
- test:
AbstractFixerTestCase- usespl_object_id()to fix PHP 8.6 deprecations (#9786)
- fix:
-
v3.95.1830 Jul 2026Release notes
Open source →What's Changed
- deps: bump the phpstan group in /dev-tools with 2 updates by @dependabot[bot] in #9748
- deps: update dev-tools by @keradus in #9754
- perf: Limit token search in
simplified_if_returnby @live627 in #9747 - CI: attach provenance and SBOM attestations to the released image by @kobihikri in #9751
New Contributors
- @kobihikri made their first contribution in #9751
Full Changelog: v3.95.17...v3.95.18
Release notes
Open source →- CI: attach provenance and SBOM attestations to the released image (#9751)
- deps: bump the phpstan group in /dev-tools with 2 updates (#9748)
- deps: update dev-tools (#9754)
- perf: Limit token search in
simplified_if_return(#9747)
-
v3.95.1724 Jul 2026Release notes
Open source →What's Changed
- perf:
Token::equals()- Avoid building intermediary arrays by @live627 in #9739 - perf:
Tokens::findSequence()- improve looping logic by @live627 in #9737
Full Changelog: v3.95.16...v3.95.17
Release notes
Open source →- perf:
Token::equals()- Avoid building intermediary arrays (#9739) - perf:
Tokens::findSequence()- improve looping logic (#9737)
- perf:
-
v3.95.1624 Jul 2026Release notes
Open source →What's Changed
- fix:
PowToExponentiationFixer- do not produce two consecutive whitespace tokens by @lazerg in #9735 - fix:
NoSuperfluousPhpdocTagsFixerwith multiple hidden params by @HypeMC in #9736 - CI: introduce
perfas new PR type by @keradus in #9742 - deps: update dev deps by @keradus in #9743
- chore: do not remove ParaUnit for PHPUnit v13, as they are now compatible by @keradus in #9579
- test: AbstractIntegrationTestCase - externalized FixerFactory creation by @keradus in #9744
New Contributors
Full Changelog: v3.95.15...v3.95.16
Release notes
Open source →- fix:
NoSuperfluousPhpdocTagsFixerwith multiple hidden params (#9736) - fix:
PowToExponentiationFixer- do not produce two consecutive whitespace tokens (#9735) - chore: do not remove ParaUnit for PHPUnit v13, as they are now compatible (#9579)
- CI: introduce
perfas new PR type (#9742) - deps: update dev deps (#9743)
- test: AbstractIntegrationTestCase - externalized FixerFactory creation (#9744)
- fix:
-
v3.95.1515 Jul 2026Release notes
Open source →- fix: self-update - fix "Access Denied" error when running on Windows (#9731)
-
v3.95.1415 Jul 2026Release notes
Open source →What's Changed
- deps: bump the phpstan group in /dev-tools with 2 updates by @dependabot[bot] in #9717
- deps: bump shipmonk/dead-code-detector from 1.3.0 to 1.3.1 in /dev-tools in the shipmonk group across 1 directory by @dependabot[bot] in #9718
- chore: cleanup
FunctionToConstantFixerby @kubawerlos in #9719 - chore: add code coverage ignore annotations to parallel runner and worker by @kubawerlos in #9721
- test:
ConfigurationResolverTest- fix types by @kubawerlos in #9725 - test:
ClassDefinitionFixerTest- improve PHPDocs by @kubawerlos in #9726 - test:
GeneralAttributeRemoveFixerTest- improve data provider types by @kubawerlos in #9727 - test: HeaderCommentFixerTest - improve invalid configuration types by @kubawerlos in #9728
- fix:
TrailingCommaInMultilineFixer- do not add trailing comma after first-class callable by @kubawerlos in #9722 - fix:
ClassAttributesSeparationFixer- handle property with hooks as last class element by @kubawerlos in #9724 - fix:
SingleClassElementPerStatementFixer- do not break PHP syntax when splitting properties with disjunctive normal form type by @kubawerlos in #9723 - test:
ProjectCodeTest- improve PHPDocs by @kubawerlos in #9730 - deps: allow to run PHPUnit v12 directly for project, without future-ready CI workarounds by @keradus in #9580
Full Changelog: v3.95.13...v3.95.14
Release notes
Open source →- fix:
ClassAttributesSeparationFixer- handle property with hooks as last class element (#9724) - fix:
SingleClassElementPerStatementFixer- do not break PHP syntax when splitting properties with disjunctive normal form type (#9723) - fix:
TrailingCommaInMultilineFixer- do not add trailing comma after first-class callable (#9722) - chore: add code coverage ignore annotations to parallel runner and worker (#9721)
- chore: cleanup
FunctionToConstantFixer(#9719) - test: HeaderCommentFixerTest - improve invalid configuration types (#9728)
- test:
ClassDefinitionFixerTest- improve PHPDocs (#9726) - test:
ConfigurationResolverTest- fix types (#9725) - test:
GeneralAttributeRemoveFixerTest- improve data provider types (#9727) - test:
ProjectCodeTest- improve PHPDocs (#9730) - deps: allow to run PHPUnit v12 directly for project, without future-ready CI workarounds (#9580)
- deps: bump shipmonk/dead-code-detector from 1.3.0 to 1.3.1 in /dev-tools in the shipmonk group across 1 directory (#9718)
- deps: bump the phpstan group in /dev-tools with 2 updates (#9717)
-
v3.95.1310 Jul 2026Release notes
Open source →What's Changed
- fix:
SelfAccessorFixer- do not replace constant with same name as class in the middle of a static access chain by @kubawerlos in #9716 - fix:
SingleClassElementPerStatementFixer- do not drop type of typed constants by @kubawerlos in #9706
Full Changelog: v3.95.12...v3.95.13
Release notes
Open source →- fix:
SelfAccessorFixer- do not replace constant with same name as class in the middle of a static access chain (#9716) - fix:
SingleClassElementPerStatementFixer- do not drop type of typed constants (#9706)
- fix:
-
v3.95.1207 Jul 2026Release notes
Open source →What's Changed
- deps: bump the all group across 2 directories with 1 update by @dependabot[bot] in #9704
- chore: unblock self-approval by @keradus in #9699
- chore: cleanup
RuleSetDocumentationGeneratorby @kubawerlos in #9705 - deps: bump crate-ci/typos from 1.47.2 to 1.48.0 in /.github/workflows in the all group across 1 directory by @dependabot[bot] in #9712
- deps: bump the phpstan group in /dev-tools with 2 updates by @dependabot[bot] in #9710
- deps: bump shipmonk/dead-code-detector from 1.2.1 to 1.3.0 in /dev-tools in the shipmonk group across 1 directory by @dependabot[bot] in #9711
- fix:
BinaryOperatorSpacesFixer- do not align nested array in yield with following yields by @kubawerlos in #9708 - deps: PHPUnit - PHP 8.6 compat changes by @keradus in #9714
Full Changelog: v3.95.11...v3.95.12
Release notes
Open source →- fix:
BinaryOperatorSpacesFixer- do not align nested array in yield with following yields (#9708) - chore: cleanup
RuleSetDocumentationGenerator(#9705) - chore: unblock self-approval (#9699)
- deps: bump crate-ci/typos from 1.47.2 to 1.48.0 in /.github/workflows in the all group across 1 directory (#9712)
- deps: bump shipmonk/dead-code-detector from 1.2.1 to 1.3.0 in /dev-tools in the shipmonk group across 1 directory (#9711)
- deps: bump the all group across 2 directories with 1 update (#9704)
- deps: bump the phpstan group in /dev-tools with 2 updates (#9710)
- deps: PHPUnit - PHP 8.6 compat changes (#9714)
-
v3.95.1125 Jun 2026Release notes
Open source →- fix:
NoBreakCommentFixer- handle enum cases,TokensAnalyzer::isEnumCase- fix handling nested switch-cases (#9565) - deps: bump actions/checkout from 6 to 7 in /.github/workflows in the all group across 1 directory (#9694)
- deps: bump dev deps (#9702)
- deps: bump phpstan/phpstan-symfony from 2.0.19 to 2.0.20 in /dev-tools in the phpstan group (#9693)
- test: use correct test precondition failure mode in PharTest (#9700)
- fix:
-
v3.95.1019 Jun 2026Release notes
Open source →- fix:
TokensAnalyzer- handleT_PUBLIC_SET,T_PROTECTED_SET,T_PRIVATE_SET(#9696)
- fix:
-
v3.95.919 Jun 2026Release notes
Open source →- chore: apply
class_keyword(#9689) - refactor: change Fixers execution order to always-deterministic (#9690)
- chore: apply
-
v3.95.816 Jun 2026Release notes
Open source →- fix:
SingleClassElementPerStatementFixer- do not drop modifiers when splittingfinalconstants/properties (#9687)
- fix:
-
v3.95.713 Jun 2026Release notes
Open source →- fix:
ClassReferenceNameCasingFixer- do not change case of typed class constant names (#9686)
- fix:
-
v3.95.613 Jun 2026Release notes
Open source →- chore: Docker - ignore root-user warning for pip (#9682)
- chore: fix typo in comment about fixer configuration (#9675)
- chore: narrow
Preg::match/Preg::matchAllsubject string type when match is truthy (#9668) - deps: bump alpine from 3.23 to 3.24 in the all group (#9679)
- deps: bump codecov/codecov-action from 6 to 7 in /.github/workflows in the all group across 1 directory (#9681)
- deps: bump shipmonk/dead-code-detector from 1.1.3 to 1.2.0 in /dev-tools in the shipmonk group across 1 directory (#9661)
- deps: update dev-deps (#9683)
- deps: upgrade deep-deps for dev-tools (#9677)
- fix:
PhpUnitAttributesFixer- correctly handle@requiresPHPUnit with space-separated version constraint (#9684) - UX: Cache - explicit deprecation for usage of non-handled objects in rules configuration, as they silently fail now; add support for JsonSerializable config values (#9678)
-
v3.95.509 Jun 2026Release notes
Open source →- chore: Cleanup
assert()and add more precisePreg::matchAll()return type (#9667) - chore: cleanup
GroupImportFixer(#9671) - chore: improve
TypeExpression(#9665) - chore: please markdown-lint (#9659)
- chore: use more
assertcalls (#9666) - deps: Allow installation of
sebastian/diff:^9.0(#9663) - deps: bump crate-ci/typos from 1.47.0 to 1.47.2 in /.github/workflows in the all group across 1 directory (#9662)
- docs/refactor: clarify bracket types naming (#5915)
- fix: Add support for
phpunit/phpunit:^13.2inPhpUnitTestCaseStaticMethodCallsFixer(#9664) - fix: Use
AgentDetectorto detect presence of AI agent only when@autoformat has been selected (#9658) - fix:
PhpdocAddMissingParamAnnotationFixer- skip attribute tokens when extracting parameter type (#9634) - fix:
StaticPrivateMethodFixer- fix for private constructor and abstract static method (#9598) - refactor:
simplified_if_return- applyFix to use slices for token insertion (#9670)
- chore: Cleanup
-
v3.95.403 Jun 2026Release notes
Open source →- chore: improve
ArrayIndentationFixer(#9643) - chore: improve
ClassDefinitionFixer(#9645) - chore: improve
ControlCaseStructuresAnalyzer(#9644) - chore: improve
NoAliasFunctionsFixer(#9647) - chore: improve
NoSuperfluousPhpdocTagsFixer(#9646) - chore: improve
PhpUnitTestCaseStaticMethodCallsFixer(#9649) - chore: improve
Token(#9650) - chore: improve
WorkerException(#9648) - chore: minor updates around PHPStan (#9651)
- deps: bump crate-ci/typos from 1.46.2 to 1.47.0 in /.github/workflows in the all group across 1 directory (#9639)
- deps: bump PHPStan to 2.2.1 (#9635)
- deps: minor upgrades of dev-tools (#9653)
- fix: Address credential exposure concern related to using
ergebnis/agent-detectorfor detecting the presence of an AI agent (#9656) - test: improve data providers return types (#9642)
- chore: improve
-
v3.95.329 May 2026Release notes
Open source →- fix:
MultilinePromotedPropertiesFixer- fix fornewin initializers (#9619) - fix:
PhpdocLineSpanFixer- run afterNoSuperfluousPhpdocTagsFixer(#9615) - CI: add generic phpstan/phpstan-deprecation-rules, so usage of old deprecated constants is detected (#9636)
- CI: replace PHP
8.6snapshotwithnightlyin matrix (#9628) - deps: bump crate-ci/typos from 1.46.0 to 1.46.1 in /.github/workflows in the all group across 1 directory (#9624)
- deps: bump crate-ci/typos from 1.46.1 to 1.46.2 in /.github/workflows in the all group across 1 directory (#9631)
- deps: bump ergebnis/composer-normalize from 2.51.0 to 2.52.0 in /dev-tools (#9627)
- deps: bump the phpstan group in /dev-tools with 2 updates (#9626)
- deps: upgrade misc deps (#9621)
- refactor: AttributeBlockNoSpacesFixer - no need for loop when we already know bracket indices (#9446)
- fix:
-
v3.95.215 May 2026Release notes
Open source →- fix:
MethodArgumentSpaceFixer- avoid collapsing multi-line arguments (#9559) - fix:
ModifierKeywordsFixer- do not break PHP syntax for closures in constant expressions (#9596) - fix:
NoRedundantReadonlyPropertyFixer- fixTypeErrorwhen trait contains anonymous class (#9457) - fix:
PhpUnitAttributesFixer- add missing handling ofCoversMethodand naive handling ofCoversTrait(#9588) - fix:
TextReporter- always show summary footer (#9595) - deps: bump crate-ci/typos from 1.45.1 to 1.46.0 in /.github/workflows in the all group across 1 directory (#9605)
- deps: bump ergebnis/composer-normalize from 2.50.0 to 2.51.0 in /dev-tools (#9561)
- deps: bump phpstan/phpstan from 2.1.46 to 2.1.47 in /dev-tools in the phpstan group (#9560)
- deps: bump phpstan/phpstan from 2.1.51 to 2.1.52 in /dev-tools in the phpstan group (#9601)
- deps: bump PHPUnit patch versions (#9593)
- deps: bump shipmonk/dead-code-detector from 1.0.0 to 1.1.0 in /dev-tools in the shipmonk group across 1 directory (#9569)
- deps: bump the all group across 1 directory with 2 updates (#9570)
- deps: bump the phpstan group across 1 directory with 2 updates (#9608)
- deps: update
facile-it/paraunitto ^2.11 (#9589) - deps: upgrade PHPUnit in GitHub Actions (#9577)
- chore: .gitattributes - export-ignore for logo.md (#9611)
- chore: .gitattributes - sort entries (#9612)
- chore: Add CS commit to .git-blame-ignore-revs
- chore: Add CS commit to .git-blame-ignore-revs
- chore: add tests to
PhpdocTagCasingFixerTest(#9610) - chore: cleanup
AbstractFopenFlagFixer(#9592) - chore: cleanup
BlankLineBetweenImportGroupsFixer(#9562) - chore: cleanup
ControlStructureBracesFixer(#9609) - chore: cleanup
NoExtraBlankLinesFixer(#9567) - chore: cleanup
OrderedImportsFixer(#9603) - chore: cleanup
PhpdocSingleLineVarSpacingFixer(#9591) - chore: cleanup
PhpdocToReturnTypeFixer(#9558) - chore: CS - apply
PhpUnitRequiresConstraintFixerfromhttps://github.com/kubawerlos/php-cs-fixer-custom-fixers(#9581) - chore: CS - apply
php_unit_attributesrule (#9578) - chore: ensure consistent
@authorname per email (#9606) - chore: fix wrong test Attribute (#9586)
- chore: infection - define staticAnalysisTool (#9607)
- chore: move Codecov config (#9597)
- CI: move PHPUnit version management earlier to prevent composer installation phase to run 2 times (#9587)
- CI: specify Codecov token (#9556)
- CI: use Codecov for code coverage (#9553)
- test:
NoUnsetCastFixerTest- run any test on PHP >= 8 (#9585)
- fix:
-
v3.95.112 Apr 2026Release notes
Open source →- chore: add tests for
FinalInternalClassFixer(#9547) - chore: cleanup
PhpdocToParamTypeFixer(#9550) - fix:
MethodArgumentSpaceFixer- Do not collapse nested arguments when usingensure_single_line_for_single_argumentoption foron_multiline(#9552) - test: fix type after variable name in
@paraminPhpdocToParamTypeFixerTest(#9549)
- chore: add tests for
-
v3.95.011 Apr 2026Release notes
Open source →- feat: Add option
remove_existing_declarationtodeclare_strict_typesfixer (#9384) - feat: Add
excludeoption tophpdoc_typesrule (#9479) - feat: introduce 'list-rules' command (#9512)
- feat: introduce
NoWhitespaceInEmptyArrayFixer(#8155) - feat: Resolve to
jsonformat whenAI_AGENTenvironment variable is set (#9542) - feat:
@Symfony:risky- addvoid_return(#9546) - feat:
GlobalNamespaceImportFixer- support first-class callable syntax (#9484) - feat:
MethodArgumentSpaceFixer- addensure_single_line_for_single_argumentoption foron_multiline(#9504) - feat:
MultilinePromotedPropertiesFixer- turn multiline promoted properties into singleline when there are fewer thanminimum_number_of_parameters(#9501) - feat:
PhpdocLineSpanFixer- addfunctionoption (#9439) - feat:
ReturnAssignmentFixer- skip variables with the named@vartags with new optionskip_named_var_tags(#9464) - fix:
ArrayPushFixer- do not stop fixing whenarray_pushwith 1 argument found (#9508) - fix:
BinaryOperatorSpacesFixer- make it works correctly with multiple match cases (#9470) - fix:
EchoTagSyntaxFixer- do not break syntax for single line comments (#9506) - fix:
PhpUnitTestClassRequiresCoversFixer- do not add@coversNothingto anonymous classes (#9481) - fix:
SimplifiedNullReturnFixer- do not removenullfrom property hook (#9471) - docs: extend docs about exit code (#9526)
- docs: StaticLambdaFixer - document example how to prevent conversion (#9502)
- DX: change default PHP_CS_FIXER_FAST_LINT_TEST_CASES=1 and run full linting of test cases only on highest and lowest PHP versions in CI (#9448)
- chore: add missing test for
SetTypeToCastFixer(#9518) - chore: add test for NoMultipleStatementsPerLineFixer (#9533)
- chore: add tests for
BracesPositionFixer(#9522) - chore: add tests for
PsrAutoloadingFixer(#9541) - chore: cleanup MagicConstantCasingFixer (#9494)
- chore: cleanup NoNullPropertyInitializationFixer (#9493)
- chore: cleanup
ClassAttributesSeparationFixer(#9545) - chore: cleanup
GeneralAttributeRemoveFixer(#9520) - chore: cleanup
GlobalNamespaceImportFixerTest(#9482) - chore: cleanup
NoTrailingCommaInSinglelineFixer(#9537) - chore: cleanup
OrderedAttributesFixer(#9521) - chore: cleanup
PhpUnitExpectationFixer(#9505) - chore: commands cleanup (#9478)
- chore: ensure that regex
TypeExpression::REGEX_TYPESdoes not have unnamed capturing group (#9514) - chore: exclude logo.png and composer-dependency-analyser.php from Composer export (#9516)
- chore: group dependabot updates for Docker and GitHub Actions (#9535)
- chore: improve
AbstractPhpUnitFixer(#9519) - chore: improve
ArrayPushFixer(#9515) - chore: update
FunctionsAnalyzer(#9483) - chore:
MbStrFunctionsFixer- remove the nevertruecondition (#9509) - chore:
ModernizeStrposFixer- remove the nevertrueconditions (#9510) - chore:
NoAliasFunctionsFixer- cleanup invalid set handling (#9511) - CI: add
failOnDeprecation="true"to PHPUnit config (#8935) - CI: cleanup jobs (#9449)
- CI: configure Dependabot for composite actions (#9529)
- CI: do not run
issue_8828_c.teston macOS for now (#9528) - CI: fix Dependabot paths (#9530)
- CI: more of ubuntu-slim (#9450)
- CI: move spelling checks to dedicated workflow (#9451)
- deps: bump actions/cache from 4 to 5 in /.github/composite-actions/install-composer-deps (#9531)
- deps: bump actions/github-script from 8 to 9 in /.github/composite-actions/setup-php-with-composer-deps (#9544)
- deps: bump crate-ci/typos from 1.43.5 to 1.44.0 (#9476)
- deps: bump crate-ci/typos from 1.44.0 to 1.45.0 (#9523)
- deps: bump docker/build-push-action from 6 to 7 (#9486)
- deps: bump docker/login-action from 3 to 4 (#9477)
- deps: bump docker/metadata-action from 5 to 6 (#9474)
- deps: bump docker/setup-buildx-action from 3 to 4 (#9475)
- deps: bump docker/setup-qemu-action from 3 to 4 (#9472)
- deps: bump nick-invision/retry from 3 to 4 (#9491)
- deps: bump nick-invision/retry from 3 to 4 in /.github/composite-actions/install-composer-deps (#9532)
- deps: bump phpstan/phpstan from 2.1.40 to 2.1.42 in /dev-tools in the phpstan group (#9490)
- deps: bump phpstan/phpstan from 2.1.42 to 2.1.44 in /dev-tools in the phpstan group (#9503)
- deps: bump phpstan/phpstan-symfony from 2.0.14 to 2.0.15 in /dev-tools in the phpstan group (#9458)
- deps: bump shipmonk/dead-code-detector from 0.14.1 to 0.15.1 in /dev-tools in the shipmonk group (#9473)
- deps: bump shipmonk/dead-code-detector from 0.15.1 to 1.0.0 in /dev-tools in the shipmonk group (#9543)
- deps: update PHPStan (#9452)
- deps: upgrade deps (#9527)
- deps: upgrade PHPUnit patch versions (#9455)
- refactor: ConfigurableFixerTemplateFixer - move handling example file from fixing logic to definition (#9525)
- refactor: rename
PhpdocTypesNoDuplicatesFixertoPhpdocNoDuplicateTypesFixer(#9381) - test: fix CI for Windows (#9492)
- test:
MethodArgumentSpaceFixermust run beforeNoTrailingCommaInSinglelineFixer(#9507) - test: use
PhpUnitTestCaseStaticMethodCallsFixerTest::testInvalidConfiguration(#9460)
- feat: Add option
-
v3.94.220 Feb 2026Release notes
Open source →- fix:
AttributeBlockNoSpacesFixer- skipping some attributes when multiple present (#9445) - fix:
NoUnusedImportsFixer- do not remove constant types (#9442) - fix:
PhpdocLineSpanFixer- handle unions and intersections in properties (#9438) - deps: bump crate-ci/typos from 1.43.4 to 1.43.5 (#9444)
- fix:
-
v3.94.118 Feb 2026Release notes
Open source →- chore: add tests for
ArgumentsAnalyzer(#9422) - chore: bump dev-tools to PHP 8.5 (#9432)
- chore: ConfigurableFixerTemplateFixer - allow to remove option from computed options (#9437)
- chore: fix Tokens::getIterator() type (#9433)
- chore: reduce Generator into iterable (#9435)
- chore: reduce Iterator->Traversable and Traversable->iterable when possible (#9434)
- CI: cleanup sca.yml (#9430)
- deps: bump crate-ci/typos from 1.43.2 to 1.43.4 (#9426)
- deps: bump ergebnis/composer-normalize from 2.49.0 to 2.50.0 in /dev-tools (#9427)
- deps: bump the phpstan group in /dev-tools with 4 updates (#9425)
- deps: dependabot group for shipmonk/ (#9429)
- docs: switch sets ordering to case-insensitive (#9423)
- test: check PHP env in CI jobs (#9428)
- chore: add tests for
-
v3.94.011 Feb 2026Release notes
Open source →- UX: enable parallel runner by default (#9408)
- feat: Add option
casetophpdoc_line_spanfixer (#9391) - feat: PhpdocLineSpanFixer - support docs for classes, trait usages and other code lines (#8832)
- feat:
VoidReturnFixer- allow to skip lambdas (#9417) - chore: fix comment (#9404)
- chore: Linter tests for Schrodinger's validity (#9398)
- chore: ModernizeStrposFixer - no need for configuration hooks (#9419)
- chore:
VoidReturnFixer- better describe exceptions (#9418) - CI: no need for special handling of MacOS (#9403)
- CI: run tests using PHPUnit 13 (#9410)
- deps: bump crate-ci/typos from 1.42.1 to 1.42.3 (#9395)
- deps: bump crate-ci/typos from 1.42.3 to 1.43.2 (#9405)
- deps: bump ergebnis/composer-normalize from 2.48.2 to 2.49.0 in /dev-tools (#9396)
- deps: bump the phpstan group in /dev-tools with 2 updates (#9394)
- deps: upgrade dev-deps (#9411)
- DX: use custom name for custom config (#9402)
- fix: absolute path in reports (#9399)
- fix: indentation for backed enum with multiline assignment (#9362)
- fix: Runner - fix occasional sub-process freeze on parallel execution with
--stop-on-violation(#9393) - fix:
NoUnreachableDefaultArgumentValueFixer- fix for closures (#9409) - fix:
UseArrowFunctionsFixer- do not convert closure in attribute (#9416) - test: create PHP 8.5 risky compat test (#9420)
- UX: Do not run interactive configurator when rules are passed explicitly (#9378)
-
v3.93.128 Jan 2026Release notes
Open source →- fix:
ErrorOutput- do not show "begin diff"/"end diff" when there is no diff (#9361) - fix:
UseArrowFunctionsFixer- don't convert lambda withuse($var)clause if it includes another file (#9389) - DX: use null coalescing operator (#9380)
- fix:
-
v3.93.023 Jan 2026Release notes
Open source →- feat: add
ModernSerializationMethodsFixer(#9108) - feat: Add
NoRedundantReadonlyPropertyFixer(#9339) - feat: add
PhpdocTypesNoDuplicatesFixer(#9312) - feat: do not suggest config file creation if config explicitly skipped with
--config=-(#9379) - feat: improve handling of
@seetags inFullyQualifiedStrictTypesFixer(#9350) - feat: PER attribute block no spaces (#9264)
- feat: php_unit_test_case_static_method_calls - change default 'call_type' to 'this' for v4 (#9328)
- feat: protected_to_private - add to
@Symfonyset (#9303) - feat: PSR/PER-CS - adjust
braces_positionrule (#9329) - feat: remove
php_unit_test_case_static_method_callsfrom PHPUnit sets (#9341) - feat:
@PHP7x0MigrationRisky- update configuration ofRandomApiMigrationFixerto match it's newly updated v4 defaults (#9368) - feat:
@Symfony:risky- extend set withmodern_serialization_methods(#9366) - feat:
@Symfony:risky- extend set withstatic_lambda(#9365) - feat:
@Symfony- enableno_unneeded_control_parentheses.statements.negative_instanceof(#9336) - feat:
@Symfony- extend set withno_useless_else(#9363) - feat:
@Symfony- extend set withno_useless_return(#9364) - feat:
RandomApiMigrationFixer- allow to convertmt_getrandmaxandmt_srand(#9367) - fix: properly expose memory usage while running parallel mode (#9352)
- fix:
ModifierKeywordsFixer- closure in attribute (#9358) - fix:
NoUselessElseFixer- handle conditional symbol declarations (#9347) - fix:
OrderedClassElementsFixer- closure in attribute (#9357) - fix:
PhpUnitAttributesFixer- do not add for annotation@testWithwhen attributeTestWithalready present (#9354) - refactor: add base key-existence check for cross-process communication in parallel runner (#9360)
- refactor: FixerDocumentGenerator - limit the scope to create rule instance in future mode only (#9359)
- test: fix compatibility towards Symfony 8 (#9370)
- test: update PHP 8.5 compat test to cover closure in attribute and prevent conversion to empty arrow function (#9373)
- chore: add clarifying
@returnannotations toConfig(#9337) - chore: fix
assign.propertyTypeerror from PHPStan (#9332) - chore: PHPUnit sets - cleanup test, update docs/comments (#9342)
- chore: simplify
phpstan:baselinecommand (#9346) - deps: bump crate-ci/typos from 1.41.0 to 1.42.0 (#9338)
- deps: bump crate-ci/typos from 1.42.0 to 1.42.1 (#9376)
- deps: bump dev deps (#9369)
- deps: bump the phpstan group in /dev-tools with 3 updates (#9375)
- docs: show default value for future mode (#9355)
- DX: add env for easier finding which fixer break a PHP syntax (#9356)
- feat: add
-
v3.92.508 Jan 2026Release notes
Open source →- fix:
CombineConsecutiveUnsetsFixer- proper handling of trailing comma (#9335) - chore: cleanup self-config file (#9324)
- chore: fix
variable.undefinederror from PHPStan (#9330) - deps: bump crate-ci/typos from 1.40.0 to 1.41.0 (#9325)
- docs: extend Q&A for creating the rule (#9331)
- fix:
-
v3.92.404 Jan 2026Release notes
Open source →- fix:
ComposerJsonReader- handle more syntaxes (#9327) - UX: Runner/Parallel/Process - friendly message when tmp dir not writable (#9319)
- docs: fix RST links (#9321)
- DX: internal commands for working with tokens (#9251)
- chore: Add CS commit to .git-blame-ignore-revs
- chore: apply trailing_comma_in_multiline: elements.arguments (#9314)
- deps: upgrade dev-deps (#9318)
- fix:
-
v3.92.318 Dec 2025Release notes
Open source →- fix: using Rule Customisation Policy with parallel runner (#9309)
- chore: phpstan - cover
.php-cs-fixer.dist.php(#9311) - chore:
.php-cs-fixer.dist.php- drop wrongly calledignoreVCSIgnored(#9310)
-
v3.92.217 Dec 2025Release notes
Open source →- fix: let
@php-cs-fixer-ignoreaccept custom fixer names (#9306) - chore: introduce
PHP_CS_FIXER_IGNORE_MISMATCHED_RULES_EXCEPTIONS(#9307)
- fix: let
-
v3.92.115 Dec 2025Release notes
Open source →- chore: update php-compatibility config (#9302)
- deps: bump actions/cache from 4 to 5 (#9295)
- deps: bump phpstan/phpstan-phpunit from 2.0.9 to 2.0.10 in /dev-tools in the phpstan group (#9293)
- deps: bump shipmonk/phpstan-baseline-per-identifier from 2.2.0 to 2.3.0 in /dev-tools (#9294)
- docs: update README.md (#9277)
- DX: make all
testFix*methods have no more than 4 parameters (#9298) - DX: make all
testFix*methods have second parameter$input(#9297) - DX: rename parameter
$configto$configuration(#9299) - DX: restrict
testFix*parameter names (#9301) - DX: use
WhitespacesFixerConfigin tests (#9300) - fix: describe - skip listing automated rules, as cannot determine them in projects (#9304)
- test: PHPUnit sets - check that set is providing proper target for rules (#9296)
- test:
ProjectCodeTest::testExpectedInputOrder- move checks fortestFix...methods (#9291)
-
v3.92.012 Dec 2025Release notes
Open source →- feat: exception for rules via
@php-cs-fixer-ignoreannotation (#9280) - feat: exception for rules via
Rule Customisation Policy(#9107) - feat:
PhpUnitTestCaseStaticMethodCallsFixer- add handling ofgetStubBuilder(#9276) - feat:
PhpUnitTestCaseStaticMethodCallsFixer- addtargetoption (#8498) - chore: '.php-cs-fixer.dist.php' - remove no longer needed rule, 'expectedDeprecation' annotation does not exist for long time (#9266)
- chore: fix
arguments.counterror from PHPStan (#9258) - chore: fix
generator.valueTypeerror from PHPStan (#9259) - chore: fix
plus.*NonNumericerrors from PHPStan (#9260) - chore: Runner - better input types handling (#9286)
- chore: watch out for non-final classes (#9262)
- chore:
Config::getFinder()- fix typehinting (#9288) - deps: bump alpine from 3.22 to 3.23 (#9269)
- deps: bump phpcompatibility/php-compatibility from 10.0.0-alpha1 to 10.0.0-alpha2 in /dev-tools (#9271)
- deps: bump the phpstan group in /dev-tools with 3 updates (#9270)
- deps: dev-tools - upgrade deep deps (#9272)
- docs: exception for rules in dedicated doc files, for easier discoverability (#9281)
- docs: upgrade docs to not use legacy set (#9282)
- DX: make all
testFix*methods have first parameter$expected(#9289) - refactor: fix violation of 'no_useless_concat_operator' (#9267)
- refactor:
ProjectCodeTest- refactortestExpectedInputOrdertest (#9290) - Revert (partially) "feat: Finder to find dot-files by default in v4/future-mode (#9187)" (#9287)
- test: RuleSetTest - check against non-deprecated variant of PHPUnit sets (#9265)
- UX: exception for rules via
Rule Customisation Policy- better error message for wrong customisers (#9279) - UX: exception for rules via
Rule Customisation Policy- prevent policy without version (#9278)
- feat: exception for rules via
-
v3.91.305 Dec 2025 -
v3.91.201 Dec 2025Release notes
Open source →- fix: fix support call-site generic variance (#9253)
- chore: adjust autoloader to exclude all Internal classes in classmap (#9252)
- CI: set
PHP_CS_FIXER_IGNORE_ENVfor PHP 8.6 (#9254)
-
v3.91.101 Dec 2025Release notes
Open source →- UX: show warning on PHP-mismatch only for 'fix' and 'check' commands (#9243)
- docs: unify rule/ruleset doc tags (#9250)
- refactor: don't expose internal commands/rules (#9245)
- refactor: memoize fixer names (#9219)
- refactor: use custom set for internal rules (#9247)
- test: show that
describecommand works well for custom sets (#9246)
-
v3.91.028 Nov 2025Release notes
Open source →- UX: init command (#9215)
- feat: PHP 8.5 compatibility support (#9234)
- feat: Add
StringableForToStringFixer(#9218) - feat: support call-site generic variance (#9212)
- feat: Symfony - add stringable_for_to_string to set (#9235)
- chore: do not mark NamespaceAnalysis as internal, because it's part of public API interface (#9193)
- chore: ExampleRuleset - improve test fixture name (#9214)
- chore: traits - require interfaces or base classes (#9086)
- CI: Add PHPStan rule to validate public API surface completeness (#9196)
- CI: auto-select PHP_MAX for special jobs (#9231)
- CI: drop duplicated PHP 8.4 jobs (#9229)
- CI: fix SCA after Symfony 7.4.0 release (#9226)
- CI: no more need for solving PHP 8.4 deprecations in
/vendor/anymore (#9230) - CI: switch trivial jobs to ubuntu-slim (#9232)
- CI: upgrade
.php-cs-fixer.php-highest.phpto fully reflect PHP 8.4 (#9233) - deps: bump actions/checkout from 5 to 6 (#9210)
- deps: bump crate-ci/typos from 1.39.2 to 1.40.0 (#9237)
- deps: bump shipmonk/composer-dependency-analyser from 1.8.3 to 1.8.4 in /dev-tools (#9238)
- deps: bump shipmonk/dead-code-detector from 0.13.5 to 0.14.0 in /dev-tools (#9239)
- deps: bump Symfony v8 to RC (#9221)
- deps: bump Symfony v8 to stable (#9222)
- deps: update xdebug (#9228)
- fix: move config template to non-excluded folder (#9241)
- fix:
DeclareStrictTypesFixer- do not duplicatestrict_typesif it is already present, with other directive (#9225) - fix:
FullyQualifiedStrictTypesFixer- fix crash onT_OPEN_TAG_WITH_ECHO(#9217) - test: allow CI to define both, numeric and non-numeric PHP versions/builds (#9236)
- test: do not allow to fail PHP 8.5 job (#9224)
- test: let's not dance on the edge of the JIT stack limit (#9211)
- test: run smoke tests on any OS (#9242)
- test: update PHP 8.5 compatibility test (#9223)
-
v3.90.020 Nov 2025Release notes
Open source →- feat: always have
@PHPXxYMigration(:risky)sets for supported PHP versions (#9207) - feat: Finder to find dot-files by default in v4/future-mode (#9187)
- fix: manage the space between operator and version on Composer JSON reader (#9203)
- fix: PhpdocAnnotationWithoutDotFixer lowercases
@paramtype when description starts with all-uppercase word (#9169) - UX: groom warning of PHP mismatch for runtime vs target project minimum supported version (#9202)
- UX: Rules override warning (#9188)
- UX:
describecommand - allow to visualize Set as tree (#9179) - docs: rework
.php-cs-fixer.phplocal config file docs (#9185) - docs: update Set descriptions (#9183)
- chore: Declare support for Symfony 8 (#9172)
- chore: add missing v4 TODOs (#9197)
- chore: mark one remaining Analyzer to become internal (#9194)
- chore: mark v2 leftovers with v4 TODO (#9181)
- chore: no need for deprecation trigger in internal DataProviderAnalysis (#9192)
- deps: bump crate-ci/typos from 1.38.1 to 1.39.0 (#9175)
- deps: bump crate-ci/typos from 1.39.0 to 1.39.2 (#9205)
- deps: bump the phpstan group in /dev-tools with 2 updates (#9204)
- DX: different name for special configs (#9180)
- DX: improve types for
testInvalidConfigurationmethods (#9206) - DX:
describecommand - allow to expose rules without sets via@-alias (#9178) - refactor: move assertions from
tearDownintoassertPostConditionsto fixTest code or tested code did not remove its own error handlerswarning (#9182) - refactor: prevent tests to use actual repository
.php-cs-fixer.dist.phpfile (#9177) - test: add more test(s) for ComposerJsonReader (#9200)
- test: ensure calling parent method from hook-alike methods (#9184)
- feat: always have
-
v3.89.206 Nov 2025Release notes
Open source →- fix:
NoUnneededBracesFixer- do not crash on multiline group import (#9160) - chore: Standardize repository to use British English spelling (#9154)
- CI: ensure enforced Symfony version is installed (#9174)
- deps: bump php-coveralls to v2.9 (#9173)
- refactor: FixerDocumentGenerator::getSetsOfRule - cache resolved sets (#9170)
- refactor: FixerDocumentGenerator::getSetsOfRule - use cache (#9171)
- fix:
-
v3.89.124 Oct 2025Release notes
Open source →- fix: ComposerJsonReader - fix handling asterisk (#9166)
- docs: cookbook - update to mention custom fixer option (#9164)
- DX: add links in
cookbook_fixers.rst(#9162) - deps: upgrade
phpcompatibility/*to alpha of next MAJOR instead of using dev branch, plus other minor upgrades (#9163)
-
v3.89.018 Oct 2025Release notes
Open source →- feat: autofix "no-return" phpdoc type to "never" (#9073)
- feat: support keeping strict_types=0 in DeclareStrictTypesFixer (#9121)
- feat:
NoUnneededBracesFixer- remove unneeded braces from imports (#9118) - fix:
FullyQualifiedStrictTypesFixer- replacing the real FQCN with a non-existent one (#8962) - fix:
PhpdocToCommentFixeron property hooks (#9123) - fix:
PhpUnitMethodCasingFixerto not cause a duplicate method declaration (#9124) - fix:
StaticLambdaFixer- do not make function static when it contains anonymous class having$thisin the constructor (#9088) - fix:
UseArrowFunctionsFixer- do not produce two consecutive whitespace tokens (#9151) - UX: better gitlab reporting - add content field (#9152)
- UX: better gitlab reporting - more user-friendly description field (#9141)
- UX: better gitlab reporting for location.lines (#9149)
- UX: Warn if executed php version is higher than the minimum php version defined in composer.json (#9134)
- chore: add UX title pattern (#9132)
- chore: explicitly use php interpreter for paraunit (#9126)
- chore: extend composer scripts (#9127)
- chore: fix shellcheck installation for Darwin (#9125)
- chore: replace PHPDocs with
assertcalls (#9144) - deps: bump crate-ci/typos from 1.36.3 to 1.38.1 (#9136)
- deps: bump phpstan/phpstan from 2.1.29 to 2.1.31 in /dev-tools in the phpstan group (#9129)
- deps: bump shipmonk/dead-code-detector from 0.13.3 to 0.13.4 in /dev-tools (#9135)
- deps: bump shipmonk/dead-code-detector from 0.13.4 to 0.13.5 in /dev-tools (#9146)
- deps: bump the phpstan group across 1 directory with 2 updates (#9101)
- deps: use
shipmonk/composer-dependency-analyserinstead oficanhazstring/composer-unusedandmaglnet/composer-require-checker(#9106) - docs: fix docs for
@autoPHPUnitMigration:riskyset (#9147) - docs: improve descriptions for
NoTrailingWhitespace*fixers (#9117) - docs: more explicit docs on --rules (#9114)
- docs: update usage documentation for describe
--expandand@(#9119) - DX: Fix
composer qascript (#9138) - refactor:
--option value=>--option=value(#9131) - test: Fix result randomness in
RunnerTestfor MacOS (#9139)
-
v3.88.227 Sep 2025Release notes
Open source →- docs: describe command - allow to describe config in use (#9103)
- docs: describe command - allow to expand sets (#9104)
-
v3.88.126 Sep 2025Release notes
Open source →- chore: use accidentally missing
@auto:risky(#9102) - deps: bump crate-ci/typos from 1.36.2 to 1.36.3 (#9099)
- deps: bump icanhazstring/composer-unused from 0.9.4 to 0.9.5 in /dev-tools (#9100)
- DX: Ability to run
yamllintlocally (#9093)
- chore: use accidentally missing
-
v3.88.024 Sep 2025Release notes
Open source →- feat: Support custom rulesets (#6083)
- feat: introduce
@auto,@auto:riskysets (#9090) - feat: introduce
@autoPHPMigration,@autoPHPMigration:risky,@autoPHPUnitMigration:riskysets (#9068) - feat: start using new defaults for rules under future mode (#9020)
- feat: rename rule sets from
MAJORMINORandMAJOR.MINORintoMAJORxMINOR(#9005) - feat: rename visibility_required into modifier_keywords (#8995)
- feat:
symfonyruleset: Add@consttophpdoc_no_alias_tag(#9016) - fix:
BlankLinesBeforeNamespaceFixer- handle namespace without newline before (#9059) - docs: fix typo (#9060)
- docs: update CONTRIBUTING.md (#9074)
- docs: update README for updated PHP/PHPUnit set names (#9070)
- DX: Allow development on PHP 8.5 (#9092)
- chore: enforce list via
array_values()(#9054) - chore: ErrorOutput - line is optional (#9047)
- chore: fix cs in entry point file (#9064)
- chore: fix CS, somehow it missed the CI of
.php-cs-fixer.well-defined-arrays.php(#8987) - chore: fix some
argument.typeerrors (#9056) - chore: groom Automatic rulesets code (#9091)
- chore: phpstan - do not ignore all
internalusage errors (#9063) - chore: replace wrong
class-stringusages (#8968) - chore:
getcwd()- ignorefalsereturn value (#9057) - chore:
ReporterFactory- useclass-stringtype (#9055) - CI: check for typos (#9048)
- CI: don't prevent the build when remote coverage reporting service is down (#9095)
- CI: fix smoke tests after #9005 (#9061)
- CI: fix typos in
CHANGELOG.md(#9052) - CI: mutation tests - disable github annotations (#9062)
- CI: Test docs generation only once per CI pipeline (#9089)
- CI:
pushevent only for master branch (#9046) - CI:
pushevent only for master branch (#9050) - deps: bump box version (#9042)
- deps: bump ergebnis/composer-normalize from 2.48.1 to 2.48.2 in /dev-tools (#9045)
- deps: bump phpstan/phpstan from 2.1.25 to 2.1.28 in /dev-tools in the phpstan group (#9072)
- deps: unify alpine version for PHP 8.4 (#9077)
- deps: update phpstan and phpstan-baseline-per-identifier (#9051)
- deps: update squizlabs/php_codesniffer to v4.0 and other related packages (#9075)
- deps: upgrade alpine wherever possible (#9078)
- deps: upgrade infection/infection to ^0.31.0 (#9079)
- refactor: introduce concept of AutomaticRuleSet (#9067)
- refactor: rename
RuleSetDescriptionInterfaceintoRuleSetDefinitionInterface(#9094) - test: ensure alpine version same between Dockerfile and compose.yaml (#9076)
- test: ensure alpine version same in compose.yaml and release.yml (#9071)
- test: extend tests to cover new migration rule set names (#9069)
- test: improve testing that objects cannot be serialized/unserialized (#9049)
-
v3.87.210 Sep 2025Release notes
Open source →- fix:
phpdoc_to_param_type,phpdoc_to_return_type,phpdoc_to_property_type- handle type aliasing before handling PHP version (#9031) - docs: unify docs around deprecated sets (#9036)
- chore: fix typos (#9022)
- chore: provide few missing types for callbacks (#9026)
- deps: bump actions/stale from 9 to 10 (#9029)
- deps: pin checkbashisms and shellcheck to stable URL with pinned version (#9032)
- DX: suggest
--sequentialwhen facing fixing error (#9023) - refactor: Future - centralize class for future-looking logic (#9021)
- test: Mark
DocumentationCommandTest::testGeneratingDocumentation()as large test (#9028)
- fix:
-
v3.87.102 Sep 2025Release notes
Open source →- chore:
AbstractProxyFixer- require non-empty list of proxy fixers (#9010) - deps: update justinrainbow/json-schema (#9019)
- chore:
-
v3.87.002 Sep 2025Release notes
Open source →- feat: add
PhpdocTagNoNamedArgumentsFixer(#8906) - feat: deprecate using config from passed 'path' CLI argument (#8923)
- feat: introduce
@PHP85Migrationset (#8941) - feat: upgrade
@PhpCsFixerset towards new defaults of selected rules (#8981) - fix:
PhpdocOrderFixer- do not allow duplicated tags in configuration (#8945) - fix:
PhpdocOrderFixerwhenphpstan-/psalm-order is specified (#8853) - docs: README.md updates (#9013)
- docs: update README.md (#9015)
- docs: update
README.mdandCONTRIBUTING.md(#8974) - DX: remove methods for kind checks (#8954)
- DX: unify class/interface/trait naming (#8957)
- chore: Add CS commit to .git-blame-ignore-revs
- chore: Add TODO for ENUM conversion in ProgressOutputType (#8991)
- chore: always use
JSON_THROW_ON_ERROR(#8993) - chore: apply (partially)
multiline_string_to_heredoc(#9002) - chore: apply phpdoc_tag_no_named_arguments (#8969)
- chore: configure phpdoc_tag_no_named_arguments (#8970)
- chore: convert private methods to constants (#8976)
- chore: deprecate
Annotation::getTagsWithTypesin favour ofTAGS_WITH_TYPESconstant (#8977) - chore: exclude files in .gitattributes (#8960)
- chore: extract token types for PHPStan (#8925)
- chore: handle fixer options without allowed types defined (#8973)
- chore: ignore deprecations in
token_get_all(#8963) - chore: minor CS fixes (#8979)
- chore: PhpdocTagNoNamedArgumentsFixer - better example (#8971)
- chore: PHPUnit - enforce no memory_limit (#8940)
- chore: remove not-needed reset-call (#9014)
- chore: revert wrong
_PhpTokenArrayusages (#8947) - chore: rework
ci-integration.sh(#8989) - chore: sort .gitattributes (#8966)
- chore: unify entries in
.gitignore(#8982) - chore: unify env var
FAST_LINT_TEST_CASESintoPHP_CS_FIXER_FAST_LINT_TEST_CASES(#8992) - chore: use
get_debug_typeand::classin exception messages (#9006) - chore: use
non-empty-listwhere appropriate (#8972) - chore:
AbstractPhpdocTypesFixer- remove$tagsproperty (#8980) - chore:
CheckCommand- use regex instead ofexplode&substr(#8936) - chore:
ClassAttributesSeparationFixer- improve code (#8950) - chore:
EregToPregFixer- use constant instead of static property (#8978) - chore:
FullyQualifiedStrictTypesFixer- ensure matching number of opening/closing braces (#9009) - chore:
OrderedClassElementsFixer- use private method instead of anonymous function (#8931) - chore:
PhpdocParamOrderFixer- improve/simplify code (#9012) - chore:
PhpUnitDedicateAssertFixer- improve code for phpstan (#9011) - chore:
Tokens::offsetSet- explicit validation of input (#9004) - chore:
Tokens- override nullability ofSplFixedArray(#9001) - refactor: add
DocBlockAnnotationtrait (#8953) - refactor:
PhpdocOrderFixer- calculate order only once (#8944) - CI: add
vendor/bin/phpunit --check-php-configuration(#8934) - CI: more self-fixing checks on lowest/highest PHP (#8943)
- CI: Re-enable Paraunit in CI under PHP 8.5 (#8964)
- CI: update checkbashisms (#8951)
- test: extend ProjectCodeTest to check classy names in tests too (#8959)
- test: split test so more of them can run under Windows (#8986)
- test: TypeDeclarationSpacesFixer - demonstrate PHP 8.3 related config doesn't harm older envs (#8999)
- test: update pipe operator tests after pipe & arrow function combination was prohibited (#8990)
- test:
NoUnneededControlParenthesesFixer- add tests for "clone with" (#8937) - test:
PhpdocNoAliasTagFixerTest- add test for@constto@var(#8998) - CS: re-apply rules (#8988)
- deps: bump actions/checkout from 4 to 5 (#8938)
- deps: bump shipmonk/dead-code-detector from 0.13.1 to 0.13.2 in /dev-tools (#8939)
- deps: drop support for justinrainbow/json-schema:^5 (#8984)
- deps: minor upgrades (#8983)
- deps: remove
php-cs-fixer/accessible-object(#8948) - deps: update dev-tools (#9007)
- feat: add
-
v3.86.013 Aug 2025Release notes
Open source →- feat: console application - add completion support (#8887)
- feat: introduce
PER-CS3.0rulsets (#8841) - feat: update
@Symfonyand@PhpCsFixersets (#8930) - feat:
NoSuperfluousPhpdocTagsFixer- support multiline array shapes (#8903) - fix: PhpdocToParamTypeFixerTest - handle types_map for union-types (#8926)
- chore: AbstractTransformerTestCase - better virtual type naming (#8927)
- chore: add TODO for v4 (#8912)
- chore: do not call
Reflection*::setAccessible()in PHP >= 8.1 (#8907) - chore: document .env.example (#8901)
- chore: fix
@todoannotation casing (#8921) - chore: switch to official checkstyle.xsd (#8910)
- chore: unify future default of after_heredoc (#8924)
- chore:
@phpstan-ignorefor php version check (#8920) - chore:
PhpUnitTestAnnotationFixer- useforeachinstead offor(#8911) - CI: allow PHP 8.5 for failure, till it's officially released and we get the stable support (#8928)
- ci: run tests under 8.5 via PHPUnit, as ParaUnit failing (#8933)
- CI: temporarily skip problematic tests under Sf v8 (#8919)
- deps: bump icanhazstring/composer-unused from 0.9.3 to 0.9.4 in /dev-tools (#8905)
- deps: update and bump dev-tools/composer (#8915)
- docs: extend FullOpeningTagFixer samples (#8913)
- docs: extend OperatorLinebreakFixer samples (#8914)
- docs: more explicit msg for stop using deprecated code (#8922)
- DX: .gitignore - ignore php-cs-fixer.cache, as it's existence is possible when using env var (#8929)
-
v3.85.129 Jul 2025 -
v3.85.029 Jul 2025Release notes
Open source →- feat:
ArrayIndentationFixer- handle closures inside attributes (#8888) - feat:
NullableTypeDeclarationFixer- support final promoted properties (#8885) - feat:
OperatorLinebreakFixer- support pipe operator (#8891) - feat:
PhpdocTypesFixer- support multiline array shapes (#8893) - fix: always reach 100% of checked files (#8861)
- fix:
BracesPositionFixer- handle property hooks correctly (#8886) - fix:
NullableTypeDeclarationFixer- handle abstract and final properties (#8876) - fix:
PhpdocLineSpanFixer- handle promoted properties (#8897) - fix:
PhpUnitDataProviderNameFixer- fix for multiple providers defined by attributes for one test method (#8849) - fix:
TernaryOperatorSpacesFixer- handleinstanceof static(#8879) - fix:
TypeDeclarationSpacesFixer- handle asymmetric visibility and final properties (#8900) - chore: add initial PHP 8.5 integration test (#8871)
- chore: add tests for public API methods (#8895)
- chore: apply changes from
PhpdocTypesFixerfor multiline array shapes (#8894) - chore: baseline files without error count (#8870)
- chore: cleanup
PhpCsFixer\DocBlock\Annotation(#8892) - chore: Command name/descriptions - use attribute and static properties (#8862)
- chore: Commands - unify way to define help content (#8881)
- chore: ConfigurationResolver - add few missing v4 TODOs (#8882)
- chore: fix
booleanNot.exprNotBooleanerrors (#8869) - chore: fix/optimize some phpdocs (#8889)
- chore: more unification of PHP CS Fixer naming (#8854)
- chore: PHPStan baseline - use
shipmonk/phpstan-baseline-per-identifier(#8844) - chore: remove dead code (#8896)
- chore: remove unused constants (#8864)
- chore: remove useless
@varannotations (#8867) - chore: simplify
ClassDefinitionFixer(#8868) - chore: unify usage of image versions to not mention minor (#8860)
- chore: update PHPStan (#8898)
- chore: update PHPStan extension for
Preg::match(#8872) - chore: wrong return values in
ErrorsManager(#8863) - chore:
OrderedInterfacesFixer- make code more PHPStan friendly (#8866) - chore:
Token- add@phpstan-assert-if-true(#8865) - deps: bump phpstan/phpstan from 2.1.17 to 2.1.18 in /dev-tools in the phpstan group (#8859)
- deps: bump the phpstan group in /dev-tools with 4 updates (#8890)
- docs: better document deprecated rule sets (#8878)
- docs: cleanup docs for PHP 7 (#8873)
- docs: cleanup docs for PHP < 7.4 (#8855)
- docs: ListSetsCommand,FixCommand - document possible formats in Command's definitions (#8880)
- DX: Explicitly prevent touching non-monolithic files (#6517)
- feat:
-
v3.84.015 Jul 2025Release notes
Open source →- feat: Introduce
NoUselessPrintfFixer(#8820) - feat:
CastSpacesFixer- support(void)cast (#8851) - feat:
NewExpressionParenthesesFixer- add toPHP84MigrationSet(#8788) - feat:
VisibilityRequiredFixer- support final promoted properties (#8835) - fix:
PhpdocToParamTypeFixer- do not convert types fromphpstan-type,phpstan-import-type,psalm-typeandpsalm-import-type(#8842) - fix:
PhpdocToPropertyTypeFixer- do not convert types fromphpstan-type,phpstan-import-type,psalm-typeandpsalm-import-type(#8847) - fix:
PhpdocToReturnTypeFixer- do not convert types fromphpstan-type,phpstan-import-type,psalm-typeandpsalm-import-type(#8846) - chore: introduce FCT for few missing tokens (#8845)
- chore: remove useless static variables for const content (#8836)
- chore: simplify
isGivenKind/equals/equalsAllcalls (#8843) - docs: Support for new PHP version (#8780)
- feat: Introduce
-
v3.83.014 Jul 2025Release notes
Open source →- feat: Suppress enable parallel runner message when only 1 core is available (#8833)
- fix: BracesPositionFixer - fix performance issue for massive files with CT::T_CURLY_CLOSE (#8830)
- fix:
NoUnreachableDefaultArgumentValueFixer- do not crash on property hook (#8838) - chore: Add CS commit to .git-blame-ignore-revs
- chore: apply native_constant_invocation for build-in consts (#8837)
- chore: configure native_constant_invocation (#8840)
- chore: early compat check with Symfony 8 (#8827)
- chore:
FullyQualifiedStrictTypesFixer- reduce function calls (#8834) - CI: mark jobs allow-to-fail declarative, instead of imperative check (#8829)
-
v3.82.208 Jul 2025Release notes
Open source →- fix:
ClassAttributesSeparationFixer- handle methodgetaliased in trait import (#8822) - fix:
LowercaseStaticReferenceFixer- do not touch enum's cases (#8824) - fix:
StatementIndentationFixer- multi constant statement containing array (#8825) - fix:
VisibilityRequiredFixer- handle promoted property with visibility and reference, but without type (#8823)
- fix:
-
v3.82.108 Jul 2025Release notes
Open source →- fix:
OrderedClassElementsFixer- handle property hooks (#8817) - fix:
SingleClassElementPerStatementFixer- fix for property hooks (#8816)
- fix:
-
v3.82.007 Jul 2025Release notes
Open source →- chore: cleanup
FCTTest(#8808) - chore: PhpdocOrderFixer.php - CPU optimization (#8812)
- deps: update box (#8795)
- docs: fix whitespace around code examples and reference sections in rules' docs (#8810)
- feat:
MagicConstantCasingFixer- support__PROPERTY__(#8809) - feat:
PhpUnitDataProviderNameFixer- support data providers defined by both annotation and attribute for the same test (#8811) - fix:
PhpdocToParamTypeFixer- always handle reference in PHPDoc (#8813)
- chore: cleanup
-
v3.81.007 Jul 2025Release notes
Open source →- feat:
VisibilityRequiredFixer- handle more than only the first promoted property (#8801) - fix:
BracesPositionFixer- do not crash when variable is terminated by PHP close tag (#8804) - fix:
PhpUnitDataProviderMethodOrderFixer- handle data provider defined by both annotation and attribute (#8805) - fix:
PhpUnitInternalClassFixer- skip adding@internalon instantiation of anonymous classes (#8807) - fix:
VisibilityRequiredFixer- handle promoted parameter passed by reference (#8799) - chore: add automatically to milestone "PHP 8.5 initial compatibility" if label is "topic/PHP8.5" (#8806)
- chore: fail "Deployment checks" if any job from
testsfailed (#8792) - docs: update docs about --allow-unsupported-php-version (#8796)
- feat:
-
v3.80.006 Jul 2025 -
v3.79.006 Jul 2025Release notes
Open source →- chore:
VisibilityRequiredFixerTest- run tests in correct PHP version (#8790) - feat:
BracesPositionFixer- do not touch one-line properties with hooks (#8785) - feat:
PhpUnitDataProvider(.+)Fixer- support attributes (#8197)
- chore:
-
v3.78.106 Jul 2025 -
v3.78.006 Jul 2025Release notes
Open source →- chore:
VisibilityRequiredFixer- document behaviour for asymmetric visibility with only set-visibility (#8783) - feat:
BracesPositionFixer- support property hooks (#8782) - feat:
VisibilityRequiredFixer- support promoted property without visibility (#8773) - fix:
NativeFunctionInvocationFixer- fix global functionsetcalled in array key (#8568) - fix:
NoBreakCommentFixer- handle function having return type (#8767) - fix:
StatementIndentationFixer- handle functionssetandget(like property hooks, but not) (#8576) - fix:
StaticPrivateMethodFixer- handle nested calls (#8768)
- chore: