-
-
Notifications
You must be signed in to change notification settings - Fork 62
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[TASK] Add MigrateAddUserTSConfigToUserTsConfigFileRector
Resolves: #3702
- Loading branch information
1 parent
a3b62c0
commit 210b8a8
Showing
26 changed files
with
500 additions
and
76 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
142 changes: 142 additions & 0 deletions
142
rules/TYPO313/v0/MigrateAddUserTSConfigToUserTsConfigFileRector.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,142 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Ssch\TYPO3Rector\TYPO313\v0; | ||
|
||
use PhpParser\Node; | ||
use PhpParser\Node\Expr\BinaryOp\Concat; | ||
use PhpParser\Node\Expr\StaticCall; | ||
use PhpParser\Node\Scalar\String_; | ||
use PhpParser\Node\Stmt\Expression; | ||
use PhpParser\NodeTraverser; | ||
use PHPStan\Type\ObjectType; | ||
use Rector\PhpParser\Node\Value\ValueResolver; | ||
use Rector\Rector\AbstractRector; | ||
use Ssch\TYPO3Rector\ComposerExtensionKeyResolver; | ||
use Ssch\TYPO3Rector\Contract\FilesystemInterface; | ||
use Ssch\TYPO3Rector\Filesystem\FilesFinder; | ||
use Ssch\TYPO3Rector\Helper\ExtensionKeyResolverTrait; | ||
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; | ||
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; | ||
|
||
/** | ||
* @changelog https://docs.typo3.org/c/typo3/cms-core/main/en-us/Changelog/13.0/Deprecation-101807-ExtensionManagementUtilityaddUserTSConfig.html | ||
* @see \Ssch\TYPO3Rector\Tests\Rector\v13\v0\MigrateAddUserTSConfigToUserTsConfigFileRector\MigrateAddUserTSConfigToUserTsConfigFileRectorTest | ||
*/ | ||
final class MigrateAddUserTSConfigToUserTsConfigFileRector extends AbstractRector | ||
{ | ||
use ExtensionKeyResolverTrait; | ||
|
||
/** | ||
* @readonly | ||
*/ | ||
private FilesFinder $filesFinder; | ||
|
||
/** | ||
* @readonly | ||
*/ | ||
private FilesystemInterface $filesystem; | ||
|
||
/** | ||
* @readonly | ||
*/ | ||
private ValueResolver $valueResolver; | ||
|
||
public function __construct( | ||
FilesFinder $filesFinder, | ||
FilesystemInterface $filesystem, | ||
ValueResolver $valueResolver, | ||
ComposerExtensionKeyResolver $composerExtensionKeyResolver | ||
) { | ||
$this->filesFinder = $filesFinder; | ||
$this->filesystem = $filesystem; | ||
$this->valueResolver = $valueResolver; | ||
$this->composerExtensionKeyResolver = $composerExtensionKeyResolver; | ||
} | ||
|
||
public function getRuleDefinition(): RuleDefinition | ||
{ | ||
return new RuleDefinition('Migrate method call ExtensionManagementUtility::addUserTSConfig to user.tsconfig', [new CodeSample( | ||
<<<'CODE_SAMPLE' | ||
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addUserTSConfig( | ||
'@import "EXT:ppw_sitepackage/Configuration/TSconfig/*/*.tsconfig"' | ||
); | ||
CODE_SAMPLE | ||
, | ||
<<<'CODE_SAMPLE' | ||
// Move to file Configuration/user.tsconfig | ||
CODE_SAMPLE | ||
)]); | ||
} | ||
|
||
/** | ||
* @return array<class-string<Node>> | ||
*/ | ||
public function getNodeTypes(): array | ||
{ | ||
return [Expression::class]; | ||
} | ||
|
||
/** | ||
* @param Expression $node | ||
*/ | ||
public function refactor(Node $node) | ||
{ | ||
$staticMethodCall = $node->expr; | ||
|
||
if (! $staticMethodCall instanceof StaticCall) { | ||
return null; | ||
} | ||
|
||
if ($this->shouldSkip($staticMethodCall)) { | ||
return null; | ||
} | ||
|
||
$contentArgument = $staticMethodCall->args[0] ?? null; | ||
|
||
if ($contentArgument === null) { | ||
return null; | ||
} | ||
|
||
$contentArgumentValue = $contentArgument->value; | ||
|
||
if (! $contentArgumentValue instanceof String_ && ! $contentArgumentValue instanceof Concat) { | ||
return null; | ||
} | ||
|
||
$this->resolvePotentialExtensionKey($contentArgumentValue); | ||
|
||
$directoryName = dirname($this->file->getFilePath()); | ||
|
||
$content = $this->valueResolver->getValue($contentArgumentValue); | ||
$newConfigurationFile = $directoryName . '/Configuration/user.tsconfig'; | ||
if ($this->filesystem->fileExists($newConfigurationFile)) { | ||
$this->filesystem->appendToFile($newConfigurationFile, $content . PHP_EOL); | ||
} else { | ||
$this->filesystem->write($newConfigurationFile, <<<CODE | ||
{$content} | ||
CODE | ||
); | ||
} | ||
|
||
return NodeTraverser::REMOVE_NODE; | ||
} | ||
|
||
private function shouldSkip(StaticCall $staticMethodCall): bool | ||
{ | ||
if (! $this->nodeTypeResolver->isMethodStaticCallOrClassMethodObjectType( | ||
$staticMethodCall, | ||
new ObjectType('TYPO3\CMS\Core\Utility\ExtensionManagementUtility') | ||
)) { | ||
return true; | ||
} | ||
|
||
if (! $this->isName($staticMethodCall->name, 'addUserTSConfig')) { | ||
return true; | ||
} | ||
|
||
return ! $this->filesFinder->isExtLocalConf($this->file->getFilePath()); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Ssch\TYPO3Rector\Helper; | ||
|
||
use PhpParser\Node\Expr\BinaryOp\Concat; | ||
use PhpParser\Node\Expr\Variable; | ||
use PhpParser\Node\Scalar\String_; | ||
use Ssch\TYPO3Rector\ComposerExtensionKeyResolver; | ||
|
||
trait ExtensionKeyResolverTrait | ||
{ | ||
/** | ||
* @readonly | ||
*/ | ||
private ComposerExtensionKeyResolver $composerExtensionKeyResolver; | ||
|
||
/** | ||
* @param Concat|String_ $contentArgumentValue | ||
*/ | ||
private function resolvePotentialExtensionKey($contentArgumentValue): void | ||
{ | ||
if ($contentArgumentValue instanceof String_) { | ||
return; | ||
} | ||
|
||
if (! $contentArgumentValue->left instanceof Concat) { | ||
return; | ||
} | ||
|
||
if (! $contentArgumentValue->left->right instanceof Variable) { | ||
return; | ||
} | ||
|
||
if (! $this->isNames($contentArgumentValue->left->right, ['_EXTKEY', 'extensionKey'])) { | ||
return; | ||
} | ||
|
||
$resolvedExtensionKey = $this->composerExtensionKeyResolver->resolveExtensionKey($this->file); | ||
|
||
if ($resolvedExtensionKey === null) { | ||
return; | ||
} | ||
|
||
$contentArgumentValue->left->right = new String_($resolvedExtensionKey); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1 change: 1 addition & 0 deletions
1
...AddPageTSConfigToPageTsConfigFileRector/Assertions/extension1/Configuration/page.tsconfig
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
@import "EXT:extension1/Configuration/TSconfig/*/*.tsconfig" |
1 change: 0 additions & 1 deletion
1
...v13/v0/MigrateAddPageTSConfigToPageTsConfigFileRector/Assertions/extension1/page.tsconfig
This file was deleted.
Oops, something went wrong.
4 changes: 4 additions & 0 deletions
4
...AddPageTSConfigToPageTsConfigFileRector/Assertions/extension2/Configuration/page.tsconfig
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# page.tsconfig file exist | ||
@import "EXT:extension2/Configuration/TSconfig/*/*.tsconfig" | ||
|
||
@import 'EXT:extension2/Configuration/TSconfig/Page/mod.linkvalidator.tsconfig' |
2 changes: 0 additions & 2 deletions
2
...v13/v0/MigrateAddPageTSConfigToPageTsConfigFileRector/Assertions/extension2/page.tsconfig
This file was deleted.
Oops, something went wrong.
5 changes: 5 additions & 0 deletions
5
...AddPageTSConfigToPageTsConfigFileRector/Assertions/extension3/Configuration/page.tsconfig
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
@import "EXT:extension3/Configuration/TSconfig/*/*.tsconfig" | ||
|
||
@import "EXT:extension3/Configuration/TSconfig/*/*.tsconfig" | ||
|
||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:extension3/Configuration/TSconfig/Page.txt"> |
5 changes: 0 additions & 5 deletions
5
...v13/v0/MigrateAddPageTSConfigToPageTsConfigFileRector/Assertions/extension3/page.tsconfig
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.