Skip to content

Instantly share code, notes, and snippets.

@garvinhicking
Created June 3, 2026 14:08
Show Gist options
  • Select an option

  • Save garvinhicking/cffc6588f3d4c542ed1ef1dbd94d365c to your computer and use it in GitHub Desktop.

Select an option

Save garvinhicking/cffc6588f3d4c542ed1ef1dbd94d365c to your computer and use it in GitHub Desktop.
breakingtodo
<?php
// Save as: typo3/sysext/install/Configuration/ExtensionScanner/Php/breakingtodo.php
// Execute: php typo3/sysext/install/Configuration/ExtensionScanner/Php/breakingtodo.php
$dir = __DIR__;
$self = basename(__FILE__);
$totalKeys = 0;
$missing = []; // ['filename' => ['arrayKey', ...]]
foreach (glob($dir . '/*.php') as $file) {
if (basename($file) === $self) {
continue;
}
$data = require $file;
if (!is_array($data)) {
continue;
}
$filename = basename($file);
$totalKeys += count($data);
foreach ($data as $key => $config) {
if (!isset($config['restFiles']) || !is_array($config['restFiles'])) {
continue;
}
$hasDeprecation = false;
$hasBreaking = false;
foreach ($config['restFiles'] as $restFile) {
if (str_starts_with($restFile, 'Deprecation-')) {
$hasDeprecation = true;
}
if (str_starts_with($restFile, 'Breaking-')) {
$hasBreaking = true;
}
}
if ($hasDeprecation && !$hasBreaking) {
$missing[$filename][] = $key;
}
}
}
echo "Total array keys evaluated: {$totalKeys}\n\n";
if (empty($missing)) {
echo "No entries found with a Deprecation- file but missing a Breaking- entry.\n";
} else {
echo "Entries with Deprecation- but missing Breaking-:\n";
foreach ($missing as $filename => $keys) {
echo "\n {$filename}:\n";
foreach ($keys as $key) {
echo " - {$key}\n";
}
}
}
Total array keys evaluated: 2626
Entries with Deprecation- but missing Breaking-:
ArrayDimensionMatcher.php:
- $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_adminpanel.php']['extendAdminPanel']
- $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['urlProcessing']['urlHandlers']
- $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['extbase']['commandControllers']
- $GLOBALS['TYPO3_CONF_VARS']['FE']['addRootLineFields']
- $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['scheduler']['tasks']['TYPO3\CMS\Scheduler\Task\TableGarbageCollectionTask']['options']['tables']
- $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['scheduler']['tasks']['TYPO3\CMS\Scheduler\Task\IpAnonymizationTask']['options']['tables']
- $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['scheduler']['tasks']
- $GLOBALS['TYPO3_CONF_VARS']['SYS']['fluid']['namespaces']
ArrayGlobalMatcher.php:
- $GLOBALS['TSFE']
ClassNameMatcher.php:
- TYPO3\CMS\Install\Updates\AbstractUpdate
- TYPO3\CMS\Frontend\Page\PageRepository
- TYPO3\CMS\Frontend\Page\PageRepositoryGetPageHookInterface
- TYPO3\CMS\Frontend\Page\PageRepositoryGetPageOverlayHookInterface
- TYPO3\CMS\Frontend\Page\PageRepositoryGetRecordOverlayHookInterface
- TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController
- TYPO3\CMS\Install\Attribute\UpgradeWizard
- TYPO3\CMS\Install\Updates\ChattyInterface
- TYPO3\CMS\Install\Updates\ConfirmableInterface
- TYPO3\CMS\Install\Updates\Confirmation
- TYPO3\CMS\Install\Updates\PrerequisiteInterface
- TYPO3\CMS\Install\Updates\RepeatableInterface
- TYPO3\CMS\Install\Updates\UpgradeWizardInterface
- TYPO3\CMS\Install\Updates\AbstractListTypeToCTypeUpdate
- TYPO3\CMS\Install\Updates\DatabaseUpdatedPrerequisite
- TYPO3\CMS\Install\Updates\ReferenceIndexUpdatedPrerequisite
- TYPO3\CMS\Install\Updates\PrerequisiteCollection
- TYPO3Fluid\Fluid\Core\ViewHelper\LenientArgumentProcessor
- TYPO3\CMS\Install\Command\LanguagePackCommand
- TYPO3\CMS\Install\Service\Event\ModifyLanguagePacksEvent
- TYPO3\CMS\Install\Service\Event\ModifyLanguagePackRemoteBaseUrlEvent
InterfaceMethodChangedMatcher.php:
- getHashedPassword
MethodArgumentDroppedMatcher.php:
- TYPO3\CMS\Core\Utility\GeneralUtility->mkdir_deep
- TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->getATagParams
MethodArgumentDroppedStaticMatcher.php:
- TYPO3\CMS\Core\Utility\GeneralUtility::explodeUrl2Array
MethodArgumentRequiredStaticMatcher.php:
- TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin
MethodCallArgumentValueMatcher.php:
- TYPO3\CMS\Core\Utility\ExtensionManagementUtility->addPlugin
- TYPO3\CMS\Extbase\Utility\ExtensionUtility->configurePlugin
MethodCallMatcher.php:
- TYPO3\CMS\Rsaauth\RsaEncryptionEncoder->getRsaPublicKey
- TYPO3\CMS\Setup\Controller\SetupModuleController->languageUpdate
- TYPO3\CMS\Setup\Controller\SetupModuleController->simulateUser
- TYPO3\CMS\Info\Controller\TranslationStatusController->getSystemLanguages
- TYPO3\CMS\Extensionmanager\Command\ExtensionCommandController->installCommand
- TYPO3\CMS\Extensionmanager\Command\ExtensionCommandController->uninstallCommand
- TYPO3\CMS\Extensionmanager\Command\ExtensionCommandController->dumpClassLoadingInformationCommand
- TYPO3\CMS\Setup\Controller\SetupModuleController->storeIncomingData
- TYPO3\CMS\Taskcenter\Controller\TaskModuleController->urlInIframe
- TYPO3\CMS\Extbase\Mvc\Cli\Command->isFlushingCaches
- TYPO3\CMS\Install\Updates\AbstractUpdate->executeUpdate
- TYPO3\CMS\Install\Updates\AbstractUpdate->updateNecessary
- TYPO3\CMS\Install\Updates\AbstractUpdate->getPrerequisites
- TYPO3\CMS\Install\Updates\AbstractUpdate->setOutput
- TYPO3\CMS\Install\Updates\AbstractUpdate->shouldRenderWizard
- TYPO3\CMS\Install\Updates\AbstractUpdate->checkIfTableExists
- TYPO3\CMS\Install\Updates\AbstractUpdate->installExtensions
- TYPO3\CMS\Install\Updates\AbstractUpdate->markWizardAsDone
- TYPO3\CMS\Install\Updates\AbstractUpdate->isWizardDone
- TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder->setUseCacheHash
- TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder->getUseCacheHash
- TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->reqCHash
- TYPO3\CMS\Extbase\Mvc\Controller\ActionController->forward
- TYPO3\CMS\Core\DataHandling\PageDoktypeRegistry->addAllowedRecordTypes
- TYPO3\CMS\Core\DataHandling\PageDoktypeRegistry->doesDoktypeOnlyAllowSpecifiedRecordTypes
MethodCallStaticMatcher.php:
- TYPO3\CMS\Frontend\Page\PageGenerator::generatePageTitle
- TYPO3\CMS\Frontend\Page\PageGenerator::isAllowedLinkVarValue
- TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController::renderList
- TYPO3\CMS\Frontend\Page\PageGenerator::renderContent
- TYPO3\CMS\Frontend\Page\PageGenerator::renderContentWithHeader
- TYPO3\CMS\Frontend\Page\PageGenerator::inline2TempFile
- TYPO3\CMS\Core\Localization\Locales::initialize
- TYPO3\CMS\Core\Utility\GeneralUtility::resolveBackPath
PropertyProtectedMatcher.php:
- TYPO3\CMS\Backend\Controller\EditDocumentController->elementsData
- TYPO3\CMS\Setup\Controller\SetupModuleController->OLD_BE_USER
- TYPO3\CMS\Setup\Controller\SetupModuleController->MOD_MENU
- TYPO3\CMS\Setup\Controller\SetupModuleController->MOD_SETTINGS
- TYPO3\CMS\Setup\Controller\SetupModuleController->overrideConf
- TYPO3\CMS\Setup\Controller\SetupModuleController->languageUpdate
PropertyPublicMatcher.php:
- TYPO3\CMS\Frontend\Plugin\AbstractPlugin->pi_USER_INT_obj
- TYPO3\CMS\Frontend\Plugin\AbstractPlugin->pi_checkCHash
- TYPO3\CMS\Core\Authentication\BackendUserAuthentication->errorMessage
- TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->parentRecord
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment