Skip to content

Commit 71eea73

Browse files
committed
Token class taking some responsabilities from Formatter
1 parent 8471ae7 commit 71eea73

File tree

2 files changed

+96
-58
lines changed

2 files changed

+96
-58
lines changed

src/Formatter.php

Lines changed: 6 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use NilPortugues\SqlQueryFormatter\Helper\Indent;
1414
use NilPortugues\SqlQueryFormatter\Helper\NewLine;
1515
use NilPortugues\SqlQueryFormatter\Helper\Parentheses;
16+
use NilPortugues\SqlQueryFormatter\Helper\Token;
1617
use NilPortugues\SqlQueryFormatter\Helper\WhiteSpace;
1718
use NilPortugues\SqlQueryFormatter\Tokenizer\Tokenizer;
1819

@@ -78,7 +79,7 @@ public function format($sql)
7879
$this->reset();
7980
$tab = "\t";
8081

81-
$originalTokens = $this->tokenizer->tokenize((string) $sql);
82+
$originalTokens = $this->tokenizer->tokenize((string)$sql);
8283
$tokens = WhiteSpace::removeTokenWhitespace($originalTokens);
8384

8485
foreach ($tokens as $i => $token) {
@@ -133,7 +134,7 @@ public function format($sql)
133134
} elseif ($this->parentheses->stringIsClosingParentheses($token)) {
134135
$this->indentation->decreaseIndentLevelUntilIndentTypeIsSpecial($this);
135136
$this->newLine->addNewLineBeforeToken($addedNewline, $tab);
136-
} elseif ($this->isTokenTypeReservedTopLevel($token)) {
137+
} elseif (Token::isTokenTypeReservedTopLevel($token)) {
137138
$this->indentation
138139
->setIncreaseSpecialIndent(true)
139140
->decreaseSpecialIndentIfCurrentIndentTypeIsSpecial();
@@ -143,7 +144,7 @@ public function format($sql)
143144
if (WhiteSpace::tokenHasExtraWhiteSpaces($token)) {
144145
$queryValue = preg_replace('/\s+/', ' ', $queryValue);
145146
}
146-
$this->tokenHasLimitClause($token);
147+
Token::tokenHasLimitClause($token, $this->parentheses, $this);
147148
} elseif ($this->stringIsEndOfLimitClause($token)) {
148149
$this->clauseLimit = false;
149150
} elseif (
@@ -159,7 +160,7 @@ public function format($sql)
159160
}
160161
}
161162

162-
if ($this->tokenHasMultipleBoundaryCharactersTogether($token, $tokens, $i, $originalTokens)) {
163+
if (Token::tokenHasMultipleBoundaryCharactersTogether($token, $tokens, $i, $originalTokens)) {
163164
$this->formattedSql = rtrim($this->formattedSql, ' ');
164165
}
165166

@@ -173,7 +174,7 @@ public function format($sql)
173174
$this->formattedSql = rtrim($this->formattedSql, ' ');
174175
}
175176

