From ba2ed2cf5f13acd53d55e975a4bbff69b61676bb Mon Sep 17 00:00:00 2001 From: Daniel Siepmann Date: Tue, 21 Mar 2017 08:59:26 +0100 Subject: [PATCH] TASK: Refactor code * As we sometimes have to fix classnames inside a string, move this common work to trait. * Also make classname "free" of string quotes inside the check, not the concrete sniffs. --- .../ClassnameCheckerTrait.php | 24 ++++++++++++++++++- .../InstantiationWithMakeInstanceSniff.php | 14 ++--------- .../InstantiationWithObjectManagerSniff.php | 14 ++--------- 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/ClassnameCheckerTrait.php b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/ClassnameCheckerTrait.php index c0210ce..c5e6e29 100644 --- a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/ClassnameCheckerTrait.php +++ b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/ClassnameCheckerTrait.php @@ -139,7 +139,7 @@ trait ClassnameCheckerTrait */ public function addFixableError(PhpcsFile $phpcsFile, $classnamePosition, $classname) { - $classname = trim($classname, '\\'); + $classname = trim($classname, '\\\'"'); // Remove trailing slash, and quotes. $this->addMaybeWarning($phpcsFile, $classnamePosition, $classname); if ($this->isLegacyClassname($classname) === false) { @@ -210,4 +210,26 @@ trait ClassnameCheckerTrait { return $classname; } + + /** + * Use this inside your getTokenForReplacement if $classname is inside a string. + * Strings will be converted to single quotes. + * + * @param string $classname + * @return string + */ + protected function getTokenReplacementForString($classname) + { + $stringSign = $this->originalTokenContent[0]; + $token = explode($stringSign, $this->originalTokenContent); + $token[1] = $classname; + + // Migrate double quote to single quote. + // This way no escaping of backslashes in class names is necessary. + if ($stringSign === '"') { + $stringSign = "'"; + } + + return implode($stringSign, $token); + } } diff --git a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithMakeInstanceSniff.php b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithMakeInstanceSniff.php index 989668a..8b46d7e 100644 --- a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithMakeInstanceSniff.php +++ b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithMakeInstanceSniff.php @@ -70,7 +70,7 @@ class Typo3Update_Sniffs_LegacyClassnames_InstantiationWithMakeInstanceSniff imp return; } - $classname = trim($tokens[$classnamePosition]['content'], '\'"'); + $classname = $tokens[$classnamePosition]['content']; $this->originalTokenContent = $tokens[$classnamePosition]['content']; $this->addFixableError($phpcsFile, $classnamePosition, $classname); } @@ -83,16 +83,6 @@ class Typo3Update_Sniffs_LegacyClassnames_InstantiationWithMakeInstanceSniff imp */ protected function getTokenForReplacement($classname) { - $stringSign = $this->originalTokenContent[0]; - $token = explode($stringSign, $this->originalTokenContent); - $token[1] = $classname; - - // Migrate double quote to single quote. - // This way no escaping of backslashes in class names is necessary. - if ($stringSign === '"') { - $stringSign = "'"; - } - - return implode($stringSign, $token); + return $this->getTokenReplacementForString($classname); } } diff --git a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithObjectManagerSniff.php b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithObjectManagerSniff.php index dec134f..632edce 100644 --- a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithObjectManagerSniff.php +++ b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithObjectManagerSniff.php @@ -74,7 +74,7 @@ class Typo3Update_Sniffs_LegacyClassnames_InstantiationWithObjectManagerSniff im ); } - $classname = trim($tokens[$classnamePosition]['content'], '\'"'); + $classname = $tokens[$classnamePosition]['content']; $this->originalTokenContent = $tokens[$classnamePosition]['content']; $this->addFixableError($phpcsFile, $classnamePosition, $classname); } @@ -87,16 +87,6 @@ class Typo3Update_Sniffs_LegacyClassnames_InstantiationWithObjectManagerSniff im */ protected function getTokenForReplacement($classname) { - $stringSign = $this->originalTokenContent[0]; - $token = explode($stringSign, $this->originalTokenContent); - $token[1] = $classname; - - // Migrate double quote to single quote. - // This way no escaping of backslashes in class names is necessary. - if ($stringSign === '"') { - $stringSign = "'"; - } - - return implode($stringSign, $token); + return $this->getTokenReplacementForString($classname); } }