1.0.0-RC1 - 2022-12-07
Pre-release
Pre-release
--with-[all-]dependencies
when running composer update
. ❗
Added
Modernize
- This is a new standard with one sniff to start with.
- 🔧 📚 New
Modernize.FunctionCalls.Dirname
sniff to detect and auto-fix two typical code modernizations which can be made related to thedirname()
function. #172
Universal
- 🔧 📊 📚 New
Universal.Classes.DisallowAnonClassParentheses
sniff to disallow the use of parentheses when declaring an anonymous class without passing parameters. #76, #162 - 🔧 📊 📚 New
Universal.Classes.RequireAnonClassParentheses
sniff to require the use of parentheses when declaring an anonymous class, whether parameters are passed or not. #76, #166 - 🔧 📊 📚 New
Universal.Classes.DisallowFinalClass
sniff to disallow classes being declaredfinal
. #108, #114, #148, #163 - 🔧 📊 📚 New
Universal.Classes.RequireFinalClass
sniff to require all non-abstract
classes to be declaredfinal
. #109, #148, #164
Warning: the auto-fixer for this sniff may have unintended side-effects for applications and should be used with care! This is considered a risky fixer. - 🔧 📊 📚 New
Universal.Classes.ModifierKeywordOrder
sniff to standardize the modifier keyword order for class declarations. #142
The sniff offers anorder
property to specify the preferred order. - 🔧 📚 New
Universal.CodeAnalysis.ConstructorDestructorReturn
sniff to verify that class constructor/destructor methods 1) do not have a return type declaration and 2) do not return a value. #137, #140, #146 Inspired by @derickr. - 🔧 📚 New
Universal.CodeAnalysis.ForeachUniqueAssignment
sniff to detectforeach
control structures which use the same variable for both the key as well as the value assignment as this will lead to unexpected - and most likely unintended - behaviour. #110, #175
The fixer will maintain the existing behaviour of the code. Mind: this may not be the intended behaviour. - 🔧 📚 New
Universal.CodeAnalysis.StaticInFinalClass
sniff to detect usingstatic
instead ofself
in OO constructs which arefinal
. #116, #180
The sniff has modular error codes to allow for making exceptions based on the type of use forstatic
. - 🔧 📊 📚 New
Universal.Constants.LowercaseClassResolutionKeyword
sniff to enforce that theclass
keyword when used for class name resolution, i.e.::class
, is in lowercase. #72 - 🔧 📊 📚 New
Universal.Constants.ModifierKeywordOrder
sniff to standardize the modifier keyword order for OO constant declarations. #143
The sniff offers anorder
property to specify the preferred order. - 🔧 📚 New
Universal.ControlStructures.DisallowLonelyIf
sniff to disallowif
statements as the only statement in anelse
block. #85, #168, #169
Inspired by the ESLint "no lonely if" rule.
Note: This sniff will not fix the indentation of the "inner" code. It is strongly recommended to run this sniff together with theGeneric.WhiteSpace.ScopeIndent
sniff to get the correct indentation. - 📊 📚 New
Universal.Files.SeparateFunctionsFromOO
sniff to enforce that a file should either declare (global/namespaced) functions or declare OO structures, but not both. #95, #170, #171
Nested function declarations, i.e. functions declared within a function/method will be disregarded for the purposes of this sniff.
The same goes for anonymous classes, closures and arrow functions. - 📚 New
Universal.NamingConventions.NoReservedKeywordParameterNames
sniff to verify that function parameters do not use reserved keywords as names, as this can quickly become confusing when people use them in function calls using named parameters. #80, #81, #106, #107, #173
The sniff has modular error codes to allow for making exceptions for specific keywords. - 🔧 📊 📚 New
Universal.Operators.TypeSeparatorSpacing
sniff to enforce no spaces around union type and intersection type separators. #117 - 🔧 📚 New
Universal.PHP.OneStatementInShortEchoTag
sniff to disallow short open echo tags<?=
containing more than one PHP statement. #89, #147, #165 - 🔧 📊 📚 New
Universal.WhiteSpace.AnonClassKeywordSpacing
sniff to standardize the amount of spacing between theclass
keyword and the open parenthesis (if any) for anonymous class declarations. #120
The sniff offers aspacing
property to set the amount of spaces the sniff should check for. - 🔧 📚 New
Universal.WhiteSpace.PrecisionAlignment
sniff to enforce indentation to always be a multiple of a tabstop, i.e. disallow precision alignment. #119, #122, #123, #124
Note:- This sniff does not concern itself with tabs versus spaces.
It is recommended to use the sniff in combination with the PHPCS nativeGeneric.WhiteSpace.DisallowTabIndent
or theGeneric.WhiteSpace.DisallowSpaceIndent
sniff. - When using this sniff with tab-based standards, please ensure that the
tab-width
is set and either don't set the$indent
property or set it to the tab-width (or a multiple thereof). - The fixer works based on "best guess" and may not always result in the desired indentation. Combine this sniff with the
Generic.WhiteSpace.ScopeIndent
sniff for more precise indentation fixes. - The behaviour of the sniff is customizable via the following properties:
indent
: the indent used for the codebase.ignoreAlignmentBefore
: allows for providing a list of token names for which (preceding) precision alignment should be ignored.ignoreBlankLines
: whether or not potential trailing whitespace on otherwise blank lines should be examined or ignored.
- This sniff does not concern itself with tabs versus spaces.
Changed
Universal
Universal.Arrays.DisallowShortArraySyntax
: the sniff will now record metrics about long vs short array usage. #154Universal.Arrays.DuplicateArrayKey
: where relevant, the sniff will now make a distinction between keys which will be duplicate in all PHP version and (numeric) keys which will only be a duplicate key in PHP < 8.0 or PHP >= 8.0. #177, #178
If aphp_version
configuration option has been passed to PHPCS, it will be respected by the sniff and only report duplicate keys for the configured PHP version.Universal.ControlStructures.DisallowAlternativeSyntax
: the sniff will now also record a metric when single-line (no body) control structures are encountered. #158Universal.ControlStructures.DisallowAlternativeSyntax
: the error message thrown by the sniff is now more descriptive. #159Universal.ControlStructures.DisallowAlternativeSyntax
: metrics will no longer be recorded forelseif
andelse
keywords, but only on theif
keyword as the type of syntax used has to be the same for the whole "chain". #161Universal.Lists.DisallowLongListSyntax
: the sniff will no longer record (incomplete) metrics about long vs short list usage. #155Universal.Lists.DisallowShortListSyntax
: the sniff will now record (complete) metrics about long vs short list usage. #155Universal.OOStructures.AlphabeticExtendsImplements
: documented support forenum ... implements
. #150Universal.UseStatements.DisallowUseClass
: updated error message and metric name to take PHP 8.1enum
s into account. #149Universal.UseStatements.NoLeadingBackslash
: the sniff will now also flag and auto-fix leading backslashes in group use statements. #167
Other
- Updated the sniffs for compatibility with PHPCSUtils 1.0.0-alpha4. #134
- Updated the sniffs to correctly handle PHP 8.0/8.1/8.2 features whenever relevant.
- Readme: Updated installation instructions for compatibility with Composer 2.2+. #101
- Composer: The minimum
PHP_CodeSniffer
requirement has been updated to^3.7.1
(was ^3.3.1). #115, #130 - Composer: The package will now identify itself as a static analysis tool. Thanks @GaryJones! #126
- All non-
abstract
classes in this package are nowfinal
. #121 - All XML documentation now has a schema annotation. #128
- Various housekeeping.
Fixed
The upgrade to PHPCSUtils 1.0.0-alpha4 took care of a number of bugs, which potentially could have affected sniffs in this package.
NormalizedArrays
NormalizedArrays.Arrays.ArrayBraceSpacing
: the sniff now allows for trailing comments after the array opener in multi-line arrays. #118NormalizedArrays.Arrays.ArrayBraceSpacing
: trailing comments at the end of an array, but before the closer, in multi-line arrays will no longer confuse the sniff. #135NormalizedArrays.Arrays.CommaAfterLast
: the fixer will now recognize PHP 7.3+ flexible heredoc/nowdocs and in that case, will add the comma on the same line as the heredoc/nowdoc closer. #144
Universal
Universal.Arrays.DisallowShortArraySyntax
: nested short arrays in short lists will now be detected and fixed correctly. #153Universal.ControlStructures.DisallowAlternativeSyntax
: the sniff will no longer bow out indiscriminately when theallowWithInlineHTML
property is set totrue
. #90, #161Universal.ControlStructures.DisallowAlternativeSyntax
: when alternative control structure syntax is allowed in combination with inline HTML (allowWithInlineHTML
property set totrue
), inline HTML in functions declared within the control structure body will no longer be taken into account for determining whether or not the control structure contains inline HTML. #160Universal.Lists.DisallowShortListSyntax
: the sniff will work around a tokenizer bug in PHPCS 3.7.1, which previously could lead to false negatives. #151.Universal.Lists.DisallowShortListSyntax
: nested short lists in short arrays will now be detected and fixed correctly. #152Universal.Operators.DisallowStandalonePostIncrementDecrement
: the sniff will now correctly recognize stand-alone statements which end on a PHP close tag. #176