Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/updater.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SimplifiedIfReturnFixer.php')
-rw-r--r--vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SimplifiedIfReturnFixer.php145
1 files changed, 145 insertions, 0 deletions
diff --git a/vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SimplifiedIfReturnFixer.php b/vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SimplifiedIfReturnFixer.php
new file mode 100644
index 0000000..6831c77
--- /dev/null
+++ b/vendor/friendsofphp/php-cs-fixer/src/Fixer/ControlStructure/SimplifiedIfReturnFixer.php
@@ -0,0 +1,145 @@
+<?php
+
+declare(strict_types=1);
+
+/*
+ * This file is part of PHP CS Fixer.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ * Dariusz RumiƄski <dariusz.ruminski@gmail.com>
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+namespace PhpCsFixer\Fixer\ControlStructure;
+
+use PhpCsFixer\AbstractFixer;
+use PhpCsFixer\FixerDefinition\CodeSample;
+use PhpCsFixer\FixerDefinition\FixerDefinition;
+use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
+use PhpCsFixer\Tokenizer\Token;
+use PhpCsFixer\Tokenizer\Tokens;
+
+/**
+ * @author Filippo Tessarotto <zoeslam@gmail.com>
+ */
+final class SimplifiedIfReturnFixer extends AbstractFixer
+{
+ /**
+ * @var array[]
+ */
+ private $sequences = [
+ [
+ 'isNegative' => false,
+ 'sequence' => [
+ '{', [T_RETURN], [T_STRING, 'true'], ';', '}',
+ [T_RETURN], [T_STRING, 'false'], ';',
+ ],
+ ],
+ [
+ 'isNegative' => true,
+ 'sequence' => [
+ '{', [T_RETURN], [T_STRING, 'false'], ';', '}',
+ [T_RETURN], [T_STRING, 'true'], ';',
+ ],
+ ],
+ [
+ 'isNegative' => false,
+ 'sequence' => [
+ [T_RETURN], [T_STRING, 'true'], ';',
+ [T_RETURN], [T_STRING, 'false'], ';',
+ ],
+ ],
+ [
+ 'isNegative' => true,
+ 'sequence' => [
+ [T_RETURN], [T_STRING, 'false'], ';',
+ [T_RETURN], [T_STRING, 'true'], ';',
+ ],
+ ],
+ ];
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getDefinition(): FixerDefinitionInterface
+ {
+ return new FixerDefinition(
+ 'Simplify `if` control structures that return the boolean result of their condition.',
+ [new CodeSample("<?php\nif (\$foo) { return true; } return false;\n")]
+ );
+ }
+
+ /**
+ * {@inheritdoc}
+ *
+ * Must run before MultilineWhitespaceBeforeSemicolonsFixer, NoSinglelineWhitespaceBeforeSemicolonsFixer.
+ * Must run after NoSuperfluousElseifFixer, NoUnneededCurlyBracesFixer, NoUselessElseFixer, SemicolonAfterInstructionFixer.
+ */
+ public function getPriority(): int
+ {
+ return 1;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function isCandidate(Tokens $tokens): bool
+ {
+ return $tokens->isAllTokenKindsFound([T_IF, T_RETURN, T_STRING]);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
+ {
+ for ($ifIndex = $tokens->count() - 1; 0 <= $ifIndex; --$ifIndex) {
+ $ifToken = $tokens[$ifIndex];
+
+ if (!$ifToken->isGivenKind([T_IF, T_ELSEIF])) {
+ continue;
+ }
+
+ $startParenthesisIndex = $tokens->getNextTokenOfKind($ifIndex, ['(']);
+ $endParenthesisIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $startParenthesisIndex);
+ $firstCandidateIndex = $tokens->getNextMeaningfulToken($endParenthesisIndex);
+
+ foreach ($this->sequences as $sequenceSpec) {
+ $sequenceFound = $tokens->findSequence($sequenceSpec['sequence'], $firstCandidateIndex);
+
+ if (null === $sequenceFound) {
+ continue;
+ }
+
+ $firstSequenceIndex = key($sequenceFound);
+
+ if ($firstSequenceIndex !== $firstCandidateIndex) {
+ continue;
+ }
+
+ $indexesToClear = array_keys($sequenceFound);
+ array_pop($indexesToClear); // Preserve last semicolon
+ rsort($indexesToClear);
+
+ foreach ($indexesToClear as $index) {
+ $tokens->clearTokenAndMergeSurroundingWhitespace($index);
+ }
+
+ $newTokens = [
+ new Token([T_RETURN, 'return']),
+ new Token([T_WHITESPACE, ' ']),
+ ];
+
+ if ($sequenceSpec['isNegative']) {
+ $newTokens[] = new Token('!');
+ } else {
+ $newTokens[] = new Token([T_BOOL_CAST, '(bool)']);
+ }
+
+ $tokens->overrideRange($ifIndex, $ifIndex, $newTokens);
+ }
+ }
+ }
+}