FEATURE: Implement removed hook sniff.

* Update docs, add sniff and test.
* Add first configuration.

Relates: #45
This commit is contained in:
Daniel Siepmann 2017-05-02 15:43:29 +02:00
parent 2a6bf4f45b
commit 4d7aeea5ae
Signed by: Daniel Siepmann
GPG key ID: 33D6629915560EF4
10 changed files with 258 additions and 3 deletions

View file

@ -166,6 +166,29 @@ Using ``runtime-set``:
--runtime-set removedSignalConfigFiles "/Some/Absolute/Path/*.yaml" --runtime-set removedSignalConfigFiles "/Some/Absolute/Path/*.yaml"
.. _configuration-removedHookConfigFiles:
removedHookConfigFiles
^^^^^^^^^^^^^^^^^^^^^^^^^^
Configure where to look for configuration files defining the removed hooks. Default
is ``Configuration/Removed/Hooks/*.yaml`` inside the standard itself. We already try to deliver
as much as possible.
Globing is used, so placeholders like ``*`` are possible, see
https://secure.php.net/manual/en/function.glob.php
Using :file:`ruleset.xml`:
.. code:: xml
<config name="removedHookConfigFiles" value="/Some/Absolute/Path/*.yaml"/>
Using ``runtime-set``:
.. code:: bash
--runtime-set removedHookConfigFiles "/Some/Absolute/Path/*.yaml"
.. _configuration-removedConstantConfigFiles: .. _configuration-removedConstantConfigFiles:
removedConstantConfigFiles removedConstantConfigFiles

View file

@ -106,6 +106,9 @@ functions. For configuration options see :ref:`configuration-removedConstantConf
Check for usage of *removed signals*. The signals are configured in same way as removed Check for usage of *removed signals*. The signals are configured in same way as removed
functions. For configuration options see :ref:`configuration-removedSignalConfigFiles`. functions. For configuration options see :ref:`configuration-removedSignalConfigFiles`.
Check for usage of *removed hooks*. The hooks are configured in same way as removed
functions. For configuration options see :ref:`configuration-removedHookConfigFiles`.
Check for usage of *removed TypoScript*. The TypoScript objects are configured in same way as Check for usage of *removed TypoScript*. The TypoScript objects are configured in same way as
removed functions. For configuration options see :ref:`configuration-removedTypoScriptConfigFiles`. removed functions. For configuration options see :ref:`configuration-removedTypoScriptConfigFiles`.
This will check whether you are using already removed TypoScript parts, supported are: This will check whether you are using already removed TypoScript parts, supported are:

View file

@ -0,0 +1,8 @@
# Breaking changes in 7.3: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.3/Index.html#breaking-changes
'7.3':
typo3/index.php->loginScriptHook:
replacement: 'Use the new backend login form API'
docsUrl: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.3/Breaking-66669-BackendLoginControllerRefactored.html
typo3/index.php->loginFormHook:
replacement: 'Use the new backend login form API'
docsUrl: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.3/Breaking-66669-BackendLoginControllerRefactored.html

View file

@ -82,6 +82,19 @@ class Options
); );
} }
/**
* Returns an array of absolute file names containing removed function configurations.
*
* @return array<string>
*/
public static function getRemovedHookConfigFiles()
{
return static::getOptionFileNames(
'removedHookConfigFiles',
__DIR__ . '/Configuration/Removed/Hooks/*.yaml'
);
}
/** /**
* Returns an array of absolute file names containing removed constant configurations. * Returns an array of absolute file names containing removed constant configurations.
* *

View file

@ -84,8 +84,17 @@ trait ExtendedPhpCsSupportTrait
$phpcsFile->findNext(T_CLOSE_PARENTHESIS, $stackPtr) - $start $phpcsFile->findNext(T_CLOSE_PARENTHESIS, $stackPtr) - $start
)); ));
return array_map(function ($parameter) { return array_map([$this, 'getStringContent'], $parameters);
return trim($parameter, " \t\n\r\0\x0B'\""); }
}, $parameters);
/**
* Remove special chars like quotes from string.
*
* @param string
* @return string
*/
public function getStringContent($string)
{
return trim($string, " \t\n\r\0\x0B'\"");
} }
} }

View file

