From fabecca4fd530b6357b6422a6444d0aa3e935a33 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Sat, 29 Aug 2026 09:26:28 +0200 Subject: [PATCH] Fix double backslash in FunctionFirstClassCallableRector Strip leading backslash before building the callable name so a fully qualified string callable like '\trim' produces \trim(...) instead of invalid \\trim(...). Claude-Session: https://claude.ai/code/session_01NAL2P8PQ3MY37Faby2r8st --- .../Fixture/leading_backslash.php.inc | 27 +++++++++++++++++++ .../FunctionFirstClassCallableRector.php | 9 ++++--- 2 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 rules-tests/CodingStyle/Rector/FuncCall/FunctionFirstClassCallableRector/Fixture/leading_backslash.php.inc diff --git a/rules-tests/CodingStyle/Rector/FuncCall/FunctionFirstClassCallableRector/Fixture/leading_backslash.php.inc b/rules-tests/CodingStyle/Rector/FuncCall/FunctionFirstClassCallableRector/Fixture/leading_backslash.php.inc new file mode 100644 index 00000000000..14a46694060 --- /dev/null +++ b/rules-tests/CodingStyle/Rector/FuncCall/FunctionFirstClassCallableRector/Fixture/leading_backslash.php.inc @@ -0,0 +1,27 @@ + +----- + diff --git a/rules/CodingStyle/Rector/FuncCall/FunctionFirstClassCallableRector.php b/rules/CodingStyle/Rector/FuncCall/FunctionFirstClassCallableRector.php index 8b98d55fcf0..b94041c893c 100644 --- a/rules/CodingStyle/Rector/FuncCall/FunctionFirstClassCallableRector.php +++ b/rules/CodingStyle/Rector/FuncCall/FunctionFirstClassCallableRector.php @@ -101,11 +101,14 @@ public function refactor(Node $node): ?FuncCall continue; } + $isFullyQualified = str_starts_with($arg->value->value, '\\'); + $callableName = ltrim($arg->value->value, '\\'); + $node->args[$key] = new Arg( new FuncCall( - str_contains($arg->value->value, '\\') - ? new FullyQualified($arg->value->value) - : new Name($arg->value->value), + $isFullyQualified || str_contains($callableName, '\\') + ? new FullyQualified($callableName) + : new Name($callableName), [new VariadicPlaceholder()] ), name: $arg->name