176-
if ($this->tokenIsMinusSign($token, $tokens, $i)) {
177+
if (Token::tokenIsMinusSign($token, $tokens, $i)) {
177178
$previousTokenType = $tokens[$i - 1][Tokenizer::TOKEN_TYPE];
178179

179180
if (WhiteSpace::tokenIsNumberAndHasExtraWhiteSpaceRight($previousTokenType)) {
@@ -200,26 +201,6 @@ public function reset()
200201
}
201202

202203

203-
/**
204-
* @param $token
205-
*
206-
* @return bool
207-
*/
208-
protected function isTokenTypeReservedTopLevel($token)
209-
{
210-
return $token[Tokenizer::TOKEN_TYPE] === Tokenizer::TOKEN_TYPE_RESERVED_TOP_LEVEL;
211-
}
212-
213-
/**
214-
* @param $token
215-
*/
216-
protected function tokenHasLimitClause($token)
217-
{
218-
if ('LIMIT' === $token[Tokenizer::TOKEN_VALUE] && false === $this->parentheses->getInlineParentheses()) {
219-
$this->clauseLimit = true;
220-
}
221-
}
222-
223204
/**
224205
* @param $token
225206
*
@@ -233,39 +214,6 @@ protected function stringIsEndOfLimitClause($token)
233214
&& $token[Tokenizer::TOKEN_TYPE] !== Tokenizer::TOKEN_TYPE_WHITESPACE;
234215
}
235216

236-
237-
/**
238-
* @param $token
239-
* @param $tokens
240-
* @param $i
241-
* @param $originalTokens
242-
*
243-
* @return bool
244-
*/
245-
protected function tokenHasMultipleBoundaryCharactersTogether($token, &$tokens, $i, &$originalTokens)
246-
{
247-
return $token[Tokenizer::TOKEN_TYPE] === Tokenizer::TOKEN_TYPE_BOUNDARY
248-
&& isset($tokens[$i - 1])
249-
&& $tokens[$i - 1][Tokenizer::TOKEN_TYPE] === Tokenizer::TOKEN_TYPE_BOUNDARY
250-
&& isset($originalTokens[$token['i'] - 1])
251-
&& $originalTokens[$token['i'] - 1][Tokenizer::TOKEN_TYPE] !== Tokenizer::TOKEN_TYPE_WHITESPACE;
252-
}
253-
254-
/**
255-
* @param $token
256-
* @param $tokens
257-
* @param $i
258-
*
259-
* @return bool
260-
*/
261-
protected function tokenIsMinusSign($token, &$tokens, $i)
262-
{
263-
return '-' === $token[Tokenizer::TOKEN_VALUE]
264-
&& isset($tokens[$i + 1])
265-
&& $tokens[$i + 1][Tokenizer::TOKEN_TYPE] === Tokenizer::TOKEN_TYPE_NUMBER
266-
&& isset($tokens[$i - 1]);
267-
}
268-
269217
/**
270218
* @return string
271219
*/

src/Helper/Token.php

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010

1111
namespace NilPortugues\SqlQueryFormatter\Helper;
1212

13+
use NilPortugues\SqlQueryFormatter\Formatter;
14+
use NilPortugues\SqlQueryFormatter\Tokenizer\Tokenizer;
15+
1316
/**
1417
* Class Token
1518
* @package NilPortugues\SqlQueryFormatter\Helper
@@ -658,4 +661,91 @@ final class Token
658661
'&',
659662
'#'
660663
];
664+
665+
666+
/**
667+
* @param $token
668+
*
669+
* @return bool
670+
*/
671+
public static function isTokenTypeReservedTopLevel($token)
672+
{
673+
return $token[Tokenizer::TOKEN_TYPE] === Tokenizer::TOKEN_TYPE_RESERVED_TOP_LEVEL;
674+
}
675+
676+
/**
677+
* @param string $token
678+
* @param Parentheses $parentheses
679+
* @param Formatter $formatter
680+
*/
681+
public static function tokenHasLimitClause($token, Parentheses $parentheses, Formatter $formatter)
682+
{
683+
if ('LIMIT' === $token[Tokenizer::TOKEN_VALUE] && false === $parentheses->getInlineParentheses()) {
684+
$formatter->setClauseLimit(true);
685+
}
686+
}
687+
688+
/**
689+
* @param $token
690+
* @param $tokens
691+
* @param $i
692+
* @param $originalTokens
693+
*
694+
* @return bool
695+
*/
696+
public static function tokenHasMultipleBoundaryCharactersTogether($token, &$tokens, $i, &$originalTokens)
697+
{
698+
return $token[Tokenizer::TOKEN_TYPE] === Tokenizer::TOKEN_TYPE_BOUNDARY
699+
&& self::tokenPreviousCharacterIsBoundary($tokens, $i)
700+
&& self::tokenPreviousCharacterIsWhiteSpace($token, $originalTokens);
701+
}
702+
703+
/**
704+
* @param $tokens
705+
* @param $i
706+
*
707+
* @return bool
708+
*/
709+
public static function tokenPreviousCharacterIsBoundary(&$tokens, $i)
710+
{
711+
return (isset($tokens[$i - 1]) && $tokens[$i - 1][Tokenizer::TOKEN_TYPE] === Tokenizer::TOKEN_TYPE_BOUNDARY);
712+
}
713+
714+
/**
715+
* @param $token
716+
* @param $originalTokens
717+
*
718+
* @return bool
719+
*/
720+
public static function tokenPreviousCharacterIsWhiteSpace($token, &$originalTokens)
721+
{
722+
return (isset($originalTokens[$token['i'] - 1])
723+
&& $originalTokens[$token['i'] - 1][Tokenizer::TOKEN_TYPE] !== Tokenizer::TOKEN_TYPE_WHITESPACE);
724+
}
725+
726+
/**
727+
* @param $token
728+
* @param $tokens
729+
* @param $i
730+
*
731+
* @return bool
732+
*/
733+
public static function tokenIsMinusSign($token, &$tokens, $i)
734+
{
735+
return '-' === $token[Tokenizer::TOKEN_VALUE]
736+
&& self::tokenNextCharacterIsNumber($tokens, $i)
737+
&& isset($tokens[$i - 1]);
738+
}
739+
740+
/**
741+
* @param $tokens
742+
* @param $i
743+
*
744+
* @return bool
745+
*/
746+
public static function tokenNextCharacterIsNumber(&$tokens, $i)
747+
{
748+
return (isset($tokens[$i + 1])
749+
&& $tokens[$i + 1][Tokenizer::TOKEN_TYPE] === Tokenizer::TOKEN_TYPE_NUMBER);
750+
}
661751
}

0 commit comments

Comments
 (0)