WIP|FEATURE: Provide configuration files for deprecated functions
* To provide a way to adjust deprecations without touching standard. * Provide an option defining the path to lookup the configuration files. * Parse yaml files containing deprecations. Relates: #33
This commit is contained in:
parent
0ee10ea61f
commit
cd434ac639
4 changed files with 162 additions and 12 deletions
|
@ -8,7 +8,8 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"squizlabs/php_codesniffer": "2.8.*"
|
"squizlabs/php_codesniffer": "2.8.*",
|
||||||
|
"symfony/yaml": "3.2.*"
|
||||||
},
|
},
|
||||||
"license": "GPL-2.0+",
|
"license": "GPL-2.0+",
|
||||||
"authors": [
|
"authors": [
|
||||||
|
|
|
@ -0,0 +1,114 @@
|
||||||
|
# Deprecated in 7.0: https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Index.html#breaking-changes
|
||||||
|
loadTCA:
|
||||||
|
oldFunctionCall: '\TYPO3\CMS\Core\Utility\GeneralUtility::loadTCA()'
|
||||||
|
newFunctionCall: null
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-61785-LoadTcaFunctionRemoved.html'
|
||||||
|
getCompressedTCarray:
|
||||||
|
oldFunctionCall: '\TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController::getCompressedTCarray()'
|
||||||
|
newFunctionCall: 'Full TCA is always loaded during bootstrap in FE, the method is obsolete. If an eid script calls this method to load TCA, use \TYPO3\CMS\Frontend\Utility\EidUtility::initTCA() instead'
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-61785-FrontendTcaFunctionsRemoved.html'
|
||||||
|
includeTCA:
|
||||||
|
oldFunctionCall: '\TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController::includeTCA()'
|
||||||
|
newFunctionCall: 'Full TCA is always loaded during bootstrap in FE, the method is obsolete. If an eid script calls this method to load TCA, use \TYPO3\CMS\Frontend\Utility\EidUtility::initTCA() instead'
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-61785-FrontendTcaFunctionsRemoved.html'
|
||||||
|
mail:
|
||||||
|
oldFunctionCall: 'MailUtility::mail()'
|
||||||
|
newFunctionCall: 'Use the \TYPO3\CMS\Core\Mail\Mailer API for sending email'
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-61783-RemoveDeprecatedMailFunctionality.html'
|
||||||
|
plainMailEncoded:
|
||||||
|
oldFunctionCall: 'GeneralUtility::plainMailEncoded()'
|
||||||
|
newFunctionCall: 'Use the \TYPO3\CMS\Core\Mail\Mailer API for sending email'
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-61783-RemoveDeprecatedMailFunctionality.html'
|
||||||
|
connectDB:
|
||||||
|
oldFunctionCall: '\TYPO3\CMS\Frontend\Utility\EidUtility::connectDB()'
|
||||||
|
newFunctionCall: null
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-61863-ConnectDbFunctionRemoved.html'
|
||||||
|
int_from_ver:
|
||||||
|
oldFunctionCall: '\TYPO3\CMS\Core\Utility\GeneralUtility::int_from_ver'
|
||||||
|
newFunctionCall: 'Replace the usage of the removed function with \TYPO3\CMS\Core\Utility\VersionNumberUtility::convertVersionNumberToInteger()'
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-61860-RemoveIntFromVerFunction.html'
|
||||||
|
getUniqueFields:
|
||||||
|
oldFunctionCall: '\TYPO3\CMS\Core\DataHandling\DataHandler::getUniqueFields()'
|
||||||
|
newFunctionCall: 'Replace all calls to \TYPO3\CMS\Core\DataHandling\DataHandler::getUniqueFields() with calls to \TYPO3\CMS\Version\Hook\DataHandlerHook::getUniqueFields()'
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-61822-GetUniqueFieldsFunctionRemoved.html'
|
||||||
|
isSafeModeEnabled:
|
||||||
|
oldFunctionCall: '\TYPO3\CMS\Core\Utility\PhpOptionsUtility::isSafeModeEnabled()'
|
||||||
|
newFunctionCall: null
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-61820-PhpOptionsUtilityDeprecatedFunctionsRemoved.html'
|
||||||
|
isMagicQuotesGpcEnabled:
|
||||||
|
oldFunctionCall: '\TYPO3\CMS\Core\Utility\PhpOptionsUtility::isMagicQuotesGpcEnabled()'
|
||||||
|
newFunctionCall: null
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-61820-PhpOptionsUtilityDeprecatedFunctionsRemoved.html'
|
||||||
|
isLocalconfWritable:
|
||||||
|
oldFunctionCall: '\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLocalconfWritable'
|
||||||
|
newFunctionCall: null
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-61802-IsLocalconfWritableFunctionRemoved.html'
|
||||||
|
create:
|
||||||
|
oldFunctionCall: 'ObjectManager::create()'
|
||||||
|
newFunctionCall: 'Use ObjectManager::get() instead'
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-62673-ExtbaseDeprecatedCodeRemoved.html'
|
||||||
|
# TODO: Find a way to make same method name in different classes work.
|
||||||
|
# create:
|
||||||
|
# oldFunctionCall: 'ObjectManagerInterface::create()'
|
||||||
|
# newFunctionCall: null
|
||||||
|
# docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-62673-ExtbaseDeprecatedCodeRemoved.html'
|
||||||
|
replaceObject:
|
||||||
|
oldFunctionCall: 'PersistenceGenericBackend::replaceObject()'
|
||||||
|
newFunctionCall: 'Removed without replacement'
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-62673-ExtbaseDeprecatedCodeRemoved.html'
|
||||||
|
setReturnRawQueryResult:
|
||||||
|
oldFunctionCall: 'QuerySettingsInterface::setReturnRawQueryResult()'
|
||||||
|
newFunctionCall: 'Removed without replacement'
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-62673-ExtbaseDeprecatedCodeRemoved.html'
|
||||||
|
getReturnRawQueryResult:
|
||||||
|
oldFunctionCall: 'QuerySettingsInterface::getReturnRawQueryResult()'
|
||||||
|
newFunctionCall: 'Use the parameter on $query->execute() directly'
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-62673-ExtbaseDeprecatedCodeRemoved.html'
|
||||||
|
setSysLanguageUid:
|
||||||
|
oldFunctionCall: 'Typo3QuerySettings::setSysLanguageUid()'
|
||||||
|
newFunctionCall: 'Use setLanguageUid() instead'
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-62673-ExtbaseDeprecatedCodeRemoved.html'
|
||||||
|
getSysLanguageUid:
|
||||||
|
oldFunctionCall: 'Typo3QuerySettings::getSysLanguageUid()'
|
||||||
|
newFunctionCall: 'Use getLanguageUid() instead'
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-62673-ExtbaseDeprecatedCodeRemoved.html'
|
||||||
|
JScharCode:
|
||||||
|
oldFunctionCall: 'LanguageService::JScharCode()'
|
||||||
|
newFunctionCall: 'Use GeneralUtility::quoteJSvalue instead'
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-62670-DeprecatedCodeRemovalInMultipleSysexts.html'
|
||||||
|
joinTSarrays:
|
||||||
|
oldFunctionCall: 'ContentObjectRenderer::joinTSarrays()'
|
||||||
|
newFunctionCall: null
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-62670-DeprecatedCodeRemovalInMultipleSysexts.html'
|
||||||
|
tidyHTML:
|
||||||
|
oldFunctionCall: 'TypoScriptFrontendController::tidyHTML()'
|
||||||
|
newFunctionCall: 'You may use the tidy extension from TER'
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-62670-DeprecatedCodeRemovalInMultipleSysexts.html'
|
||||||
|
isWebFolder:
|
||||||
|
oldFunctionCall: 'ElementBrowser::isWebFolder()'
|
||||||
|
newFunctionCall: null
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-62670-DeprecatedCodeRemovalInMultipleSysexts.html'
|
||||||
|
checkFolder:
|
||||||
|
oldFunctionCall: 'ElementBrowser::checkFolder()'
|
||||||
|
newFunctionCall: null
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-62670-DeprecatedCodeRemovalInMultipleSysexts.html'
|
||||||
|
getTreeObject:
|
||||||
|
oldFunctionCall: 'AbstractDatabaseRecordList::getTreeObject()'
|
||||||
|
newFunctionCall: null
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-62670-DeprecatedCodeRemovalInMultipleSysexts.html'
|
||||||
|
dirData:
|
||||||
|
oldFunctionCall: 'FileList::dirData()'
|
||||||
|
newFunctionCall: null
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-62670-DeprecatedCodeRemovalInMultipleSysexts.html'
|
||||||
|
stdWrapValue:
|
||||||
|
oldFunctionCall: 'FilesContentObject::stdWrapValue()'
|
||||||
|
newFunctionCall: 'Use ContentObjectRenderer::stdWrapValue instead'
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-62670-DeprecatedCodeRemovalInMultipleSysexts.html'
|
||||||
|
userTempFolder:
|
||||||
|
oldFunctionCall: 'ImportExportController::userTempFolder()'
|
||||||
|
newFunctionCall: 'Use getDefaultImportExportFolder instead'
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-62670-DeprecatedCodeRemovalInMultipleSysexts.html'
|
||||||
|
userSaveFolder:
|
||||||
|
oldFunctionCall: 'ImportExportController::userSaveFolder()'
|
||||||
|
newFunctionCall: 'Use getDefaultImportExportFolder instead'
|
||||||
|
docsUrl: 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-62670-DeprecatedCodeRemovalInMultipleSysexts.html'
|
|
@ -22,6 +22,7 @@
|
||||||
use PHP_CodeSniffer_File as PhpCsFile;
|
use PHP_CodeSniffer_File as PhpCsFile;
|
||||||
use PHP_CodeSniffer_Sniff as PhpCsSniff;
|
use PHP_CodeSniffer_Sniff as PhpCsSniff;
|
||||||
use PHP_CodeSniffer_Tokens as Tokens;
|
use PHP_CodeSniffer_Tokens as Tokens;
|
||||||
|
use Symfony\Component\Yaml\Yaml;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sniff that handles all calls to deprecated functions.
|
* Sniff that handles all calls to deprecated functions.
|
||||||
|
@ -31,21 +32,31 @@ use PHP_CodeSniffer_Tokens as Tokens;
|
||||||
class Typo3Update_Sniffs_Deprecated_GenericFunctionCallSniff implements PhpCsSniff
|
class Typo3Update_Sniffs_Deprecated_GenericFunctionCallSniff implements PhpCsSniff
|
||||||
{
|
{
|
||||||
use \Typo3Update\Sniffs\ExtendedPhpCsSupportTrait;
|
use \Typo3Update\Sniffs\ExtendedPhpCsSupportTrait;
|
||||||
|
use \Typo3Update\Sniffs\OptionsAccessTrait;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configuration to define deprecated functions.
|
* Configuration to define deprecated functions.
|
||||||
*
|
*
|
||||||
* Keys have to match the function name.
|
* Keys have to match the function name.
|
||||||
*
|
*
|
||||||
|
* TODO: Multiple files allowed, using glob ... to allow splitting per ext (extbase, fluid, ...) and TYPO3 Version 7.1, 7.0, ...
|
||||||
|
* TODO: Build necessary structure from that files, to make it more independent ... ?!
|
||||||
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $deprecatedFunctions = [
|
protected static $deprecatedFunctions = [];
|
||||||
'loadTCA' => [
|
|
||||||
'oldFunctionCall' => '\TYPO3\CMS\Core\Utility\GeneralUtility::loadTCA()',
|
public function __construct()
|
||||||
'newFunctionCall' => null,
|
{
|
||||||
'docsUrl' => 'https://docs.typo3.org/typo3cms/extensions/core/Changelog/7.0/Breaking-61785-LoadTcaFunctionRemoved.html',
|
if (static::$deprecatedFunctions === []) {
|
||||||
],
|
foreach ($this->getDeprecatedFunctionConfigFiles() as $file) {
|
||||||
];
|
static::$deprecatedFunctions = array_merge(
|
||||||
|
static::$deprecatedFunctions,
|
||||||
|
Yaml::parse(file_get_contents((string) $file))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the token types that this sniff is interested in.
|
* Returns the token types that this sniff is interested in.
|
||||||
|
@ -83,6 +94,13 @@ class Typo3Update_Sniffs_Deprecated_GenericFunctionCallSniff implements PhpCsSni
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Check if function is static and whether last class name part matches.
|
||||||
|
// TODO: Add new property to array "last class name part" and use for check if exists.
|
||||||
|
// TODO: How to handle methods? They are not static, are behind a variable or something else ...
|
||||||
|
|
||||||
|
// E.g.: getUniqueFields
|
||||||
|
// E.g.: mail
|
||||||
|
|
||||||
$this->addWarning($phpcsFile, $stackPtr);
|
$this->addWarning($phpcsFile, $stackPtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,7 +138,7 @@ class Typo3Update_Sniffs_Deprecated_GenericFunctionCallSniff implements PhpCsSni
|
||||||
*/
|
*/
|
||||||
protected function getFunctionNames()
|
protected function getFunctionNames()
|
||||||
{
|
{
|
||||||
return array_keys($this->deprecatedFunctions);
|
return array_keys(static::$deprecatedFunctions);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -134,7 +152,7 @@ class Typo3Update_Sniffs_Deprecated_GenericFunctionCallSniff implements PhpCsSni
|
||||||
*/
|
*/
|
||||||
protected function getOldFunctionCall($functionName)
|
protected function getOldFunctionCall($functionName)
|
||||||
{
|
{
|
||||||
return $this->deprecatedFunctions[$functionName]['oldFunctionCall'];
|
return static::$deprecatedFunctions[$functionName]['oldFunctionCall'];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -146,7 +164,7 @@ class Typo3Update_Sniffs_Deprecated_GenericFunctionCallSniff implements PhpCsSni
|
||||||
*/
|
*/
|
||||||
protected function getNewFunctionCall($functionName)
|
protected function getNewFunctionCall($functionName)
|
||||||
{
|
{
|
||||||
$newCall = $this->deprecatedFunctions[$functionName]['newFunctionCall'];
|
$newCall = static::$deprecatedFunctions[$functionName]['newFunctionCall'];
|
||||||
if ($newCall !== null) {
|
if ($newCall !== null) {
|
||||||
return $newCall;
|
return $newCall;
|
||||||
}
|
}
|
||||||
|
@ -160,6 +178,6 @@ class Typo3Update_Sniffs_Deprecated_GenericFunctionCallSniff implements PhpCsSni
|
||||||
*/
|
*/
|
||||||
protected function getDocsUrl($functionName)
|
protected function getDocsUrl($functionName)
|
||||||
{
|
{
|
||||||
return $this->deprecatedFunctions[$functionName]['docsUrl'];
|
return static::$deprecatedFunctions[$functionName]['docsUrl'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,4 +54,21 @@ trait OptionsAccessTrait
|
||||||
}
|
}
|
||||||
return $mappingFile;
|
return $mappingFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an array of absolute file names containing deprecation function configurations.
|
||||||
|
*
|
||||||
|
* @return \Generator
|
||||||
|
*/
|
||||||
|
public function getDeprecatedFunctionConfigFiles()
|
||||||
|
{
|
||||||
|
$configFiles = PhpCs::getConfigData('deprecatedfunctionConfigFiles');
|
||||||
|
if (!$configFiles) {
|
||||||
|
$configFiles = __DIR__ . '/../Configuration/Deprecated/Functions/*.yaml';
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ((new \GlobIterator($configFiles)) as $file) {
|
||||||
|
yield (string) $file;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue