Releases: PHPCSStandards/PHPCSUtils
Releases · PHPCSStandards/PHPCSUtils
1.1.3 - 2025-10-16
Changed
Other
- Various housekeeping.
Fixed
PHPCS Backcompat
BCFile::getMemberProperties(): sync with PHPCS 3.13.4 - fix PHP 8.5 "Using null as an array offset" deprecation notice. #711
1.1.2 - 2025-09-05
Added
PHPCS BackCompat
BCFile::getMemberProperties(): sync with PHPCS 3.13.3 - support for PHP 8.4 abstract properties. #698
Utils
Variables::getMemberProperties(): support for PHP 8.4 abstract properties. #698
Changed
Utils
TypeString::normalizeCase()will now also normalize a fully qualifiedtrue,falseornulltype to unqualified. #702
Other
- Dropped support for PHP_CodeSniffer < 3.13.3. #698
Please ensure you runcomposer update phpcsstandards/phpcsutils --with-dependenciesto benefit from this. - Various housekeeping.
Fixed
Utils
TypeString::isNullable(): a type string with a fully qualifiednullwas not recognized as nullable. #702TypeString::isKeyword(): a fully qualifiedtrue,falseornulltype was not recognized as a keyword type. #702
Note: using fully qualified
true,falseornullin a typestring is not allowed by PHP. Even so, theTypeStringutility will now handle this in a parse error tolerant manner.
1.1.1 - 2025-08-10
Changed
TestUtils
- The
PHPCSUtils\TestUtils\UtilityMethodTestCasenow uses the PHP_CodeSnifferLocalFileinstead of theDummyFileclass under the hood. #692
Fixed
TestUtils
- Prevent PHP 8.5 deprecation notices for
Reflection*::setAccessible()in thePHPCSUtils\TestUtils\UtilityMethodTestCaseand thePHPCSUtils\TestUtils\ConfigDoubleclasses. #695
1.1.0 - 2025-06-12
Added
Compatibility with the new PHP_CodeSniffer 4.x branch in anticipation of the PHP_CodeSniffer 4.0 release. #674, #679
PHPCSUtils should now be fully compatible with PHP_CodeSniffer 4.0 (again). If you still find an issue, please report it.
PHPCS BackCompat
BCFile::findExtendedClassName(): sync with PHPCS 4.0.0 - support for namespace relative names when used as the extended parent class name. #674BCFile::findImplementedInterfaceNames(): sync with PHPCS 4.0.0 - support for namespace relative names when used in implemented interface names. #674BCFile::getMemberProperties(): sync with PHPCS 3.12.0 - support for PHP 8.4 final properties. Thanks @DanielEScherzer! #646BCFile::getMemberProperties(): sync with PHPCS 3.13.1 - support for PHP 8.4 asymmetric visibility. #677BCFile::getMemberProperties(): sync with PHPCS 4.0.0. #674- Add support for PHP 8.4 properties in interfaces.
- Removed parse error warning.
BCFile::getMethodParameters(): sync with PHPCS 3.13.1 - support for PHP 8.4 asymmetric visibility. #677BCFile::findStartOfStatement(): sync with PHPCS 3.12.1 - support forgotoas aswitch-caseterminating statement. #661BCTokens::nameTokens()as introduced in PHPCS 4.0.0. #674
The same token array previously already existed in PHPCSUtils asCollections::nameTokens().BCTokens::functionNameTokens(): sync with PHPCS 4.0.0 - added theT_ANON_CLASStoken. #674BCTokens::parenthesisOpeners(): sync with PHPCS 4.0.0 - added theT_USE,T_ISSET,T_UNSET,T_EMPTY,T_EVALandT_EXITtokens. #674
Note: WhileT_USE,T_ISSET,T_UNSET,T_EMPTY,T_EVALandT_EXITwill be included in the return value for this method,
the associated parentheses will not have the'parenthesis_owner'index set unless PHPCS 4.0.0 is used.
Use theParentheses::getOwner()or theParentheses::hasOwner()methods if you need to check
whether any of these tokens are a parentheses owner. The methods in theParenthesesclass are PHPCS cross-version compatible.
TestUtils
- New
PHPCSUtils\TestUtils\ConfigDoubleclass as a lightweight and more stable alternative to directly using the PHPCS nativeConfigclass in tests. #550, #612
Props to @fredden for helping me find and fix a bug in this feature before it was released. - New
PHPCSUtils\TestUtils\RulesetDoubleclass which allows for creating aRulesetobject without registering any sniffs. #674
This allows for thePHPCSUtils\TestUtils\UtilityMethodTestCaseclass to be cross-version compatible with both PHP_CodeSniffer 3.x as well as 4.x. - New
PHPCSUtils\TestUtils\UtilityMethodTestCase::parseFile()method to allow for on-demand tokenizing of a (secondary) test case file. #591, #610
This method is intended for tests which need to use multiple test case files, like, for example, tests which need to verify that a utility resets a$fileNameproperty on seeing another file. - New
PHPCSUtils\TestUtils\UtilityMethodTestCase::testTestMarkersAreUnique()andPHPCSUtils\TestUtils\UtilityMethodTestCase::assertTestMarkersAreUnique()methods which automatically check that code sample files used with thisTestCasedo not contain duplicate test case markers. #642
If needs be, the test method can be disabled by overloading it (discouraged). If a test uses multiple test case/code sample files, the assertion method can be called directly.
Tokens
- New
Collections::constantTypeTokens()method to support PHP 8.3 typed class constants. #562 - New
Collections::ternaryOperators()method. #549 T_EXITto theCollections::functionCallTokens()andCollections::parameterPassingTokens()in light of the PHP 8.4 "exit as function" change. #618- The PHP 8.4 asymmetric visibility tokens have been added to the
Collections::propertyModifierKeywords()method. #653 T_INTERFACEhas been added to theCollections::ooPropertyScopes()method for PHP 8.4 interface properties support. #674
Utils
- New
PHPCSUtils\Utils\Constantsclass: Utility functions to examine (class) constants. #562
Initially available method:getProperties()to retrieve an array of information about an OO constant declaration. - New
PHPCSUtils\Utils\FileInfoclass: Utility functions to check characteristics of the file under scan. #572
Initial set of available methods:hasByteOrderMark()andhasSheBang(). - New
PHPCSUtils\Utils\FilePathclass: Utility functions for handling and comparing file paths. #593
Initial set of available methods:getName()to retrieve the normalized path for the current file,isStdin(),normalizeAbsolutePath(),normalizeDirectorySeparators(),trailingSlashIt()andstartsWith(). - New
PHPCSUtils\Utils\TypeStringclass: Utility functions for analysing typestrings as retrieved via the various availablegetParameters()/getProperties()methods. #588
Initial set of available methods:getKeywordTypes(),isKeyword(),normalizeCase(),isSingular(),isNullable(),isUnion(),isIntersection(),isDNF(),toArray(),toArrayUnique(),filterKeywordTypes()andfilterOOTypes().
Note: Theis*()methods will not check if the type string provided is valid, as doing so would inhibit what sniffs can flag. Theis*()methods will only look at the form of the type string to determine if it could be valid for a certain type. - New
PHPCSUtils\Utils\ObjectDeclarations::getDeclaredConstants(),PHPCSUtils\Utils\ObjectDeclarations::getDeclaredEnumCases(),PHPCSUtils\Utils\ObjectDeclarations::getDeclaredProperties()andPHPCSUtils\Utils\ObjectDeclarations::getDeclaredMethods()utility methods. #592
These methods will each return an array with the name of the constant/case/property/method as the key and the typical stack pointer needed for further processing.
The retrieval of this information is highly optimized for performance. If a sniff needs to search for a named constant/enum case/property/method in an OO structure, in most cases, these methods should be the recommended way for finding the declaration, instead of the sniff attempting to do this itself.
Mind: the return value of thegetDeclaredProperties()method includes constructor promoted properties. Passing the stack pointer of constructor promoted properties onto a call to theVariables::getMemberProperties()method, however, is currently not supported. FunctionDeclarations::getParameters(): support for PHP 8.4 asymmetric visibility. #677Variables::getMemberProperties(): support for PHP 8.4 final properties. Thanks @DanielEScherzer! #646Variables::getMemberProperties(): support for PHP 8.4 asymmetric visibility. #677
Changed
- The exceptions thrown by PHPCSUtils native utilities have been made more modular and more specific. #598, #599, #600
- Passing a parameter of the wrong type will now result in a
PHPCSUtils\Exceptions\TypeErrorbeing thrown. - Passing a parameter of the correct type, but with an invalid value, like an empty string when only non-empty strings are expected/accepted, will now result in a
PHPCSUtils\Exceptions\ValueErrorbeing thrown. - Passing a (positive) integer stack pointer, which doesn't exist in the token stack of the current file, will now result in a
PHPCSUtils\Exceptions\OutOfBoundsStackPtrbeing thrown. - Passing a stack pointer to a token which is not within the range of token types which is accepted by the method, will now result in a
PHPCSUtils\Exceptions\UnexpectedTokenTypebeing thrown. - Logic errors will now result in a
PHPCSUtils\Exceptions\LogicExceptionbeing thrown.
This can occur, for instance, when a method takes a$startand$endparameter and the$endpointer is before the$startpointer. - Missing, conditionally required, parameters, will now result in a
PHPCSUtils\Exceptions\MissingArgumentErrorbeing thrown. - Generic errors will now result in a
PHPCSUtils\Exceptions\RuntimeExceptionbeing thrown. - Previously the PHPCS native
PHP_CodeSniffer\Exceptions\RuntimeExceptionwas used for all these exceptions.
Catching the PHPCS nativeRuntimeExceptionwill still catch the new exceptions, but it is strongly recommended to be more selective when catching exceptions to prevent accidentally hiding errors in sniffs. - Also note that the PHPCSUtils native utilities now include more and stricter type checking to help surface bugs in sniffs.
- Passing a parameter of the wrong type will now result in a
Abstract Sniffs
- The
AbstractArrayDeclarationSniff::process()method will no longer hide exceptions about a non-integer or non-existent stack pointer being passed. #600 - The
AbstractArrayDeclarationSniff::processArray()method will no longer hide exceptions about non-integer or non-existent stack pointers being passed. #600
PHPCS BackCompat
*...
1.0.12 - 2024-05-20
Added
PHPCS BackCompat
BCFile::getMemberProperties(): sync with PHPCS 3.10.0 - support for PHP 8.2 DNF types. #604BCFile::getMethodProperties(): sync with PHPCS 3.10.0 - support for PHP 8.2 DNF types. #604BCFile::getMethodParameters(): sync with PHPCS 3.10.0 - support for PHP 8.2 DNF types. #604
Utils
FunctionDeclarations::getParameters(): support for PHP 8.2 DNF types. #604FunctionDeclarations::getProperties(): support for PHP 8.2 DNF types. #604Variables::getMemberProperties(): support for PHP 8.2 DNF types. #604
Changed
Tokens
Collections::parameterTypeTokens(),Collections::propertyTypeTokens()andCollections::returnTypeTokens(): now include the newT_TYPE_OPEN_PARENTHESISandT_TYPE_CLOSE_PARENTHESIStokens for PHP 8.2 DNF type support. #604
Utils
ControlStructures::getCaughtExceptions(): will now silently ignore parse errors in the code under scan which prevent the method from analyzing acatchstatement. #594
The method will now return an empty array instead of throwing aPHP_CodeSniffer\Exceptions\RuntimeException.
Other
- Dropped support for PHP_CodeSniffer < 3.10.0. #603
Please ensure you runcomposer update phpcsstandards/phpcsutils --with-dependenciesto benefit from this. - Various housekeeping and documentation improvements.
Fixed
Utils
UseStatements::splitImportUseStatement(): the values in the return array will now never include a leading backslash. #590
Previously the behaviour around importusestatements declared with a leading backslash was undefined and the backslash would be included in the return value.
1.0.11 - 2024-04-24
Changed
Other
- Various housekeeping and documentation improvements. Includes a contribution from @fredden.
Fixed
PHPCS BackCompat
BCFile::getMethodProperties(): small performance improvement & more defensive coding, in line with same fix in PHPCS 3.9.2. #573
Utils
FunctionDeclarations::getProperties(): small performance improvement & more defensive coding, in line with same fix in PHPCS 3.9.2. #573
1.0.10 - 2024-03-18
Changed
Other
- Dropped support for PHP_CodeSniffer < 3.9.0. #561
Please ensure you runcomposer update phpcsstandards/phpcsutils --with-dependenciesto benefit from this. - Various housekeeping and documentation improvements.
Deprecated
Utils
Fixed
PHPCS BackCompat
1.0.9 - 2023-12-08
Added
PHPCS BackCompat
BCFile::getMemberProperties(): sync with PHPCS 3.8.0 - support for PHP 8.2truetype. #524BCFile::getMethodProperties(): sync with PHPCS 3.8.0 - support for PHP 8.2truetype. #524BCFile::getMethodParameters(): sync with PHPCS 3.8.0 - support for PHP 8.2truetype. #524
Changed
TestUtils
- Significant performance improvement for the
UtilityMethodTestCase. #525
Other
- Dropped support for PHP_CodeSniffer < 3.8.0. #523
Please ensure you runcomposer update phpcsstandards/phpcsutils --with-dependenciesto benefit from this. - Small improvements to the documentation website generation. Includes a contribution from @fredden.
- Various housekeeping and documentation improvements. Includes a contribution from @fredden.
1.0.8 - 2023-07-17
Changed
PHPCS BackCompat
BCFile::getDeclarationName(): sync with PHPCS 3.8.0 - support for functions calledself,parentorstaticwhich return by reference. #494
Other
- Various housekeeping and minor documentation improvements.
Fixed
Fixers
- The
SpacesFixerwill no longer throw an (incorrect) exception when the second pointer passed is a comment token and this comment token is the last content in a file. #493
1.0.7 - 2023-07-10
Changed
Other
- Various housekeeping and maintenance updates, including making the test suite compatible with PHPUnit 10.
Fixed
Utils
- The
Arrays::getDoubleArrowPtr()method could previously get confused over a double arrow in a keyed list used as an array value. #485