PHP Code Sniffer v3.5.3 Release Notes

Release Date: 2019-12-04 // over 4 years ago
    • The PHP 7.4 T_FN token has been made available for older versions
      • T_FN represents the fn string used for arrow functions
      • The double arrow becomes the scope opener, and uses a new T_FN_ARROW token type
      • The token after the statement (normally a semicolon) becomes the scope closer
      • The token is also associated with the opening and closing parenthesis of the statement
      • Any functions named fn will have a T_FN token for the function name, but have no scope information
      • Thanks to Michał Bundyra for the help with this change
    • PHP 7.4 numeric separators are now tokenized in the same way when using older PHP versions
      • Previously, a number like 1_000 would tokenize as T_LNUMBER (1), T_STRING (_000)
      • Now, the number tokenizes as T_LNUMBER (1_000)
      • Sniff developers should consider how numbers with underscores impact their custom sniffs
    • The PHPCS file cache now takes file permissions into account
      • The cache is now invalidated for a file when its permissions are changed
    • 👍 File::getMethodParameters() now supports arrow functions
    • 👍 File::getMethodProperties() now supports arrow functions
    • ➕ Added Fixer::changeCodeBlockIndent() to change the indent of a code block while auto-fixing
      • Can be used to either increase or decrease the indent
      • Useful when moving the start position of something like a closure, where you want the content to also move
    • ➕ Added Generic.Files.ExecutableFile sniff
      • Ensures that files are not executable
      • Thanks to Matthew Peveler for the contribution
    • Generic.CodeAnalysis.EmptyPhpStatement now reports unnecessary semicolons after control structure closing braces
      • Thanks to Vincent Langlet for the patch
    • Generic.PHP.LowerCaseKeyword now enforces that the fn keyword is lowercase
      • Thanks to Michał Bundyra for the patch
    • 👍 Generic.WhiteSpace.ScopeIndent now supports static arrow functions
    • PEAR.Functions.FunctionCallSignature now adjusts the indent of function argument contents during auto-fixing
      • Previously, only the first line of an argument was changed, leading to inconsistent indents
      • This change also applies to PSR2.Methods.FunctionCallSignature
    • PSR2.ControlStructures.ControlStructureSpacing now checks whitespace before the closing parenthesis of multi-line control structures
      • Previously, it incorrectly applied the whitespace check for single-line definitions only
    • PSR12.Functions.ReturnTypeDeclaration now checks the return type of arrow functions
      • Thanks to Michał Bundyra for the patch
    • PSR12.Traits.UseDeclaration now ensures all trait import statements are grouped together
      • Previously, the trait import section of the class ended when the first non-import statement was found
      • Checking now continues throughout the class to ensure all statements are grouped together
      • This also ensures that empty lines are not requested after an import statement that isn't the last one
    • Squiz.Functions.LowercaseFunctionKeywords now enforces that the fn keyword is lowercase
      • Thanks to Michał Bundyra for the patch
    • 🛠 Fixed bug #2586 : Generic.WhiteSpace.ScopeIndent false positives when indenting open tags at a non tab-stop
    • 🛠 Fixed bug #2638 : Squiz.CSS.DuplicateClassDefinitionSniff sees comments as part of the class name
      • Thanks to Raphael Horber for the patch
    • 🛠 Fixed bug #2640 : Squiz.WhiteSpace.OperatorSpacing false positives for some negation operators
      • Thanks to Jakub Chábek and Juliette Reinders Folmer for the patch
    • 🛠 Fixed bug #2674 : Squiz.Functions.FunctionDeclarationArgumentSpacing prints wrong argument name in error message
    • 🛠 Fixed bug #2676 : PSR12.Files.FileHeader locks up when file ends with multiple inline comments
    • 🛠 Fixed bug #2678 : PSR12.Classes.AnonClassDeclaration incorrectly enforcing that closing brace be on a line by itself
    • 🛠 Fixed bug #2685 : File::getMethodParameters() setting typeHintEndToken for vars with no type hint
      • Thanks to Juliette Reinders Folmer for the patch
    • 🛠 Fixed bug #2694 : AbstractArraySniff produces invalid indices when using ternary operator
      • Thanks to Michał Bundyra for the patch
    • 🛠 Fixed bug #2702 : Generic.WhiteSpace.ScopeIndent false positive when using ternary operator with short arrays