TASK: Migrate MissingNamespaceSniff
* Make MissingNamespaceSniff work again. * Move to old namespace as it's a custom sniff, not a general one. * Do not use new feature here, implement logic internal. * Remove message from ruleset, use it directly. Relates: #72
This commit is contained in:
parent
d3b612790c
commit
efd5d9114f
10 changed files with 33 additions and 41 deletions
|
@ -6,10 +6,10 @@ Typo3Update\Feature\LegacyClassnameFeature:
|
|||
- Typo3Update_Sniffs_Classname_InstantiationWithNewSniff
|
||||
- Typo3Update_Sniffs_Classname_InstantiationWithObjectManagerSniff
|
||||
- Typo3Update_Sniffs_Classname_IsACallSniff
|
||||
- Typo3Update_Sniffs_Classname_MissingNamespaceSniff
|
||||
- Typo3Update_Sniffs_Classname_MissingVendorForPluginsAndModulesSniff
|
||||
- Typo3Update_Sniffs_Classname_PhpDocCommentSniff
|
||||
- Typo3Update_Sniffs_Classname_StaticCallSniff
|
||||
- Typo3Update_Sniffs_Classname_TypeHintCatchExceptionSniff
|
||||
- Typo3Update_Sniffs_Classname_TypeHintSniff
|
||||
- Typo3Update_Sniffs_Classname_UseSniff
|
||||
- Typo3Update_Sniffs_LegacyClassname_MissingNamespaceSniff
|
||||
|
|
|
@ -20,13 +20,14 @@
|
|||
*/
|
||||
|
||||
use PHP_CodeSniffer_File as PhpCsFile;
|
||||
use Typo3Update\Sniffs\Classname\AbstractClassnameChecker;
|
||||
use PHP_CodeSniffer_Sniff as PhpCsSniff;
|
||||
use Typo3Update\Feature\LegacyClassnameMapping;
|
||||
use Typo3Update\Options;
|
||||
|
||||
/**
|
||||
* Detect missing namespaces for class definitions.
|
||||
*/
|
||||
class Typo3Update_Sniffs_Classname_MissingNamespaceSniff extends AbstractClassnameChecker
|
||||
class Typo3Update_Sniffs_LegacyClassname_MissingNamespaceSniff implements PhpCsSniff
|
||||
{
|
||||
/**
|
||||
* Returns the token types that this sniff is interested in.
|
||||
|
@ -66,28 +67,16 @@ class Typo3Update_Sniffs_Classname_MissingNamespaceSniff extends AbstractClassna
|
|||
}
|
||||
|
||||
$classname = $tokens[$classnamePosition]['content'];
|
||||
// TODO: Migrate class, use custom feature as some parts are different!
|
||||
// $this->addFixableError($phpcsFile, $classnamePosition, $classname);
|
||||
}
|
||||
|
||||
/**
|
||||
* Overwrite as we don't look up the classname, but check whether the style is legacy.
|
||||
*
|
||||
* @param string $classname
|
||||
* @return bool
|
||||
*/
|
||||
protected function isLegacyClassname($classname)
|
||||
{
|
||||
return strpos($classname, 'Tx_') === 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $classname
|
||||
* @return string
|
||||
*/
|
||||
protected function getNewClassname($classname)
|
||||
{
|
||||
return substr($classname, strrpos($classname, '_') + 1);
|
||||
$fix = $phpcsFile->addFixableError(
|
||||
'Legacy class definitions are not allowed; found "%s".'
|
||||
. ' Wrap your class inside a namespace.',
|
||||
$classnamePosition,
|
||||
'legacyClassname',
|
||||
[$classname]
|
||||
);
|
||||
if ($fix === true) {
|
||||
$this->replaceLegacyClassname($phpcsFile, $classnamePosition, $classname);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -95,18 +84,12 @@ class Typo3Update_Sniffs_Classname_MissingNamespaceSniff extends AbstractClassna
|
|||
* @param PhpCsFile $phpcsFile
|
||||
* @param int $classnamePosition
|
||||
* @param string $classname
|
||||
* @param bool $forceEmptyPrefix Defines whether '\\' prefix should be checked or always be left out.
|
||||
*
|
||||
* @SuppressWarnings(PHPMD.BooleanArgumentFlag)
|
||||
*/
|
||||
protected function replaceLegacyClassname(
|
||||
PhpCsFile $phpcsFile,
|
||||
$classnamePosition,
|
||||
$classname,
|
||||
$forceEmptyPrefix = true
|
||||
$classname
|
||||
) {
|
||||
parent::replaceLegacyClassname($phpcsFile, $classnamePosition, $classname, $forceEmptyPrefix);
|
||||
|
||||
$tokens = $phpcsFile->getTokens();
|
||||
$lineEndings = PhpCsFile::detectLineEndings($phpcsFile->getFilename());
|
||||
$suffix = $lineEndings;
|
||||
|
@ -115,16 +98,29 @@ class Typo3Update_Sniffs_Classname_MissingNamespaceSniff extends AbstractClassna
|
|||
$suffix .= $lineEndings;
|
||||
}
|
||||
|
||||
$phpcsFile->fixer->replaceToken(
|
||||
$classnamePosition,
|
||||
substr($classname, strrpos($classname, '_') + 1)
|
||||
);
|
||||
$phpcsFile->fixer->replaceToken(
|
||||
$this->getNamespacePosition($phpcsFile),
|
||||
'<?php' . $lineEndings . $this->getNamespaceDefinition($classname) . $suffix
|
||||
);
|
||||
$this->addLegacyClassname(
|
||||
LegacyClassnameMapping::getInstance()->addLegacyClassname(
|
||||
$classname,
|
||||
$this->getNamespace($classname) . '\\' . $this->getNewClassname($classname)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $classname
|
||||
* @return string
|
||||
*/
|
||||
protected function getNewClassname($classname)
|
||||
{
|
||||
return substr($classname, strrpos($classname, '_') + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param PhpCsFile $phpcsFile
|
||||
* @return int|false
|
|
@ -12,8 +12,4 @@
|
|||
<property name="allowedTags" type="array" value="@param,@return,@var,@see,@throws"/>
|
||||
</properties>
|
||||
</rule>
|
||||
|
||||
<rule ref="Typo3Update.Classname.MissingNamespace.legacyClassname">
|
||||
<message>Legacy class definitions are not allowed; found "%s". Wrap your class inside a namespace.</message>
|
||||
</rule>
|
||||
</ruleset>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
--- tests/Fixtures/Standards/Typo3Update/Sniffs/Classname/MissingNamespaceSniff/customVendor/InputFileForIssues.php
|
||||
--- tests/Fixtures/Standards/Typo3Update/Sniffs/LegacyClassname/MissingNamespaceSniff/customVendor/InputFileForIssues.php
|
||||
+++ PHP_CodeSniffer
|
||||
@@ -1,4 +1,5 @@
|
||||
<?php
|
|
@ -9,7 +9,7 @@
|
|||
"line": 24,
|
||||
"message": "Legacy class definitions are not allowed; found \"Tx_ExtName_Controller_Frontendcontroller\". Wrap your class inside a namespace.",
|
||||
"severity": 5,
|
||||
"source": "Typo3Update.Classname.MissingNamespace.legacyClassname",
|
||||
"source": "Typo3Update.LegacyClassname.MissingNamespace.legacyClassname",
|
||||
"type": "ERROR"
|
||||
}
|
||||
],
|
|
@ -1,4 +1,4 @@
|
|||
--- tests/Fixtures/Standards/Typo3Update/Sniffs/Classname/MissingNamespaceSniff/defaultVendor/InputFileForIssues.php
|
||||
--- tests/Fixtures/Standards/Typo3Update/Sniffs/LegacyClassname/MissingNamespaceSniff/defaultVendor/InputFileForIssues.php
|
||||
+++ PHP_CodeSniffer
|
||||
@@ -1,4 +1,5 @@
|
||||
<?php
|
|
@ -9,7 +9,7 @@
|
|||
"line": 24,
|
||||
"message": "Legacy class definitions are not allowed; found \"Tx_ExtName_Controller_Frontendcontroller\". Wrap your class inside a namespace.",
|
||||
"severity": 5,
|
||||
"source": "Typo3Update.Classname.MissingNamespace.legacyClassname",
|
||||
"source": "Typo3Update.LegacyClassname.MissingNamespace.legacyClassname",
|
||||
"type": "ERROR"
|
||||
}
|
||||
],
|
Loading…
Reference in a new issue