diff --git a/Readme.rst b/Readme.rst
index 228c3b6..ebb3c0a 100644
--- a/Readme.rst
+++ b/Readme.rst
@@ -51,6 +51,7 @@ new ones like ``\TYPO3\Extbase\...``. This is done for:
- Typehints in methods and function like injects.
+- ``instanceof`` checks.
What does it look like?
=======================
@@ -81,3 +82,23 @@ What does it look like?
----------------------------------------------------------------------
Time: 35ms; Memory: 5Mb
+
+Configuration
+=============
+
+Configuration is done through PHPCS Standards, e.g. provide a custom ``ruleset.xml`` or customize
+the provided one.
+
+``legacyExtensions``
+ Configures which extension names are legacy. Used to provide further checks and warnings about
+ possible legacy code. E.g. inside of non auto migrated situations.
+
+ Example:
+
+.. code:: xml
+
+
+
+
+
+
diff --git a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/ClassnameCheckerTrait.php b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/ClassnameCheckerTrait.php
index 86ca738..8d7f6a7 100644
--- a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/ClassnameCheckerTrait.php
+++ b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/ClassnameCheckerTrait.php
@@ -33,6 +33,16 @@ trait ClassnameCheckerTrait
*/
private $legacyClassnames = [];
+ /**
+ * A list of extension names that might contain legacy class names.
+ * Used to check clas names for warnings.
+ *
+ * Configure through ruleset.xml.
+ *
+ * @var array
+ */
+ public $legacyExtensions = ['Extbase', 'Fluid'];
+
/**
* @param string $mappingFile File containing php array for mapping.
*/
@@ -59,6 +69,31 @@ trait ClassnameCheckerTrait
return isset($this->legacyClassnames[strtolower($classname)]);
}
+ /**
+ * Guesses whether the given classname is legacy. Will not check
+ * isLegacyClassname
+ *
+ * @param string $classname
+ * @return bool
+ */
+ private function isMaybeLegacyClassname($classname)
+ {
+ if (strpos($classname, 'Tx_') === false) {
+ return false;
+ }
+
+ $extensionName = call_user_func(function ($classname) {
+ $nameParts = explode('_', $classname);
+ return $nameParts[1];
+ }, $classname);
+
+ if (!in_array($extensionName, $this->legacyExtensions)) {
+ return false;
+ }
+
+ return true;
+ }
+
/**
* @param string $classname
* @return string
@@ -78,6 +113,8 @@ trait ClassnameCheckerTrait
*/
public function addFixableError(PhpcsFile $phpcsFile, $classnamePosition, $classname)
{
+ $this->addMaybeWarning($phpcsFile, $classnamePosition, $classname);
+
if ($this->isLegacyClassname($classname) === false) {
return;
}
@@ -97,6 +134,27 @@ trait ClassnameCheckerTrait
}
}
+ /**
+ * Add an warning if given $classname is maybe legacy.
+ *
+ * @param PhpcsFile $phpcsFile
+ * @param int $classnamePosition
+ * @param string $classname
+ */
+ private function addMaybeWarning(PhpcsFile $phpcsFile, $classnamePosition, $classname)
+ {
+ if ($this->isLegacyClassname($classname) || $this->isMaybeLegacyClassname($classname) === false) {
+ return;
+ }
+
+ $phpcsFile->addWarning(
+ 'Legacy classes are not allowed; found %s that might be a legacy class that does not exist anymore',
+ $classnamePosition,
+ 'mightBeLegacyClassname',
+ [$classname]
+ );
+ }
+
/**
* String to use for replacing / fixing the token.
* Default is class name itself, can be overwritten in sniff for special behaviour.
diff --git a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstanceofSniff.php b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstanceofSniff.php
new file mode 100644
index 0000000..05cf416
--- /dev/null
+++ b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstanceofSniff.php
@@ -0,0 +1,61 @@
+
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+/**
+ * Detect and migrate extend and implement of old legacy classnames.
+ */
+class Typo3Update_Sniffs_LegacyClassnames_InstanceofSniff implements PHP_CodeSniffer_Sniff
+{
+ use \Typo3Update\Sniffs\LegacyClassnames\ClassnameCheckerTrait;
+
+ /**
+ * Returns the token types that this sniff is interested in.
+ *
+ * @return array
+ */
+ public function register()
+ {
+ return [
+ T_INSTANCEOF,
+ ];
+ }
+
+ /**
+ * Processes the tokens that this sniff is interested in.
+ *
+ * @param PHP_CodeSniffer_File $phpcsFile The file where the token was found.
+ * @param int $stackPtr The position in the stack where
+ * the token was found.
+ *
+ * @return void
+ */
+ public function process(PHP_CodeSniffer_File $phpcsFile, $stackPtr)
+ {
+ $tokens = $phpcsFile->getTokens();
+ $classnamePosition = $phpcsFile->findNext(T_STRING, $stackPtr);
+ if ($classnamePosition === false) {
+ return;
+ }
+ $classname = $tokens[$classnamePosition]['content'];
+
+ $this->addFixableError($phpcsFile, $classnamePosition, $classname);
+ }
+}
diff --git a/src/Standards/Typo3Update/ruleset.xml b/src/Standards/Typo3Update/ruleset.xml
index b44e6e2..b067e1d 100644
--- a/src/Standards/Typo3Update/ruleset.xml
+++ b/src/Standards/Typo3Update/ruleset.xml
@@ -1,4 +1,10 @@
Provides sniffs and fixes for TYPO3 Updates.
+
+
+
+
+
+