@ -0,0 +1,68 @@
<?php
/*
* Copyright (C) 2017 Daniel Siepmann <coding@daniel-siepmann.de>
*
* 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.
*/
use PHP_CodeSniffer_File as PhpCsFile;
use PHP_CodeSniffer_Tokens as PhpCsTokens;
use Typo3Update\Options;
use Typo3Update\Sniffs\ExtendedPhpCsSupportTrait;
use Typo3Update\Sniffs\Removed\AbstractGenericPhpUsage;
class Typo3Update_Sniffs_Removed_GenericHookSniff extends AbstractGenericPhpUsage
{
use ExtendedPhpCsSupportTrait;
public function register()
{
return PhpCsTokens::$stringTokens;
}
protected function getRemovedConfigFiles()
{
return Options::getRemovedHookConfigFiles();
}
protected function findRemoved(PhpCsFile $phpcsFile, $stackPtr)
{
$tokens = $phpcsFile->getTokens();
$firstPart = $this->getStringContent($tokens[$stackPtr]['content']);
$secondPart = $this->getStringContent($tokens[$phpcsFile->findNext(PhpCsTokens::$stringTokens, $stackPtr + 1)]['content']);
$lookup = $firstPart . '->' . $secondPart;
if ($this->configured->isRemoved($lookup) === false) {
return [];
}
return [$this->configured->getRemoved($lookup)];
}
protected function getIdentifier(array $config)
{
$search = ['/', '.'];
$replace = ['-'];
return str_replace($search, $replace, $config['fqcn']) . $config['name'];
}
protected function getOldUsage(array $config)
{
return '["' . $config['fqcn'] . '"]["' . $config['name'] . '"] = ...';
}
}

View file

@ -0,0 +1,42 @@
{
"files": {
"InputFileForIssues.php": {
"errors": 0,
"messages": [
{
"column": 43,
"fixable": false,
"line": 22,
"message": "Calls to removed code are not allowed; found [\"typo3/index.php\"][\"loginScriptHook\"] = .... Removed in 7.3. Use the new backend login form API. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.3/Breaking-66669-BackendLoginControllerRefactored.html",
"severity": 5,
"source": "Typo3Update.Removed.GenericHook.typo3-indexphploginScriptHook",
"type": "WARNING"
},
{
"column": 43,
"fixable": false,
"line": 23,
"message": "Calls to removed code are not allowed; found [\"typo3/index.php\"][\"loginFormHook\"] = .... Removed in 7.3. Use the new backend login form API. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.3/Breaking-66669-BackendLoginControllerRefactored.html",
"severity": 5,
"source": "Typo3Update.Removed.GenericHook.typo3-indexphploginFormHook",
"type": "WARNING"
},
{
"column": 9,
"fixable": false,
"line": 28,
"message": "Calls to removed code are not allowed; found [\"typo3/index.php\"][\"loginFormHook\"] = .... Removed in 7.3. Use the new backend login form API. See: https://docs.typo3.org/typo3cms/extensions/core/7.6/Changelog/7.3/Breaking-66669-BackendLoginControllerRefactored.html",
"severity": 5,
"source": "Typo3Update.Removed.GenericHook.typo3-indexphploginFormHook",
"type": "WARNING"
}
],
"warnings": 3
}
},
"totals": {
"errors": 0,
"fixable": 0,
"warnings": 3
}
}

View file

@ -0,0 +1,33 @@
<?php
/*
* Copyright (C) 2017 Daniel Siepmann <coding@daniel-siepmann.de>
*
* 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.
*/
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/index.php']['loginScriptHook'] = 'Configuration';
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']["typo3/index.php"]["loginFormHook"] = 'Configuration';
array_merge(
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS'],
[
'typo3/index.php' => [
'loginFormHook' => 'Configuration',
],
]
);

View file

@ -0,0 +1,28 @@
<?php
namespace Typo3Update\Tests\Sniffs\Removed;
/*
* Copyright (C) 2017 Daniel Siepmann <coding@daniel-siepmann.de>
*
* 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.
*/
use Typo3Update\Tests\SniffsTest;
class GenericHookSniffTest extends SniffsTest
{
}

View file

@ -0,0 +1,28 @@
<?php
namespace Typo3Update\Tests\Sniffs\Removed;
/*
* Copyright (C) 2017 Daniel Siepmann <coding@daniel-siepmann.de>
*
* 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.
*/
use Typo3Update\Tests\SniffsTest;
class GenericSignalSniffTest extends SniffsTest
{
}