From 70775f5bfa260e152dc5fde7611de739f5a2fe61 Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Tue, 15 Aug 2017 15:24:56 +0200 Subject: [PATCH] [Nette] prepare type call for Html --- .../Contrib/Nette/HtmlAddMethodRector.php | 36 +++++++++++++++---- .../Nette/HtmlAddMethodRector/Test.php | 8 +++-- .../correct/correct2.php.inc | 4 +++ .../HtmlAddMethodRector/wrong/wrong2.php.inc | 4 +++ 4 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 tests/Rector/Contrib/Nette/HtmlAddMethodRector/correct/correct2.php.inc create mode 100644 tests/Rector/Contrib/Nette/HtmlAddMethodRector/wrong/wrong2.php.inc diff --git a/src/Rector/Contrib/Nette/HtmlAddMethodRector.php b/src/Rector/Contrib/Nette/HtmlAddMethodRector.php index 861242f5cae..b3e69a76852 100644 --- a/src/Rector/Contrib/Nette/HtmlAddMethodRector.php +++ b/src/Rector/Contrib/Nette/HtmlAddMethodRector.php @@ -2,6 +2,7 @@ namespace Rector\Rector\Contrib\Nette; +use Nette\Utils\Html; use PhpParser\Node; use PhpParser\Node\Expr\StaticCall; use PhpParser\Node\Identifier; @@ -21,6 +22,29 @@ final class HtmlAddMethodRector extends AbstractRector } public function isCandidate(Node $node): bool + { + if (! $this->isOnTypeCall($node, Html::class)) { + return false; + } + + if (! $this->isStaticCall($node)) { + return false; + } + + return true; + } + + /** + * @param StaticCall $node + */ + public function refactor(Node $node): ?Node + { + $node->name->name = 'addHtml'; + + return $node; + } + + private function isStaticCall(Node $node): bool { if (! $node instanceof StaticCall) { return false; @@ -41,13 +65,13 @@ final class HtmlAddMethodRector extends AbstractRector return true; } - /** - * @param StaticCall $node - */ - public function refactor(Node $node): ?Node + private function isOnTypeCall(Node $node, string $class): bool { - $node->name->name = 'addHtml'; + dump($class); + die; - return $node; + # check elements type: + # inspire: https://github.com/phpstan/phpstan/blob/355060961eb4a33304c66dfbfc0cd32870a0b9d4/src/Rules/Methods/CallMethodsRule.php#L74 + # local package? } } diff --git a/tests/Rector/Contrib/Nette/HtmlAddMethodRector/Test.php b/tests/Rector/Contrib/Nette/HtmlAddMethodRector/Test.php index ea3e54d6b65..bcb27ee618f 100644 --- a/tests/Rector/Contrib/Nette/HtmlAddMethodRector/Test.php +++ b/tests/Rector/Contrib/Nette/HtmlAddMethodRector/Test.php @@ -9,9 +9,13 @@ final class Test extends AbstractRectorTestCase { public function test(): void { +// $this->doTestFileMatchesExpectedContent( +// __DIR__ . '/wrong/wrong.php.inc', +// __DIR__ . '/correct/correct.php.inc' +// ); $this->doTestFileMatchesExpectedContent( - __DIR__ . '/wrong/wrong.php.inc', - __DIR__ . '/correct/correct.php.inc' + __DIR__ . '/wrong/wrong2.php.inc', + __DIR__ . '/correct/correct2.php.inc' ); } diff --git a/tests/Rector/Contrib/Nette/HtmlAddMethodRector/correct/correct2.php.inc b/tests/Rector/Contrib/Nette/HtmlAddMethodRector/correct/correct2.php.inc new file mode 100644 index 00000000000..3c578998e48 --- /dev/null +++ b/tests/Rector/Contrib/Nette/HtmlAddMethodRector/correct/correct2.php.inc @@ -0,0 +1,4 @@ +addHtml('someContent'); diff --git a/tests/Rector/Contrib/Nette/HtmlAddMethodRector/wrong/wrong2.php.inc b/tests/Rector/Contrib/Nette/HtmlAddMethodRector/wrong/wrong2.php.inc new file mode 100644 index 00000000000..b38b0ca670d --- /dev/null +++ b/tests/Rector/Contrib/Nette/HtmlAddMethodRector/wrong/wrong2.php.inc @@ -0,0 +1,4 @@ +add('someContent');