From c08c5897f26e3f1130a97978580994d2acddd08e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Chardonnet?= Date: Sat, 10 Jan 2015 21:13:09 +0000 Subject: [PATCH 1/2] Removed PHPToken deprecated features --- CHANGELOG.md | 7 + .../Search/LineNumberSearchStrategy.php | 54 ------- src/Gnugat/Redaktilo/Search/Php/Token.php | 99 ------------ .../Redaktilo/Search/Php/TokenBuilder.php | 146 ------------------ .../Redaktilo/Search/PhpSearchStrategy.php | 126 --------------- .../Redaktilo/Service/EditorBuilder.php | 20 --- .../Redaktilo/Service/TextToPhpConverter.php | 42 ----- .../Redaktilo/Service/EditorBuilderSpec.php | 4 +- .../Service/TextToPhpConverterSpec.php | 43 ------ 9 files changed, 8 insertions(+), 533 deletions(-) delete mode 100644 src/Gnugat/Redaktilo/Search/LineNumberSearchStrategy.php delete mode 100644 src/Gnugat/Redaktilo/Search/Php/Token.php delete mode 100644 src/Gnugat/Redaktilo/Search/Php/TokenBuilder.php delete mode 100644 src/Gnugat/Redaktilo/Search/PhpSearchStrategy.php delete mode 100644 src/Gnugat/Redaktilo/Service/TextToPhpConverter.php delete mode 100644 tests/spec/Gnugat/Redaktilo/Service/TextToPhpConverterSpec.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ac232e..06234d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changes between versions +## 2.0.0: Diet + +* added lock to StringUtil +* added lock to EditorBuilder +* added lock to EditorFactory +* removed deprecated features + ## 1.7.0: Brace yourselves, v2 is coming * added documentation to upgrade to 2.0 diff --git a/src/Gnugat/Redaktilo/Search/LineNumberSearchStrategy.php b/src/Gnugat/Redaktilo/Search/LineNumberSearchStrategy.php deleted file mode 100644 index c592404..0000000 --- a/src/Gnugat/Redaktilo/Search/LineNumberSearchStrategy.php +++ /dev/null @@ -1,54 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Gnugat\Redaktilo\Search; - -use Gnugat\Redaktilo\Text; - -/** - * Moves x lines above or below the current one. - * - * @deprecated 1.7 Use Text#setCurrentLineNumber instead - */ -class LineNumberSearchStrategy implements SearchStrategy -{ - /** {@inheritdoc} */ - public function findAbove(Text $text, $pattern, $location = null) - { - trigger_error(__CLASS__.' has been replaced by Text#setCurrentLineNumber', \E_USER_DEPRECATED); - $foundLineNumber = (null !== $location ? $location : $text->getCurrentLineNumber()) - $pattern; - if (0 > $foundLineNumber || $foundLineNumber >= $text->getLength()) { - return false; - } - - return $foundLineNumber; - } - - /** {@inheritdoc} */ - public function findBelow(Text $text, $pattern, $location = null) - { - trigger_error(__CLASS__.' has been replaced by Text#setCurrentLineNumber', \E_USER_DEPRECATED); - $foundLineNumber = (null !== $location ? $location : $text->getCurrentLineNumber()) + $pattern; - if (0 > $foundLineNumber || $foundLineNumber >= $text->getLength()) { - return false; - } - - return $foundLineNumber; - } - - /** {@inheritdoc} */ - public function supports($pattern) - { - trigger_error(__CLASS__.' has been replaced by Text#setCurrentLineNumber', \E_USER_DEPRECATED); - - return (is_int($pattern) && $pattern >= 0); - } -} diff --git a/src/Gnugat/Redaktilo/Search/Php/Token.php b/src/Gnugat/Redaktilo/Search/Php/Token.php deleted file mode 100644 index e5420f4..0000000 --- a/src/Gnugat/Redaktilo/Search/Php/Token.php +++ /dev/null @@ -1,99 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Gnugat\Redaktilo\Search\Php; - -/** - * @deprecated 1.7 No replacement - */ -class Token -{ - /** @var int */ - private $number; - - /** @var string */ - private $value; - - /** @var int */ - private $lineNumber; - - /** - * @param int $number - * @param string $value - * @param int $lineNumber - */ - public function __construct($number = null, $value = null, $lineNumber = null) - { - trigger_error(__CLASS__.' is no longer supported and will be removed in version 2', \E_USER_DEPRECATED); - $this->number = $number; - $this->value = $value; - $this->lineNumber = $lineNumber; - } - - /** @return bool */ - public function hasNumber() - { - return $this->number !== null; - } - - /** @return int */ - public function getNumber() - { - return $this->number; - } - - /** @return bool */ - public function hasValue() - { - return $this->value !== null; - } - - /** @return string */ - public function getValue() - { - return $this->value; - } - - /** @return bool */ - public function hasLineNumber() - { - return $this->lineNumber !== null; - } - - /** @return int */ - public function getLineNumber() - { - return $this->lineNumber; - } - - /** - * @param Token $token - * - * @return bool - */ - public function isSameAs(Token $token) - { - $hasNumberWildcard = ($this->hasNumber() && $token->hasNumber()); - if ($hasNumberWildcard && $this->number !== $token->number) { - return false; - } - $hasValueWildcard = ($this->hasValue() && $token->hasValue()); - if ($hasValueWildcard && $this->value !== $token->value) { - return false; - } - $hasLineNumberWildcard = ($this->hasLineNumber() && $token->hasLineNumber()); - if ($hasLineNumberWildcard && $this->lineNumber !== $token->lineNumber) { - return false; - } - - return true; - } -} diff --git a/src/Gnugat/Redaktilo/Search/Php/TokenBuilder.php b/src/Gnugat/Redaktilo/Search/Php/TokenBuilder.php deleted file mode 100644 index 8d2609e..0000000 --- a/src/Gnugat/Redaktilo/Search/Php/TokenBuilder.php +++ /dev/null @@ -1,146 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Gnugat\Redaktilo\Search\Php; - -/** - * @deprecated 1.7 No replacement - */ -class TokenBuilder -{ - /** - * @param mixed $rawToken - * @param int $lineNumber - * - * @return Token - */ - public function makeFromRaw($rawToken, $lineNumber = 0) - { - trigger_error(__CLASS__.' is no longer supported and will be removed in version 2', \E_USER_DEPRECATED); - if (!is_array($rawToken)) { - return new Token(null, $rawToken, $lineNumber); - } - - return new Token($rawToken[0], $rawToken[1], $rawToken[2] - 1); - } - - /** @return Token */ - public function makeFunction() - { - trigger_error(__CLASS__.' is no longer supported and will be removed in version 2', \E_USER_DEPRECATED); - - return new Token(T_FUNCTION, 'function'); - } - - /** @return Token */ - public function makeMethod() - { - trigger_error(__CLASS__.' is no longer supported and will be removed in version 2', \E_USER_DEPRECATED); - - return $this->makeFunction(); - } - - /** @return Token */ - public function makeClass() - { - trigger_error(__CLASS__.' is no longer supported and will be removed in version 2', \E_USER_DEPRECATED); - - return new Token(T_CLASS, 'class'); - } - - /** - * @param string $whitespace - * - * @return Token - */ - public function makeWhitespace($whitespace) - { - trigger_error(__CLASS__.' is no longer supported and will be removed in version 2', \E_USER_DEPRECATED); - - return new Token(T_WHITESPACE, $whitespace); - } - - /** - * - * @param string $string - * - * @return Token - */ - public function makeString($string) - { - trigger_error(__CLASS__.' is no longer supported and will be removed in version 2', \E_USER_DEPRECATED); - - return new Token(T_STRING, $string); - } - - /** - * @param array $rawTokens - * - * @return Token[] - */ - public function buildFromRaw(array $rawTokens) - { - trigger_error(__CLASS__.' is no longer supported and will be removed in version 2', \E_USER_DEPRECATED); - $lineNumber = 0; - $tokens = array(); - foreach ($rawTokens as $rawToken) { - $token = $this->makeFromRaw($rawToken, $lineNumber); - if ($token->hasNumber()) { - $lineNumber = $token->getLineNumber() + substr_count($token->getValue(), "\n"); - } - $tokens[] = $token; - } - - return $tokens; - } - - /** - * @param string $className - * - * @return Token[] - */ - public function buildClass($className) - { - trigger_error(__CLASS__.' is no longer supported and will be removed in version 2', \E_USER_DEPRECATED); - $class = $this->makeClass(); - $whitespace = $this->makeWhitespace(null); - $string = $this->makeString($className); - - return array($class, $whitespace, $string); - } - - /** - * @param string $functionName - * - * @return Token[] - */ - public function buildFunction($functionName) - { - trigger_error(__CLASS__.' is no longer supported and will be removed in version 2', \E_USER_DEPRECATED); - $function = $this->makeFunction(); - $whitespace = $this->makeWhitespace(null); - $string = $this->makeString($functionName); - - return array($function, $whitespace, $string); - } - - /** - * @param string $methodName - * - * @return Token[] - */ - public function buildMethod($methodName) - { - trigger_error(__CLASS__.' is no longer supported and will be removed in version 2', \E_USER_DEPRECATED); - - return $this->buildFunction($methodName); - } -} diff --git a/src/Gnugat/Redaktilo/Search/PhpSearchStrategy.php b/src/Gnugat/Redaktilo/Search/PhpSearchStrategy.php deleted file mode 100644 index aea5f6a..0000000 --- a/src/Gnugat/Redaktilo/Search/PhpSearchStrategy.php +++ /dev/null @@ -1,126 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Gnugat\Redaktilo\Search; - -use Gnugat\Redaktilo\Search\Php\Token; -use Gnugat\Redaktilo\Service\TextToPhpConverter; -use Gnugat\Redaktilo\Text; - -/** - * Finds the given PHP token. - * - * @deprecated 1.7 No replacement - */ -class PhpSearchStrategy implements SearchStrategy -{ - /** @var TextToPhpConverter */ - private $converter; - - /** @param TextToPhpConverter $converter */ - public function __construct(TextToPhpConverter $converter) - { - $this->converter = $converter; - } - - /** {@inheritdoc} */ - public function findAbove(Text $text, $pattern, $location = null) - { - trigger_error(__CLASS__.' is no longer supported and will be removed in version 2', \E_USER_DEPRECATED); - $location = (null !== $location ? $location : $text->getCurrentLineNumber()); - $tokens = $this->converter->from($text); - $reversedTokens = array_reverse($tokens); - $total = count($reversedTokens); - for ($index = 0; $index < $total; $index++) { - $token = $reversedTokens[$index]; - if ($token->getLineNumber() === $location) { - break; - } - } - - return $this->findIn($reversedTokens, $index, $pattern); - } - - /** {@inheritdoc} */ - public function findBelow(Text $text, $pattern, $location = null) - { - trigger_error(__CLASS__.' is no longer supported and will be removed in version 2', \E_USER_DEPRECATED); - $location = (null !== $location ? $location : $text->getCurrentLineNumber()) + 1; - $tokens = $this->converter->from($text); - $total = count($tokens); - for ($index = 0; $index < $total; $index++) { - $token = $tokens[$index]; - if ($token->getLineNumber() === $location) { - break; - } - } - - return $this->findIn($tokens, $index, $pattern); - } - - /** {@inheritdoc} */ - public function supports($pattern) - { - trigger_error(__CLASS__.' is no longer supported and will be removed in version 2', \E_USER_DEPRECATED); - if (!is_array($pattern)) { - return false; - } - foreach ($pattern as $token) { - if (!$token instanceof Token) { - return false; - } - } - - return true; - } - - /** - * @param array $collection - * @param int $index - * @param mixed $pattern - * - * @return mixed - */ - private function findIn(array $collection, $index, $pattern) - { - $total = count($collection); - while ($index < $total) { - $found = $this->match($pattern, $collection, $index++); - if ($found !== false) { - $token = $collection[$found]; - - return $token->getLineNumber(); - } - } - - return false; - } - - /** - * @param array $wantedTokens - * @param array $tokens - * @param int $index - * - * @return mixed - */ - private function match(array $wantedTokens, array $tokens, $index) - { - foreach ($wantedTokens as $wantedToken) { - $token = $tokens[$index]; - if (!$token->isSameAs($wantedToken)) { - return false; - } - $index++; - } - - return $index - 1; - } -} diff --git a/src/Gnugat/Redaktilo/Service/EditorBuilder.php b/src/Gnugat/Redaktilo/Service/EditorBuilder.php index 6a65a76..8c57cae 100644 --- a/src/Gnugat/Redaktilo/Service/EditorBuilder.php +++ b/src/Gnugat/Redaktilo/Service/EditorBuilder.php @@ -21,12 +21,9 @@ use Gnugat\Redaktilo\Command\Sanitizer\LocationSanitizer; use Gnugat\Redaktilo\Command\Sanitizer\TextSanitizer; use Gnugat\Redaktilo\Editor; -use Gnugat\Redaktilo\Search\Php\TokenBuilder; use Gnugat\Redaktilo\Search\SearchEngine; use Gnugat\Redaktilo\Search\SearchStrategy; -use Gnugat\Redaktilo\Search\LineNumberSearchStrategy; use Gnugat\Redaktilo\Search\LineRegexSearchStrategy; -use Gnugat\Redaktilo\Search\PhpSearchStrategy; use Gnugat\Redaktilo\Search\SameSearchStrategy; use Symfony\Component\Filesystem\Filesystem as SymfonyFilesystem; @@ -35,9 +32,6 @@ */ final class EditorBuilder { - /** @var TextToPhpConverter */ - private $phpConverter; - /** @var SearchEngine|null */ private $searchEngine; @@ -62,17 +56,6 @@ final class EditorBuilder /** @var ContentFactory */ private $contentFactory; - /** @return TextToPhpConverter */ - protected function getPhpConverter() - { - if ($this->phpConverter) { - return $this->phpConverter; - } - $tokenBuilder = new TokenBuilder(); - - return $this->phpConverter = new TextToPhpConverter($tokenBuilder); - } - /** @return SearchEngine */ protected function getSearchEngine() { @@ -81,12 +64,9 @@ protected function getSearchEngine() } $engine = new SearchEngine(); - $phpConverter = $this->getPhpConverter(); - $engine->registerStrategy(new PhpSearchStrategy($phpConverter)); $engine->registerStrategy(new LineRegexSearchStrategy(), 20); $engine->registerStrategy(new SameSearchStrategy(), 10); - $engine->registerStrategy(new LineNumberSearchStrategy()); foreach ($this->searchStrategies as $priority => $strategies) { foreach ($strategies as $strategy) { diff --git a/src/Gnugat/Redaktilo/Service/TextToPhpConverter.php b/src/Gnugat/Redaktilo/Service/TextToPhpConverter.php deleted file mode 100644 index 0dfa2c1..0000000 --- a/src/Gnugat/Redaktilo/Service/TextToPhpConverter.php +++ /dev/null @@ -1,42 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Gnugat\Redaktilo\Service; - -use Gnugat\Redaktilo\Text; -use Gnugat\Redaktilo\Search\Php\TokenBuilder; - -/** - * Converts the given text's content into PHP tokens. - */ -class TextToPhpConverter -{ - /** @param TokenBuilder $tokenBuilder */ - public function __construct(TokenBuilder $tokenBuilder) - { - $this->tokenBuilder = $tokenBuilder; - } - - /** - * @param Text $text - * - * @return array - */ - public function from(Text $text) - { - $lines = $text->getLines(); - $lineBreak = $text->getLineBreak(); - $content = implode($lineBreak, $lines); - $rawTokens = token_get_all($content); - - return $this->tokenBuilder->buildFromRaw($rawTokens); - } -} diff --git a/tests/spec/Gnugat/Redaktilo/Service/EditorBuilderSpec.php b/tests/spec/Gnugat/Redaktilo/Service/EditorBuilderSpec.php index ac6dc97..b31e25e 100644 --- a/tests/spec/Gnugat/Redaktilo/Service/EditorBuilderSpec.php +++ b/tests/spec/Gnugat/Redaktilo/Service/EditorBuilderSpec.php @@ -26,8 +26,6 @@ function it_can_build_the_default_editor() $editor->shouldBeAnInstanceOf('Gnugat\Redaktilo\Editor'); $editor->shouldHaveSearchStrategies(array( - 'Gnugat\Redaktilo\Search\PhpSearchStrategy', - 'Gnugat\Redaktilo\Search\LineNumberSearchStrategy', 'Gnugat\Redaktilo\Search\LineRegexSearchStrategy', 'Gnugat\Redaktilo\Search\SameSearchStrategy', )); @@ -48,7 +46,7 @@ function it_can_have_custom_search_strategies(SearchStrategy $searchStrategy) ->getEditor(); $editor->shouldBeAnInstanceOf('Gnugat\Redaktilo\Editor'); - $editor->shouldHaveSearchStrategiesCount(5); + $editor->shouldHaveSearchStrategiesCount(3); } function it_can_have_a_custom_search_engine(SearchEngine $searchEngine) diff --git a/tests/spec/Gnugat/Redaktilo/Service/TextToPhpConverterSpec.php b/tests/spec/Gnugat/Redaktilo/Service/TextToPhpConverterSpec.php deleted file mode 100644 index e0d932d..0000000 --- a/tests/spec/Gnugat/Redaktilo/Service/TextToPhpConverterSpec.php +++ /dev/null @@ -1,43 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace spec\Gnugat\Redaktilo\Service; - -use Gnugat\Redaktilo\Search\Php\TokenBuilder; -use Gnugat\Redaktilo\Service\LineBreak; -use Gnugat\Redaktilo\Text; -use Gnugat\Redaktilo\Util\StringUtil; -use PhpSpec\ObjectBehavior; - -class TextToPhpConverterSpec extends ObjectBehavior -{ - const FILENAME = '%s/tests/fixtures/sources/php-sample.php'; - - function let(TokenBuilder $tokenBuilder) - { - $this->beConstructedWith($tokenBuilder); - } - - function it_converts_file_content_into_php_tokens(TokenBuilder $tokenBuilder, Text $text) - { - $rootPath = __DIR__.'/../../../../../'; - $filename = sprintf(self::FILENAME, $rootPath); - $content = file_get_contents($filename); - $lineBreak = StringUtil::detectLineBreak($content); - $lines = explode($lineBreak, $content); - $rawTokens = token_get_all($content); - $text->getLineBreak()->willReturn($lineBreak); - $text->getLines()->willReturn($lines); - - $tokenBuilder->buildFromRaw($rawTokens)->willReturn(array()); - $this->from($text); - } -} From 3e06c4799a638683c82a1bfe22684bd421756100 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Chardonnet?= Date: Sat, 10 Jan 2015 21:18:32 +0000 Subject: [PATCH 2/2] Updated README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4d2dd0e..1ec4e76 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ editor-like object. Use [Composer](http://getcomposer.org/) to install Redaktilo in your projects: - composer require "gnugat/redaktilo:~1.0" + composer require "gnugat/redaktilo:~2.0" Redaktilo provides an `Editor` class which can be instanciated using `EditorFactory`: