From fe71096c3c4611f6ac9d6c3a227919716e5ed3e1 Mon Sep 17 00:00:00 2001 From: jrfnl Date: Tue, 29 Jul 2025 21:03:46 +0200 Subject: [PATCH 1/9] UserExperience/AdminBarRemoval: add additional tests * Testing against false positives for calls to methods or namespaced function calls (= the issue being addressed in this PR). * Safeguarding that function calls using PHP 5.6+ argument unpacking are flagged. * Safeguarding handling of PHP 8.0+ attribute class using the same name as a target function. * Safeguarding that the function is not flagged when used as a PHP 8.1+ first class callable. * Adding tests with more variations: - Non-lowercase function call(s). - Fully qualified function calls for the escaping functions. - Use PHP 7.3+ trailing comma's in a few function calls. - Text strings using single quotes and double quotes. --- .../AdminBarRemovalUnitTest.inc | 36 +++++++++++++++++++ .../AdminBarRemovalUnitTest.php | 6 ++++ 2 files changed, 42 insertions(+) diff --git a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc index f452ae83..8e237467 100644 --- a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc +++ b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc @@ -107,3 +107,39 @@ EOT; show_admin_bar( false ); // OK. +$this?->show_admin_bar( false ); // OK. +MyClass::add_filter( 'show_admin_bar', '__return_false' ); // OK. +echo ADD_FILTER; // OK. +namespace\add_filter( 'show_admin_bar', '__return_false' ); // OK. + +#[Show_Admin_Bar(false)] // OK. PHP 8.0+ class instantiation via an attribute. Can't contain a nested function call anyway. +function foo() {} + +array_walk($filters, \add_filter(...),); // OK. PHP 8.1 first class callable. + +// Incomplete function calls, should be ignored by the sniff. +$incorrect_but_ok = show_admin_bar(); // OK. +$incorrect_but_ok = add_filter(); // OK. + +// Safeguard that the sniff only flags the "show_admin_bar" filter. +add_filter( 'not_show_admin_bar', '__return_false', ); // OK. + +// Document that dynamic values will be flagged. +show_admin_bar( $unknown ); // Bad. +add_filter( 'show_admin_bar', $callable, ); // Bad. +add_filter('show_admin_bar', ...$params); // Bad. PHP 5.6 argument unpacking. + +// Document that fully qualified function calls and functions in unconventional case will correctly be recognized. +\add_filter( "show_admin_bar", '__return_true' ); // OK. +\Add_Filter( 'show_admin_bar', "__return_false", ); // Bad. + +\show_Admin_bar( true, ); // OK. +\show_admin_bar( false ); // Bad. +\SHOW_ADMIN_BAR( false, ); // Bad. diff --git a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php index 8973a169..30455dc4 100644 --- a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php +++ b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php @@ -51,6 +51,12 @@ public function getErrorList( $testFile = '' ) { 103 => 1, 104 => 1, 105 => 1, + 135 => 1, + 136 => 1, + 137 => 1, + 141 => 1, + 144 => 1, + 145 => 1, ]; case 'AdminBarRemovalUnitTest.css': From d2bfefd39f164bb20d680b94b35f1902983d7765 Mon Sep 17 00:00:00 2001 From: jrfnl Date: Sun, 20 Jul 2025 02:01:10 +0200 Subject: [PATCH 2/9] UserExperience/AdminBarRemoval: bug fix - disregard comments in parameter values The PHPCSUtils `PassedParameters::getParameters()` return value includes a `'clean'` array index, which contains the contents of the parameter stripped of surrounding whitespace and comments. The `AdminBarRemoval` sniff uses the parameter contents in a couple of places to compare against a specific text string, but would break if the parameter value would contain a comment. Fixed now. Includes tests. --- .../Sniffs/UserExperience/AdminBarRemovalSniff.php | 8 +++++--- .../UserExperience/AdminBarRemovalUnitTest.inc | 13 +++++++++++++ .../UserExperience/AdminBarRemovalUnitTest.php | 1 + 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php b/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php index ae98644b..35f1256b 100644 --- a/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php +++ b/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php @@ -201,19 +201,21 @@ public function process_parameters( $stackPtr, $group_name, $matched_content, $p switch ( $matched_content ) { case 'show_admin_bar': $error = true; - if ( $this->remove_only === true && $parameters[1]['raw'] === 'true' ) { + if ( $this->remove_only === true && $parameters[1]['clean'] === 'true' ) { $error = false; } break; case 'add_filter': - $filter_name = TextStrings::stripQuotes( $parameters[1]['raw'] ); + $filter_name = TextStrings::stripQuotes( $parameters[1]['clean'] ); if ( $filter_name !== 'show_admin_bar' ) { break; } $error = true; - if ( $this->remove_only === true && isset( $parameters[2]['raw'] ) && TextStrings::stripQuotes( $parameters[2]['raw'] ) === '__return_true' ) { + if ( $this->remove_only === true && isset( $parameters[2]['clean'] ) + && TextStrings::stripQuotes( $parameters[2]['clean'] ) === '__return_true' + ) { $error = false; } break; diff --git a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc index 8e237467..1a174526 100644 --- a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc +++ b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc @@ -143,3 +143,16 @@ add_filter('show_admin_bar', ...$params); // Bad. PHP 5.6 argument unpacking. \show_Admin_bar( true, ); // OK. \show_admin_bar( false ); // Bad. \SHOW_ADMIN_BAR( false, ); // Bad. + +// Comments in parameters should be ignored. +show_admin_bar( true /* turn it on */ ); // OK. +add_filter( + // Admin bar gives access to admin for users with the right permissions. + 'show_admin_bar', + '__return_false' +); // Bad. +add_filter( + 'show_admin_bar', + // Turn it on. + '__return_true' +); // OK. diff --git a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php index 30455dc4..d244f95a 100644 --- a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php +++ b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php @@ -57,6 +57,7 @@ public function getErrorList( $testFile = '' ) { 141 => 1, 144 => 1, 145 => 1, + 149 => 1, ]; case 'AdminBarRemovalUnitTest.css': From dda5e878c996901b8663bb7e5b83fdbbe018ca34 Mon Sep 17 00:00:00 2001 From: jrfnl Date: Mon, 21 Jul 2025 03:20:32 +0200 Subject: [PATCH 3/9] UserExperience/AdminBarRemoval: add support for handling PHP 8.0+ function calls using named parameters Includes tests. --- .../UserExperience/AdminBarRemovalSniff.php | 22 ++++++++++++++----- .../AdminBarRemovalUnitTest.inc | 11 ++++++++++ .../AdminBarRemovalUnitTest.php | 2 ++ 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php b/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php index 35f1256b..8975133f 100644 --- a/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php +++ b/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php @@ -12,6 +12,7 @@ use PHP_CodeSniffer\Util\Tokens; use PHPCSUtils\Utils\GetTokensAsString; +use PHPCSUtils\Utils\PassedParameters; use PHPCSUtils\Utils\TextStrings; use WordPressCS\WordPress\AbstractFunctionParameterSniff; @@ -200,21 +201,32 @@ public function process_parameters( $stackPtr, $group_name, $matched_content, $p $error = false; switch ( $matched_content ) { case 'show_admin_bar': + $show_param = PassedParameters::getParameterFromStack( $parameters, 1, 'show' ); + if ( $show_param === false ) { + break; + } + $error = true; - if ( $this->remove_only === true && $parameters[1]['clean'] === 'true' ) { + if ( $this->remove_only === true && $show_param['clean'] === 'true' ) { $error = false; } break; case 'add_filter': - $filter_name = TextStrings::stripQuotes( $parameters[1]['clean'] ); + $hook_name_param = PassedParameters::getParameterFromStack( $parameters, 1, 'hook_name' ); + if ( $hook_name_param === false ) { + break; + } + + $filter_name = TextStrings::stripQuotes( $hook_name_param['clean'] ); if ( $filter_name !== 'show_admin_bar' ) { break; } - $error = true; - if ( $this->remove_only === true && isset( $parameters[2]['clean'] ) - && TextStrings::stripQuotes( $parameters[2]['clean'] ) === '__return_true' + $callback_param = PassedParameters::getParameterFromStack( $parameters, 2, 'callback' ); + $error = true; + if ( $this->remove_only === true && $callback_param !== false + && TextStrings::stripQuotes( $callback_param['clean'] ) === '__return_true' ) { $error = false; } diff --git a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc index 1a174526..67ae59fb 100644 --- a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc +++ b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc @@ -156,3 +156,14 @@ add_filter( // Turn it on. '__return_true' ); // OK. + +// Safeguard handling of function calls using PHP 8.0+ named parameters. +show_admin_bar( shown: false ); // OK, well not really, typo in param name, but that's not the concern of the sniff. +\show_admin_bar( show: true ); // OK. +show_admin_bar( show: $toggle ); // Bad. + +add_filter(callback: '__return_false', priority: 10); // OK, well, not really, missing required $hook_name param, but that's not the concern of this sniff. +\add_filter(callback: '__return_false', hook_name: 'not_our_target'); // OK. +add_filter(hookName: 'show_admin_bar', callback: '__return_false',); // OK, well, not really, typo in param name, but that's not the concern of the sniff. +add_filter( callback: '__return_true', hook_name: 'show_admin_bar', ); // Ok. +\add_filter( callback: '__return_false', hook_name: 'show_admin_bar', ); // Bad. diff --git a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php index d244f95a..5c162a90 100644 --- a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php +++ b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php @@ -58,6 +58,8 @@ public function getErrorList( $testFile = '' ) { 144 => 1, 145 => 1, 149 => 1, + 163 => 1, + 169 => 1, ]; case 'AdminBarRemovalUnitTest.css': From 2520ce515375c017dfb90be621f5525a840e040e Mon Sep 17 00:00:00 2001 From: jrfnl Date: Tue, 29 Jul 2025 21:20:45 +0200 Subject: [PATCH 4/9] UserExperience/AdminBarRemoval: bug fix - recognize `add_action()` as alias ... for `add_filter()`. Includes test. --- .../Sniffs/UserExperience/AdminBarRemovalSniff.php | 2 ++ .../Tests/UserExperience/AdminBarRemovalUnitTest.inc | 3 +++ .../Tests/UserExperience/AdminBarRemovalUnitTest.php | 1 + 3 files changed, 6 insertions(+) diff --git a/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php b/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php index 8975133f..7e2c4160 100644 --- a/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php +++ b/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php @@ -53,6 +53,7 @@ class AdminBarRemovalSniff extends AbstractFunctionParameterSniff { protected $target_functions = [ 'show_admin_bar' => true, 'add_filter' => true, + 'add_action' => true, // Alias of add_filter(). ]; /** @@ -212,6 +213,7 @@ public function process_parameters( $stackPtr, $group_name, $matched_content, $p } break; + case 'add_action': case 'add_filter': $hook_name_param = PassedParameters::getParameterFromStack( $parameters, 1, 'hook_name' ); if ( $hook_name_param === false ) { diff --git a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc index 67ae59fb..84cc193f 100644 --- a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc +++ b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc @@ -167,3 +167,6 @@ add_filter(callback: '__return_false', priority: 10); // OK, well, not really, m add_filter(hookName: 'show_admin_bar', callback: '__return_false',); // OK, well, not really, typo in param name, but that's not the concern of the sniff. add_filter( callback: '__return_true', hook_name: 'show_admin_bar', ); // Ok. \add_filter( callback: '__return_false', hook_name: 'show_admin_bar', ); // Bad. + +// Bug: add_action() is an alias of add_filter. +add_action( 'show_admin_bar', $callable, ); // Bad. diff --git a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php index 5c162a90..8a525957 100644 --- a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php +++ b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php @@ -60,6 +60,7 @@ public function getErrorList( $testFile = '' ) { 149 => 1, 163 => 1, 169 => 1, + 172 => 1, ]; case 'AdminBarRemovalUnitTest.css': From ba6bce6da72638ef0f871627a2c14ddb3469e716 Mon Sep 17 00:00:00 2001 From: jrfnl Date: Tue, 29 Jul 2025 21:41:28 +0200 Subject: [PATCH 5/9] UserExperience/AdminBarRemoval: add support for recognizing PHP 8.1+ first class callables ... when used as the `$callback` parameter for `add_filter()`/`add_action()`. Includes tests. --- .../UserExperience/AdminBarRemovalSniff.php | 15 +++++++++++---- .../UserExperience/AdminBarRemovalUnitTest.inc | 7 +++++++ .../UserExperience/AdminBarRemovalUnitTest.php | 3 +++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php b/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php index 7e2c4160..d8e9b193 100644 --- a/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php +++ b/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php @@ -227,10 +227,17 @@ public function process_parameters( $stackPtr, $group_name, $matched_content, $p $callback_param = PassedParameters::getParameterFromStack( $parameters, 2, 'callback' ); $error = true; - if ( $this->remove_only === true && $callback_param !== false - && TextStrings::stripQuotes( $callback_param['clean'] ) === '__return_true' - ) { - $error = false; + if ( $this->remove_only === true && $callback_param !== false ) { + $clean_param = TextStrings::stripQuotes( $callback_param['clean'] ); + + $expected = Tokens::$emptyTokens + Tokens::$stringTokens; + $has_non_textstring = $this->phpcsFile->findNext( $expected, $callback_param['start'], ( $callback_param['end'] + 1 ), true ); + if ( ( $has_non_textstring === false && $clean_param === '__return_true' ) + || ( $has_non_textstring !== false + && preg_match( '`^\\\\?__return_true\s*\(\s*\.\.\.\s*\)$`', $clean_param ) === 1 ) + ) { + $error = false; + } } break; } diff --git a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc index 84cc193f..23e5965d 100644 --- a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc +++ b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc @@ -170,3 +170,10 @@ add_filter( callback: '__return_true', hook_name: 'show_admin_bar', ); // Ok. // Bug: add_action() is an alias of add_filter. add_action( 'show_admin_bar', $callable, ); // Bad. + +// Safeguard handling of filter callback being passed as PHP 8.1+ first class callable. +add_filter( 'show_admin_bar', __return_true(...) ); // OK. +add_filter( 'show_admin_bar', \__return_true( ... ) ); // OK. +add_action( 'show_admin_bar', __return_false ( ... ) , ); // Bad. +add_filter( 'show_admin_bar', \__return_false(...) ); // Bad. +add_filter( 'show_admin_bar', "__return_true(...)" ); // Bad. Invalid callback. diff --git a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php index 8a525957..a9cc15db 100644 --- a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php +++ b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php @@ -61,6 +61,9 @@ public function getErrorList( $testFile = '' ) { 163 => 1, 169 => 1, 172 => 1, + 177 => 1, + 178 => 1, + 179 => 1, ]; case 'AdminBarRemovalUnitTest.css': From 25ce9dfa6112761154be5d3cdbf1255458480549 Mon Sep 17 00:00:00 2001 From: jrfnl Date: Tue, 29 Jul 2025 21:48:41 +0200 Subject: [PATCH 6/9] UserExperience/AdminBarRemoval: bug fix - function names are case-insensitive ... even when passed as callbacks. Includes test. --- .../Sniffs/UserExperience/AdminBarRemovalSniff.php | 2 +- .../Tests/UserExperience/AdminBarRemovalUnitTest.inc | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php b/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php index d8e9b193..6b2d8c33 100644 --- a/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php +++ b/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php @@ -228,7 +228,7 @@ public function process_parameters( $stackPtr, $group_name, $matched_content, $p $callback_param = PassedParameters::getParameterFromStack( $parameters, 2, 'callback' ); $error = true; if ( $this->remove_only === true && $callback_param !== false ) { - $clean_param = TextStrings::stripQuotes( $callback_param['clean'] ); + $clean_param = strtolower( TextStrings::stripQuotes( $callback_param['clean'] ) ); $expected = Tokens::$emptyTokens + Tokens::$stringTokens; $has_non_textstring = $this->phpcsFile->findNext( $expected, $callback_param['start'], ( $callback_param['end'] + 1 ), true ); diff --git a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc index 23e5965d..abc0a248 100644 --- a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc +++ b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.inc @@ -177,3 +177,7 @@ add_filter( 'show_admin_bar', \__return_true( ... ) ); // OK. add_action( 'show_admin_bar', __return_false ( ... ) , ); // Bad. add_filter( 'show_admin_bar', \__return_false(...) ); // Bad. add_filter( 'show_admin_bar', "__return_true(...)" ); // Bad. Invalid callback. + +// Bug fix: function names are case-insensitive. +\add_filter( "show_admin_bar", '__Return_TRUE' ); // OK. +add_filter( 'show_admin_bar', __Return_True(...) ); // OK. From 52c0e1474eda4d123cffa121a5020d533aa6cfb3 Mon Sep 17 00:00:00 2001 From: jrfnl Date: Mon, 21 Jul 2025 20:36:34 +0200 Subject: [PATCH 7/9] UserExperience/AdminBarRemoval: remove some redundant logic No need for a `switch` here. --- .../Tests/UserExperience/AdminBarRemovalUnitTest.php | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php index a9cc15db..88f7e823 100644 --- a/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php +++ b/WordPressVIPMinimum/Tests/UserExperience/AdminBarRemovalUnitTest.php @@ -98,15 +98,6 @@ public function getErrorList( $testFile = '' ) { * @return array Key is the line number, value is the number of expected warnings. */ public function getWarningList( $testFile = '' ) { - switch ( $testFile ) { - case 'AdminBarRemovalUnitTest.css': - return []; - - case 'AdminBarRemovalUnitTest.inc': - return []; - - default: - return []; - } + return []; } } From b42d40500d7dd5d066a045ad1212f47c08268270 Mon Sep 17 00:00:00 2001 From: jrfnl Date: Tue, 15 Jul 2025 03:27:06 +0200 Subject: [PATCH 8/9] UserExperience/AdminBarRemoval: bug fix - CSS file might be handled as PHP file A number of IDEs will use STDIN to run PHPCS and will pass the `stdin_path` to PHPCS to set the file name, which often results in the filename being quoted. In that case, the original logic in this sniff would break as the `$file_extension` would end up being `'css"'`, which doesn't match the expected `'css'`. The new PHPCSUtils 1.1.0 `FilePath::getName()` method will strip quotes from the file name, as well as normalize the slashes to forward (*nix) slashes. Applying that method fixes the bug. --- .../Sniffs/UserExperience/AdminBarRemovalSniff.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php b/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php index 6b2d8c33..de4c526d 100644 --- a/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php +++ b/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php @@ -11,6 +11,7 @@ namespace WordPressVIPMinimum\Sniffs\UserExperience; use PHP_CodeSniffer\Util\Tokens; +use PHPCSUtils\Utils\FilePath; use PHPCSUtils\Utils\GetTokensAsString; use PHPCSUtils\Utils\PassedParameters; use PHPCSUtils\Utils\TextStrings; @@ -158,7 +159,7 @@ public function register() { */ public function process_token( $stackPtr ) { - $file_name = $this->phpcsFile->getFilename(); + $file_name = FilePath::getName( $this->phpcsFile ); $file_extension = substr( strrchr( $file_name, '.' ), 1 ); if ( $file_extension === 'css' ) { From cd88a8b123069e669c241c91a0a8fc27b7dafe77 Mon Sep 17 00:00:00 2001 From: jrfnl Date: Tue, 15 Jul 2025 03:28:35 +0200 Subject: [PATCH 9/9] UserExperience/AdminBarRemoval: minor simplification Let PHP sort out splitting the extension off the file name. --- .../Sniffs/UserExperience/AdminBarRemovalSniff.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php b/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php index de4c526d..4f859fc4 100644 --- a/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php +++ b/WordPressVIPMinimum/Sniffs/UserExperience/AdminBarRemovalSniff.php @@ -160,7 +160,7 @@ public function register() { public function process_token( $stackPtr ) { $file_name = FilePath::getName( $this->phpcsFile ); - $file_extension = substr( strrchr( $file_name, '.' ), 1 ); + $file_extension = pathinfo( $file_name, \PATHINFO_EXTENSION ); if ( $file_extension === 'css' ) { if ( $this->tokens[ $stackPtr ]['code'] === \T_STYLE ) {