diff --git a/easy-coding-standard.neon b/easy-coding-standard.neon index eea2d6643c1..34fd198c531 100644 --- a/easy-coding-standard.neon +++ b/easy-coding-standard.neon @@ -1,5 +1,6 @@ includes: - vendor/symplify/easy-coding-standard/config/psr2-checkers.neon + - vendor/symplify/easy-coding-standard/config/php70-checkers.neon - vendor/symplify/easy-coding-standard/config/php71-checkers.neon checkers: diff --git a/src/Application/FileProcessor.php b/src/Application/FileProcessor.php index 45e31f70d56..cf614cc829d 100644 --- a/src/Application/FileProcessor.php +++ b/src/Application/FileProcessor.php @@ -5,7 +5,7 @@ namespace Rector\Application; use PhpParser\Lexer; use PhpParser\NodeTraverser; use PhpParser\Parser; -use Rector\Printer\CodeStyledPrinter; +use Rector\Printer\FormatPerservingPrinter; use SplFileInfo; final class FileProcessor @@ -16,7 +16,7 @@ final class FileProcessor private $parser; /** - * @var CodeStyledPrinter + * @var FormatPerservingPrinter */ private $codeStyledPrinter; @@ -30,7 +30,7 @@ final class FileProcessor */ private $lexer; - public function __construct(Parser $parser, CodeStyledPrinter $codeStyledPrinter, Lexer $lexer, NodeTraverser $nodeTraverser) + public function __construct(Parser $parser, FormatPerservingPrinter $codeStyledPrinter, Lexer $lexer, NodeTraverser $nodeTraverser) { $this->parser = $parser; $this->codeStyledPrinter = $codeStyledPrinter; diff --git a/src/NodeVisitor/UpgradeDeprecation/ReplaceDeprecatedConstantNodeVisitor.php b/src/NodeVisitor/UpgradeDeprecation/ReplaceDeprecatedConstantNodeVisitor.php new file mode 100644 index 00000000000..b745948c6aa --- /dev/null +++ b/src/NodeVisitor/UpgradeDeprecation/ReplaceDeprecatedConstantNodeVisitor.php @@ -0,0 +1,73 @@ + $node stays as-is + * * NodeTraverser::DONT_TRAVERSE_CHILDREN + * => Children of $node are not traversed. $node stays as-is + * * NodeTraverser::STOP_TRAVERSAL + * => Traversal is aborted. $node stays as-is + * * otherwise + * => $node is set to the return value. + * + * @return null|int|Node + */ + public function enterNode(Node $node): ?int + { + if ($this->isCandidate($node)) { + $this->refactor($node); + return NodeTraverser::DONT_TRAVERSE_CHILDREN; + } + + return null; + } + + private function isCandidate(Node $node): bool + { + if ($node instanceof ClassConstFetch) { + if ((string) $node->class !== $this->getClassName()) { + return false; + } + + if ((string) $node->name !== $this->getOldConstantName()) { + return false; + } + + return true; + } + + return false; + } + + private function refactor(ClassConstFetch $classConstFetchNode): void + { + $classConstFetchNode->name->name = $this->getNewConstantName(); + } +} diff --git a/src/Printer/CodeStyledPrinter.php b/src/Printer/FormatPerservingPrinter.php similarity index 95% rename from src/Printer/CodeStyledPrinter.php rename to src/Printer/FormatPerservingPrinter.php index 08ea5addb20..ca6a78676e3 100644 --- a/src/Printer/CodeStyledPrinter.php +++ b/src/Printer/FormatPerservingPrinter.php @@ -5,7 +5,7 @@ namespace Rector\Printer; use PhpParser\PrettyPrinter\Standard; use SplFileInfo; -final class CodeStyledPrinter +final class FormatPerservingPrinter { /** * @var Standard diff --git a/src/Testing/Application/FileReconstructor.php b/src/Testing/Application/FileReconstructor.php index 7bd390afd37..5ab8f87ed92 100644 --- a/src/Testing/Application/FileReconstructor.php +++ b/src/Testing/Application/FileReconstructor.php @@ -6,7 +6,7 @@ use PhpParser\Lexer; use PhpParser\NodeTraverser; use PhpParser\Parser; use Rector\NodeTraverser\StateHolder; -use Rector\Printer\CodeStyledPrinter; +use Rector\Printer\FormatPerservingPrinter; use SplFileInfo; final class FileReconstructor @@ -17,7 +17,7 @@ final class FileReconstructor private $parser; /** - * @var CodeStyledPrinter + * @var FormatPerservingPrinter */ private $codeStyledPrinter; @@ -38,7 +38,7 @@ final class FileReconstructor public function __construct( Parser $parser, - CodeStyledPrinter $codeStyledPrinter, + FormatPerservingPrinter $codeStyledPrinter, Lexer $lexer, NodeTraverser $nodeTraverser, StateHolder $stateHolder diff --git a/tests/NodeVisitor/UpgradeDeprecation/ReplaceDeprecatedConstantNodeVisitor/Test.php b/tests/NodeVisitor/UpgradeDeprecation/ReplaceDeprecatedConstantNodeVisitor/Test.php new file mode 100644 index 00000000000..9704e2f688a --- /dev/null +++ b/tests/NodeVisitor/UpgradeDeprecation/ReplaceDeprecatedConstantNodeVisitor/Test.php @@ -0,0 +1,16 @@ +doTestFileMatchesExpectedContent( + __DIR__ . '/wrong/wrong.php.inc', + __DIR__ . '/correct/correct.php.inc' + ); + } +} diff --git a/tests/NodeVisitor/UpgradeDeprecation/ReplaceDeprecatedConstantNodeVisitor/correct/correct.php.inc b/tests/NodeVisitor/UpgradeDeprecation/ReplaceDeprecatedConstantNodeVisitor/correct/correct.php.inc new file mode 100644 index 00000000000..5cf52e94219 --- /dev/null +++ b/tests/NodeVisitor/UpgradeDeprecation/ReplaceDeprecatedConstantNodeVisitor/correct/correct.php.inc @@ -0,0 +1,9 @@ +