From 940690d80ad4f616319e5e4e02e974d96e79b4c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Wer=C5=82os?= Date: Fri, 10 Dec 2021 18:13:35 +0100 Subject: [PATCH] NonPrintableCharacterFixer - fix for when removing non-printable character break PHP syntax --- src/Fixer/Basic/NonPrintableCharacterFixer.php | 14 +++++++++++++- .../Fixer/Basic/NonPrintableCharacterFixerTest.php | 12 ++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/Fixer/Basic/NonPrintableCharacterFixer.php b/src/Fixer/Basic/NonPrintableCharacterFixer.php index a47707d91cb..428cdab9792 100644 --- a/src/Fixer/Basic/NonPrintableCharacterFixer.php +++ b/src/Fixer/Basic/NonPrintableCharacterFixer.php @@ -174,7 +174,19 @@ protected function applyFix(\SplFileInfo $file, Tokens $tokens): void } if ($token->isGivenKind(self::$tokens)) { - $tokens[$index] = new Token([$token->getId(), strtr($content, $replacements)]); + $newContent = strtr($content, $replacements); + + // variable name cannot contain space + if ($token->isGivenKind([T_STRING_VARNAME, T_VARIABLE]) && str_contains($newContent, ' ')) { + continue; + } + + // multiline comment must have "*/" only at the end + if ($token->isGivenKind([T_COMMENT, T_DOC_COMMENT]) && str_starts_with($newContent, '/*') && strpos($newContent, '*/') !== \strlen($newContent) - 2) { + continue; + } + + $tokens[$index] = new Token([$token->getId(), $newContent]); } } } diff --git a/tests/Fixer/Basic/NonPrintableCharacterFixerTest.php b/tests/Fixer/Basic/NonPrintableCharacterFixerTest.php index d34238cc3d6..b4080f9440d 100644 --- a/tests/Fixer/Basic/NonPrintableCharacterFixerTest.php +++ b/tests/Fixer/Basic/NonPrintableCharacterFixerTest.php @@ -103,6 +103,18 @@ function f(string $p) 'abc', 'a'.pack('H*', 'e2808b').'bc', ], + [ + '