From f3e708f5e08b184711f586fe18731fea44f2188e Mon Sep 17 00:00:00 2001 From: Daniel Siepmann Date: Tue, 4 Apr 2017 10:54:41 +0200 Subject: [PATCH] BUGFIX: Allow multiple type hints in php docs * Respect possible separation by "|" and handle each of them. Resolves: #48 --- .../AbstractClassnameChecker.php | 9 +++++---- .../LegacyClassnames/DocCommentSniff.php | 20 ++++++++++++++----- .../LegacyClassnames/InlineCommentSniff.php | 7 ++++--- .../InstantiationWithMakeInstanceSniff.php | 7 ++++--- .../InstantiationWithObjectManagerSniff.php | 7 ++++--- .../Sniffs/LegacyClassnames/IsACallSniff.php | 7 ++++--- 6 files changed, 36 insertions(+), 21 deletions(-) diff --git a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/AbstractClassnameChecker.php b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/AbstractClassnameChecker.php index a13fe15..77bd49c 100644 --- a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/AbstractClassnameChecker.php +++ b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/AbstractClassnameChecker.php @@ -234,7 +234,7 @@ abstract class AbstractClassnameChecker implements PhpCsSniff $phpcsFile->fixer->replaceToken( $classnamePosition, - $this->getTokenForReplacement($prefix . $this->getNewClassname($classname)) + $this->getTokenForReplacement($prefix . $this->getNewClassname($classname), $classname) ); } @@ -242,12 +242,13 @@ abstract class AbstractClassnameChecker implements PhpCsSniff * String to use for replacing / fixing the token. * Default is class name itself, can be overwritten in sniff for special behaviour. * - * @param string $classname + * @param string $newClassname + * @param string $originalClassname * @return string */ - protected function getTokenForReplacement($classname) + protected function getTokenForReplacement($newClassname, $originalClassname) { - return $classname; + return $newClassname; } /** diff --git a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/DocCommentSniff.php b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/DocCommentSniff.php index 2a85c89..2a540bb 100644 --- a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/DocCommentSniff.php +++ b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/DocCommentSniff.php @@ -66,22 +66,32 @@ class Typo3Update_Sniffs_LegacyClassnames_DocCommentSniff extends AbstractClassn if ($classnamePosition === false) { return; } - $classname = explode(' ', $tokens[$classnamePosition]['content'])[0]; + $classnames = explode('|', explode(' ', $tokens[$classnamePosition]['content'])[0]); $this->originalTokenContent = $tokens[$classnamePosition]['content']; - $this->addFixableError($phpcsFile, $classnamePosition, $classname); + foreach ($classnames as $classname) { + $this->addFixableError($phpcsFile, $classnamePosition, $classname); + } } /** * As token contains more then just class name, we have to build new content ourself. * - * @param string $classname + * @param string $newClassname + * @param string $originalClassname * @return string */ - protected function getTokenForReplacement($classname) + protected function getTokenForReplacement($newClassname, $originalClassname) { $token = explode(' ', $this->originalTokenContent); - $token[0] = $classname; + + $classNames = explode('|', $token[0]); + foreach ($classNames as $position => $classname) { + if ($classname === $originalClassname) { + $classNames[$position] = $newClassname; + } + } + $token[0] = implode('|', $classNames); return implode(' ', $token); } diff --git a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InlineCommentSniff.php b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InlineCommentSniff.php index dc9c17d..4740c0e 100644 --- a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InlineCommentSniff.php +++ b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InlineCommentSniff.php @@ -81,13 +81,14 @@ class Typo3Update_Sniffs_LegacyClassnames_InlineCommentSniff extends AbstractCla /** * As token contains more then just class name, we have to build new content ourself. * - * @param string $classname + * @param string $newClassname + * @param string $originalClassname * @return string */ - protected function getTokenForReplacement($classname) + protected function getTokenForReplacement($newClassname, $originalClassname) { $token = preg_split('/\s+/', $this->originalTokenContent); - $token[$this->getClassnamePosition($token)] = $classname; + $token[$this->getClassnamePosition($token)] = $newClassname; return implode(' ', $token); } diff --git a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithMakeInstanceSniff.php b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithMakeInstanceSniff.php index 7e06b6b..b25c613 100644 --- a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithMakeInstanceSniff.php +++ b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithMakeInstanceSniff.php @@ -73,11 +73,12 @@ class Typo3Update_Sniffs_LegacyClassnames_InstantiationWithMakeInstanceSniff ext /** * As token contains more then just class name, we have to build new content ourself. * - * @param string $classname + * @param string $newClassname + * @param string $originalClassname * @return string */ - protected function getTokenForReplacement($classname) + protected function getTokenForReplacement($newClassname, $originalClassname) { - return $this->getTokenReplacementForString($classname); + return $this->getTokenReplacementForString($newClassname); } } diff --git a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithObjectManagerSniff.php b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithObjectManagerSniff.php index a3d173f..67014fe 100644 --- a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithObjectManagerSniff.php +++ b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithObjectManagerSniff.php @@ -83,11 +83,12 @@ class Typo3Update_Sniffs_LegacyClassnames_InstantiationWithObjectManagerSniff ex /** * As token contains more then just class name, we have to build new content ourself. * - * @param string $classname + * @param string $newClassname + * @param string $originalClassname * @return string */ - protected function getTokenForReplacement($classname) + protected function getTokenForReplacement($newClassname, $originalClassname) { - return $this->getTokenReplacementForString($classname); + return $this->getTokenReplacementForString($newClassname); } } diff --git a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/IsACallSniff.php b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/IsACallSniff.php index b4a2f30..89bd2fa 100644 --- a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/IsACallSniff.php +++ b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/IsACallSniff.php @@ -72,11 +72,12 @@ class Typo3Update_Sniffs_LegacyClassnames_IsACallSniff extends AbstractClassname /** * As token contains more then just class name, we have to build new content ourself. * - * @param string $classname + * @param string $newClassname + * @param string $originalClassname * @return string */ - protected function getTokenForReplacement($classname) + protected function getTokenForReplacement($newClassname, $originalClassname) { - return $this->getTokenReplacementForString($classname); + return $this->getTokenReplacementForString($newClassname); } }