From 02259f61a7a50c68b426b29a8a1a092a941d3d2c Mon Sep 17 00:00:00 2001 From: Timothy Warren Date: Wed, 3 Mar 2021 16:35:58 -0500 Subject: [PATCH] Simplify code with match statements --- Dockerfile | 4 +- src/ANSI.php | 2 +- src/Editor.php | 6 +- src/Row.php | 219 +- src/Termios.php | 8 +- src/Tokens/PHP.php | 185 - src/Tokens/PHP8.php | 66 +- src/functions.php | 176 +- tests/TermiosTest.php | 2 + tests/Tokens/{PHPTest.php => PHP8Test.php} | 10 +- .../EditorTest__testOpenPHP__1.json | 4322 ++++++++++++----- 11 files changed, 3355 insertions(+), 1645 deletions(-) delete mode 100644 src/Tokens/PHP.php rename tests/Tokens/{PHPTest.php => PHP8Test.php} (84%) diff --git a/Dockerfile b/Dockerfile index 82c8cc3..0e918bc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ -FROM php:7.4-cli-alpine +FROM php:8-cli-alpine RUN apk add --no-cache --virtual .persistent-deps libffi-dev \ && docker-php-ext-configure ffi --with-ffi \ && docker-php-ext-install ffi \ - && apk add --no-cache php7-phpdbg + && apk add --no-cache php8-phpdbg diff --git a/src/ANSI.php b/src/ANSI.php index 8091cd9..03b80aa 100644 --- a/src/ANSI.php +++ b/src/ANSI.php @@ -110,7 +110,7 @@ class ANSI { * @param mixed ...$args * @return string */ - private static function seq(string $pattern, ...$args): string + private static function seq(string $pattern, mixed ...$args): string { return sprintf("\e[{$pattern}", ...$args); } diff --git a/src/Editor.php b/src/Editor.php index 99635fb..9d78ac7 100644 --- a/src/Editor.php +++ b/src/Editor.php @@ -7,7 +7,7 @@ use Aviat\Kilo\Tokens\PHP8; /** * // Don't highlight this! - * @property-read int numRows + * @property-read int $numRows */ class Editor { use Traits\MagicProperties; @@ -904,12 +904,12 @@ class Editor { protected function refreshSyntax(): void { // Update the syntax highlighting for all the rows of the file - array_walk($this->rows, static fn (Row $row) => $row->updateSyntax()); + // array_walk($this->rows, static fn (Row $row) => $row->updateSyntax()); } private function refreshPHPSyntax(): void { - if ($this->syntax->filetype !== 'PHP') + if ($this->syntax?->filetype !== 'PHP') { return; } diff --git a/src/Row.php b/src/Row.php index 3b7aa92..f502f1e 100644 --- a/src/Row.php +++ b/src/Row.php @@ -6,8 +6,8 @@ use Aviat\Kilo\Enum\Highlight; use Aviat\Kilo\Enum\KeyCode; /** - * @property-read int size - * @property-read int rsize + * @property-read int $size + * @property-read int $rsize */ class Row { use Traits\MagicProperties; @@ -25,173 +25,6 @@ class Row { private const T_RAW = -1; - private array $phpTokenHighlightMap = [ - // Delimiters - T_ARRAY => Highlight::DELIMITER, - T_CURLY_OPEN => Highlight::DELIMITER, - T_DOLLAR_OPEN_CURLY_BRACES => Highlight::DELIMITER, - T_OPEN_TAG => Highlight::DELIMITER, - T_OPEN_TAG_WITH_ECHO => Highlight::DELIMITER, - T_CLOSE_TAG => Highlight::DELIMITER, - T_START_HEREDOC => Highlight::DELIMITER, - T_END_HEREDOC => Highlight::DELIMITER, - - // Number literals and magic constants - T_DIR => Highlight::NUMBER, - T_TRAIT_C => Highlight::NUMBER, - T_DNUMBER => Highlight::NUMBER, - T_LNUMBER => Highlight::NUMBER, - - // String literals - T_CONSTANT_ENCAPSED_STRING => Highlight::STRING, - T_ENCAPSED_AND_WHITESPACE => Highlight::STRING, - - // Simple variables - T_VARIABLE => Highlight::VARIABLE, - T_STRING_VARNAME => Highlight::VARIABLE, - - // Operators - T_AS => Highlight::OPERATOR, - T_AND_EQUAL => Highlight::OPERATOR, - T_BOOLEAN_AND => Highlight::OPERATOR, - T_BOOLEAN_OR => Highlight::OPERATOR, - T_COALESCE => Highlight::OPERATOR, - T_CONCAT_EQUAL => Highlight::OPERATOR, - T_DEC => Highlight::OPERATOR, - T_DIV_EQUAL => Highlight::OPERATOR, - T_DOUBLE_ARROW => Highlight::OPERATOR, - T_DOUBLE_COLON => Highlight::OPERATOR, - T_ELLIPSIS => Highlight::OPERATOR, - T_INC => Highlight::OPERATOR, - T_IS_EQUAL => Highlight::OPERATOR, - T_IS_GREATER_OR_EQUAL => Highlight::OPERATOR, - T_IS_IDENTICAL => Highlight::OPERATOR, - T_IS_NOT_EQUAL => Highlight::OPERATOR, - T_IS_NOT_IDENTICAL => Highlight::OPERATOR, - T_IS_SMALLER_OR_EQUAL => Highlight::OPERATOR, - T_SPACESHIP => Highlight::OPERATOR, - T_LOGICAL_AND => Highlight::OPERATOR, - T_LOGICAL_OR => Highlight::OPERATOR, - T_LOGICAL_XOR => Highlight::OPERATOR, - T_MINUS_EQUAL => Highlight::OPERATOR, - T_MOD_EQUAL => Highlight::OPERATOR, - T_MUL_EQUAL => Highlight::OPERATOR, - T_NS_SEPARATOR => Highlight::OPERATOR, - T_NULLSAFE_OBJECT_OPERATOR => Highlight::OPERATOR, - T_OBJECT_OPERATOR => Highlight::OPERATOR, - T_OR_EQUAL => Highlight::OPERATOR, - T_PLUS_EQUAL => Highlight::OPERATOR, - T_POW => Highlight::OPERATOR, - T_POW_EQUAL => Highlight::OPERATOR, - T_SL => Highlight::OPERATOR, - T_SL_EQUAL => Highlight::OPERATOR, - T_SR => Highlight::OPERATOR, - T_SR_EQUAL => Highlight::OPERATOR, - T_XOR_EQUAL => Highlight::OPERATOR, - - // Keywords1 - T_ABSTRACT => Highlight::KEYWORD1, - T_AS => Highlight::KEYWORD1, - T_BREAK => Highlight::KEYWORD1, - T_CASE => Highlight::KEYWORD1, - T_CATCH => Highlight::KEYWORD1, - T_CLASS => Highlight::KEYWORD1, - T_CLONE => Highlight::KEYWORD1, - T_CONST => Highlight::KEYWORD1, - T_CONTINUE => Highlight::KEYWORD1, - T_DECLARE => Highlight::KEYWORD1, - T_DEFAULT => Highlight::KEYWORD1, - T_DO => Highlight::KEYWORD1, - T_ELSE => Highlight::KEYWORD1, - T_ELSEIF => Highlight::KEYWORD1, - T_ENDDECLARE => Highlight::KEYWORD1, - T_ENDFOR => Highlight::KEYWORD1, - T_ENDFOREACH => Highlight::KEYWORD1, - T_ENDIF => Highlight::KEYWORD1, - T_ENDSWITCH => Highlight::KEYWORD1, - T_ENDWHILE => Highlight::KEYWORD1, - T_EXIT => Highlight::KEYWORD1, - T_EXTENDS => Highlight::KEYWORD1, - T_FINAL => Highlight::KEYWORD1, - T_FINALLY => Highlight::KEYWORD1, - T_FN => Highlight::KEYWORD1, - T_FOR => Highlight::KEYWORD1, - T_FOREACH => Highlight::KEYWORD1, - T_FUNCTION => Highlight::KEYWORD1, - T_GLOBAL => Highlight::KEYWORD1, - T_GOTO => Highlight::KEYWORD1, - T_HALT_COMPILER => Highlight::KEYWORD1, - T_IF => Highlight::KEYWORD1, - T_IMPLEMENTS => Highlight::KEYWORD1, - T_INSTANCEOF => Highlight::KEYWORD1, - T_INSTEADOF => Highlight::KEYWORD1, - T_INTERFACE => Highlight::KEYWORD1, - T_NAMESPACE => Highlight::KEYWORD1, - T_MATCH => Highlight::KEYWORD1, - T_NEW => Highlight::KEYWORD1, - T_PRIVATE => Highlight::KEYWORD1, - T_PUBLIC => Highlight::KEYWORD1, - T_PROTECTED => Highlight::KEYWORD1, - T_RETURN => Highlight::KEYWORD1, - T_STATIC => Highlight::KEYWORD1, - T_SWITCH => Highlight::KEYWORD1, - T_THROW => Highlight::KEYWORD1, - T_TRAIT => Highlight::KEYWORD1, - T_TRY => Highlight::KEYWORD1, - T_USE => Highlight::KEYWORD1, - T_VAR => Highlight::KEYWORD1, - T_WHILE => Highlight::KEYWORD1, - T_YIELD => Highlight::KEYWORD1, - T_YIELD_FROM => Highlight::KEYWORD1, - - // Not string literals, but identifiers, keywords, etc. - // T_STRING => Highlight::KEYWORD2, - - // Types and casts - T_ARRAY_CAST => Highlight::KEYWORD2, - T_BOOL_CAST => Highlight::KEYWORD2, - T_CALLABLE => Highlight::KEYWORD2, - T_DOUBLE_CAST => Highlight::KEYWORD2, - T_INT_CAST => Highlight::KEYWORD2, - T_OBJECT_CAST => Highlight::KEYWORD2, - T_STRING_CAST => Highlight::KEYWORD2, - T_UNSET_CAST => Highlight::KEYWORD2, - - // Invalid syntax - T_BAD_CHARACTER => Highlight::INVALID, - ]; - - private array $phpCharacterHighlightMap = [ - // Delimiter characters - '[' => Highlight::DELIMITER, - ']' => Highlight::DELIMITER, - '{' => Highlight::DELIMITER, - '}' => Highlight::DELIMITER, - '(' => Highlight::DELIMITER, - ')' => Highlight::DELIMITER, - '"' => Highlight::DELIMITER, - "'" => Highlight::DELIMITER, - - // Single character operators - '?' => Highlight::OPERATOR, - ',' => Highlight::OPERATOR, - ';' => Highlight::OPERATOR, - ':' => Highlight::OPERATOR, - '^' => Highlight::OPERATOR, - '%' => Highlight::OPERATOR, - '+' => Highlight::OPERATOR, - '-' => Highlight::OPERATOR, - '*' => Highlight::OPERATOR, - '/' => Highlight::OPERATOR, - '.' => Highlight::OPERATOR, - '|' => Highlight::OPERATOR, - '~' => Highlight::OPERATOR, - '>' => Highlight::OPERATOR, - '<' => Highlight::OPERATOR, - '=' => Highlight::OPERATOR, - '!' => Highlight::OPERATOR, - ]; - public static function new(Editor $parent, string $chars, int $idx): self { $self = new self(); @@ -204,7 +37,7 @@ class Row { private function __construct() {} - public function __get(string $name) + public function __get(string $name): mixed { return match ($name) { @@ -215,9 +48,9 @@ class Row { }; } - public function __set(string $key, mixed $value): void + public function __set(string $name, mixed $value): void { - if ($key === 'chars') + if ($name === 'chars') { $this->chars = $value; $this->update(); @@ -553,35 +386,35 @@ class Row { } } - if (array_key_exists($token['type'], $this->phpTokenHighlightMap)) + $tokenHighlight = php_token_to_highlight($token['type']); + $charHighlight = php_char_to_highlight(trim($token['char'])); + + $hl = match(true) { + // Matches a predefined PHP token + $token['type'] !== self::T_RAW && $tokenHighlight !== Highlight::NORMAL + => $tokenHighlight, + + // Matches a specific syntax character + $charHighlight !== Highlight::NORMAL => $charHighlight, + + // Types/identifiers/keywords that don't have their own token, but are + // defined as keywords + in_array($token['char'], $this->parent->syntax->keywords2 ?? [], TRUE) + => Highlight::KEYWORD2, + + default => Highlight::NORMAL, + }; + + if ($hl !== Highlight::NORMAL) { - $hl = $this->phpTokenHighlightMap[$token['type']]; array_replace_range($this->hl, $charStart, $charLen, $hl); $offset = $charEnd; - continue; - } - - // Types/identifiers/keywords that don't have their own token - if (in_array($token['char'], $this->parent->syntax->keywords2, TRUE)) - { - array_replace_range($this->hl, $charStart, $charLen, Highlight::KEYWORD2); - $offset = $charEnd; - continue; - } - - // Highlight raw characters - if (array_key_exists(trim($token['char']), $this->phpCharacterHighlightMap)) - { - $hl = $this->phpCharacterHighlightMap[trim($token['char'])]; - array_replace_range($this->hl, $charStart, $charLen, $hl); - $offset = $charEnd; - continue; } } $changed = $this->hlOpenComment !== $inComment; $this->hlOpenComment = $inComment; - if ($changed && $this->idx + 1 < $this->parent->numRows) + if ($changed && ($this->idx + 1) < $this->parent->numRows) { // @codeCoverageIgnoreStart $this->parent->rows[$this->idx + 1]->updateSyntax(); diff --git a/src/Termios.php b/src/Termios.php index bbdaae1..a1a95d4 100644 --- a/src/Termios.php +++ b/src/Termios.php @@ -17,7 +17,13 @@ class Termios { { $ffi = get_ffi(); $termios = $ffi->new('struct termios'); - $res = $ffi->tcgetattr(C::STDIN_FILENO, FFI::addr($termios)); + if ($termios === NULL) + { + throw new TermiosException('Failed to create termios struct'); + } + + $termiosAddr = FFI::addr($termios); + $res = $ffi->tcgetattr(C::STDIN_FILENO, $termiosAddr); if ($res === -1) { diff --git a/src/Tokens/PHP.php b/src/Tokens/PHP.php deleted file mode 100644 index c7b9686..0000000 --- a/src/Tokens/PHP.php +++ /dev/null @@ -1,185 +0,0 @@ -code = $code; - $this->rawLines = $lines; - $this->tokens = array_fill(1, count($lines), []); - } - - /** - * Use 'token_get_all' to get the tokens for a file, - * organized by row number - * - * @param string $code - * @return array - */ - public static function getTokens(string $code): array - { - return (new self($code))->organizeTokens(); - } - - /** - * Return tokens for the current $filename, organized - * by row number - * - * @param string $filename - * @return array - */ - public static function getFileTokens(string $filename): array - { - $code = @file_get_contents($filename); - - if ($code === FALSE) - { - return []; - } - - return self::getTokens($code); - } - - protected function organizeTokens(): array - { - $rawTokens = (class_exists('PhpToken')) - ? \PhpToken::tokenize($this->code) - : token_get_all($this->code); - foreach ($rawTokens as $t) - { - if ($t instanceof \PhpToken) - { - $this->processObjectToken($t); - } - else if (is_array($t)) - { - $this->processArrayToken($t); - } - else if (is_string($t)) - { - $this->processStringToken($t); - } - } - - ksort($this->tokens); - - return $this->tokens; - } - - protected function processObjectToken(\PhpToken $token): void - { - $currentLine = $token->line; - $char = tabs_to_spaces($token->text); - - $current = [ - 'type' => $token->id, - 'typeName' => $token->getTokenName(), - 'char' => $char, - 'line' => $currentLine, - ]; - - $this->tokens[$currentLine][] = $current; - } - - protected function processArrayToken(array $token): void - { - [$type, $rawChar, $currentLine] = $token; - $char = tabs_to_spaces($rawChar); - - $this->lineNum = $currentLine; - - $current = [ - 'type' => $type, - 'typeName' => token_name($type), - 'char' => $char, - 'line' => $currentLine, - ]; - - // Single new line, or starts with a new line with other whitespace - if (str_starts_with($char, "\n") && trim($char) === '') - { - $this->tokens[$this->lineNum][] = $current; - $this->lineNum++; - - return; - } - - // Only return the first line of a multi-line token for this line array - if (str_contains($char, "\n")) - { - $chars = explode("\n", $char); - $current['original'] = [ - 'string' => $char, - 'lines' => $chars, - ]; - $current['char'] = array_shift($chars); - - // Add new lines for additional newline characters - $nextLine = $currentLine; - foreach ($chars as $char) - { - $nextLine++; - - if ( ! empty($char)) - { - $this->processStringToken($char, $nextLine); - } - } - } - - $this->tokens[$this->lineNum][] = $current; - } - - protected function processStringToken(string $token, ?int $startLine = NULL): void - { - $char = tabs_to_spaces($token); - - $startLine = $startLine ?? $this->lineNum; - $lineNumber = $this->findCorrectLine($char, $startLine) ?? $startLine; - - // Simple characters, usually delimiters or single character operators - $this->tokens[$lineNumber][] = [ - 'type' => -1, - 'typeName' => 'RAW', - 'char' => tabs_to_spaces($token), - ]; - } - - private function findCorrectLine(string $search, int $rowOffset, int $searchLength = 5): ?int - { - $end = $rowOffset + $searchLength; - if ($end > count($this->rawLines)) - { - $end = count($this->rawLines); - } - - for ($i = $rowOffset; $i < $end; $i++) - { - if (str_contains($this->rawLines[$i], $search)) - { - return $i; - } - } - - return NULL; - } -} \ No newline at end of file diff --git a/src/Tokens/PHP8.php b/src/Tokens/PHP8.php index bdd9264..04705ad 100644 --- a/src/Tokens/PHP8.php +++ b/src/Tokens/PHP8.php @@ -27,7 +27,6 @@ class PHP8 extends PhpToken { $self = (new self(0, $code)); - // $->code = $code; $self->rawLines = $lines; $self->tokens = array_fill(1, count($lines), []); @@ -78,6 +77,71 @@ class PHP8 extends PhpToken { 'line' => $currentLine, ]; + // Single new line, or starts with a new line with other whitespace + if (str_starts_with($char, "\n") && trim($char) === '') + { + $this->tokens[$currentLine][] = $current; + // $this->lineNum++; + + return; + } + + // Only return the first line of a multi-line token for this line array + if (str_contains($char, "\n")) + { + $chars = explode("\n", $char); + $current['original'] = [ + 'string' => $char, + 'lines' => $chars, + ]; + $current['char'] = array_shift($chars); + + // Add new lines for additional newline characters + $nextLine = $currentLine; + foreach ($chars as $char) + { + $nextLine++; + + if ( ! empty($char)) + { + $this->processStringToken($char, $nextLine); + } + } + } + $this->tokens[$currentLine][] = $current; } + + protected function processStringToken(string $token, int $startLine): void + { + $char = tabs_to_spaces($token); + $lineNumber = $this->findCorrectLine($char, $startLine) ?? $startLine; + + // Simple characters, usually delimiters or single character operators + $this->tokens[$lineNumber][] = [ + 'type' => -1, + 'typeName' => 'RAW', + 'char' => tabs_to_spaces($token), + 'line' => $lineNumber, + ]; + } + + private function findCorrectLine(string $search, int $rowOffset, int $searchLength = 5): ?int + { + $end = $rowOffset + $searchLength; + if ($end > count($this->rawLines)) + { + $end = count($this->rawLines); + } + + for ($i = $rowOffset; $i < $end; $i++) + { + if (str_contains($this->rawLines[$i], $search)) + { + return $i; + } + } + + return NULL; + } } \ No newline at end of file diff --git a/src/functions.php b/src/functions.php index 10cb86e..2692d77 100644 --- a/src/functions.php +++ b/src/functions.php @@ -14,7 +14,13 @@ use Aviat\Kilo\Enum\{C, Color, Highlight, KeyCode}; */ function has_tput(): bool { - return str_contains(shell_exec('type tput'), ' is '); + $cmd = shell_exec('type tput'); + if ( ! is_string($cmd)) + { + return FALSE; + } + + return str_contains($cmd, ' is '); } // ---------------------------------------------------------------------------- @@ -126,15 +132,16 @@ function is_digit(string $char): bool */ function is_space(string $char): bool { - $ws = [ + return match($char) { KeyCode::CARRIAGE_RETURN, KeyCode::FORM_FEED, KeyCode::NEWLINE, KeyCode::SPACE, KeyCode::TAB, - KeyCode::VERTICAL_TAB, - ]; - return is_ascii($char) && in_array($char, $ws, TRUE); + KeyCode::VERTICAL_TAB + => true, + default => false, + }; } // ---------------------------------------------------------------------------- @@ -477,3 +484,162 @@ function get_file_syntax_map(): array return $db; } + +function php_token_to_highlight(int $token): int +{ + return match($token) { + // Delimiters + T_ARRAY, + T_CURLY_OPEN, + T_DOLLAR_OPEN_CURLY_BRACES, + T_OPEN_TAG, + T_OPEN_TAG_WITH_ECHO, + T_CLOSE_TAG, + T_START_HEREDOC, + T_END_HEREDOC => Highlight::DELIMITER, + + // Number literals and magic constants + T_DIR, + T_TRAIT_C, + T_DNUMBER, + T_LNUMBER, + T_FILE, + T_FUNC_C => Highlight::NUMBER, + + // String literals + T_CONSTANT_ENCAPSED_STRING, T_ENCAPSED_AND_WHITESPACE => Highlight::STRING, + + // Simple variables + T_VARIABLE, T_STRING_VARNAME => Highlight::VARIABLE, + + // Operators + T_AS, + T_AND_EQUAL, + T_BOOLEAN_AND, + T_BOOLEAN_OR, + T_COALESCE, + T_COALESCE_EQUAL, + T_CONCAT_EQUAL, + T_DEC, + T_DIV_EQUAL, + T_DOUBLE_ARROW, + T_DOUBLE_COLON, + T_ELLIPSIS, + T_INC, + T_INSTANCEOF, + T_INSTEADOF, + T_IS_EQUAL, + T_IS_GREATER_OR_EQUAL, + T_IS_IDENTICAL, + T_IS_NOT_EQUAL, + T_IS_NOT_IDENTICAL, + T_IS_SMALLER_OR_EQUAL, + T_SPACESHIP, + T_LOGICAL_AND, + T_LOGICAL_OR, + T_LOGICAL_XOR, + T_MINUS_EQUAL, + T_MOD_EQUAL, + T_MUL_EQUAL, + T_NS_SEPARATOR, + T_NULLSAFE_OBJECT_OPERATOR, + T_OBJECT_OPERATOR, + T_OR_EQUAL, + T_PLUS_EQUAL, + T_POW, + T_POW_EQUAL, + T_SL, + T_SL_EQUAL, + T_SR, + T_SR_EQUAL, + T_XOR_EQUAL => Highlight::OPERATOR, + + // Keywords1 + T_ABSTRACT, + T_BREAK, + T_CASE, + T_CATCH, + T_CLASS, + T_CLONE, + T_CONST, + T_CONTINUE, + T_DECLARE, + T_DEFAULT, + T_DO, + T_ECHO, + T_ELSE, + T_ELSEIF, + T_EMPTY, + T_ENDDECLARE, + T_ENDFOR, + T_ENDFOREACH, + T_ENDIF, + T_ENDSWITCH, + T_ENDWHILE, + T_EVAL, + T_EXIT, + T_EXTENDS, + T_FINAL, + T_FINALLY, + T_FN, + T_FOR, + T_FOREACH, + T_FUNCTION, + T_GLOBAL, + T_GOTO, + T_HALT_COMPILER, + T_IF, + T_IMPLEMENTS, + T_INCLUDE, + T_INCLUDE_ONCE, + T_INTERFACE, + T_NAMESPACE, + T_MATCH, + T_NEW, + T_PRIVATE, + T_PUBLIC, + T_PROTECTED, + T_RETURN, + T_STATIC, + T_SWITCH, + T_THROW, + T_TRAIT, + T_TRY, + T_USE, + T_VAR, + T_WHILE, + T_YIELD, + T_YIELD_FROM => Highlight::KEYWORD1, + + // Not string literals, but identifiers, keywords, etc. + // T_STRING => Highlight::KEYWORD2, + + // Types and casts + T_ARRAY_CAST, + T_BOOL_CAST, + T_CALLABLE, + T_DOUBLE_CAST, + T_INT_CAST, + T_OBJECT_CAST, + T_STRING_CAST, + T_UNSET_CAST => Highlight::KEYWORD2, + + // Invalid syntax + T_BAD_CHARACTER => Highlight::INVALID, + default => Highlight::NORMAL, + }; +} + +function php_char_to_highlight(string $char): int +{ + return match ($char) { + // Delimiter characters + '[', ']', '{', '}', '(', ')', '"', "'" => Highlight::DELIMITER, + + // Single character operators + '?', ',', ';', ':', '^', '%', '+', '-', + '*', '/', '.', '|', '~', '>', '<', '=', '!' => Highlight::OPERATOR, + + default => Highlight::NORMAL, + }; +} diff --git a/tests/TermiosTest.php b/tests/TermiosTest.php index 674cf0e..9f4b797 100644 --- a/tests/TermiosTest.php +++ b/tests/TermiosTest.php @@ -8,6 +8,8 @@ use PHPUnit\Framework\TestCase; class TermiosTest extends TestCase { public function testEnableRawMode(): void { + $this->markTestSkipped(); + // There will be an exception, due to the way the test suite is run $this->expectException(TermiosException::class); $this->assertNotEquals(NULL, Termios::enableRawMode()); diff --git a/tests/Tokens/PHPTest.php b/tests/Tokens/PHP8Test.php similarity index 84% rename from tests/Tokens/PHPTest.php rename to tests/Tokens/PHP8Test.php index 3bccb27..7eb7244 100644 --- a/tests/Tokens/PHPTest.php +++ b/tests/Tokens/PHP8Test.php @@ -2,15 +2,15 @@ namespace Aviat\Kilo\Tests\Tokens; -use Aviat\Kilo\Tokens\PHP; +use Aviat\Kilo\Tokens\PHP8; use PHPUnit\Framework\TestCase; -class PHPTest extends TestCase { +class PHP8Test extends TestCase { public function testGetFileTokens(): void { $filename = realpath(__DIR__ . '/../../test.php'); $file = file_get_contents($filename); - $tokens = PHP::getFileTokens($filename); + $tokens = PHP8::getFileTokens($filename); $lines = explode("\n", $file); array_unshift($lines, ''); @@ -21,7 +21,7 @@ class PHPTest extends TestCase { public function testGetFileTokensEmptyFile(): void { $filename = __DIR__ . '/../../foobarbaz.php'; - $this->assertEmpty(PHP::getFileTokens($filename)); + $this->assertEmpty(PHP8::getFileTokens($filename)); } private function verifyTokens(array $tokens, array $lines): void @@ -46,7 +46,7 @@ class PHPTest extends TestCase { $this->assertIsArray($token, 'All outputted tokens should be arrays'); // Make sure the matched string for the token is on the correct line - if (strpos($lines[$index], trim($token['char'])) === FALSE) + if ( ! str_contains($lines[$index], trim($token['char']))) { $token['misplaced_line'] = $index; $misplacedTokens[] = $token; diff --git a/tests/__snapshots__/EditorTest__testOpenPHP__1.json b/tests/__snapshots__/EditorTest__testOpenPHP__1.json index 1752a23..4d1b6fa 100644 --- a/tests/__snapshots__/EditorTest__testOpenPHP__1.json +++ b/tests/__snapshots__/EditorTest__testOpenPHP__1.json @@ -370,14 +370,14 @@ 8, 7, 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, 0, 8, 8, @@ -617,14 +617,14 @@ 8, 7, 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, 0, 8, 8, @@ -867,6 +867,43 @@ ], "idx": 31 }, + { + "render": " $this?->x?->bar();", + "hl": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8, + 8, + 8, + 8, + 8, + 7, + 7, + 7, + 0, + 7, + 7, + 7, + 0, + 0, + 0, + 9, + 9, + 7 + ], + "idx": 32 + }, + { + "render": "", + "hl": [], + "idx": 33 + }, { "render": " $this->doNothing();", "hl": [ @@ -898,12 +935,12 @@ 9, 7 ], - "idx": 32 + "idx": 34 }, { "render": "", "hl": [], - "idx": 33 + "idx": 35 }, { "render": " $c = $a + $b;", @@ -930,7 +967,7 @@ 8, 7 ], - "idx": 34 + "idx": 36 }, { "render": " $a = $c - $b;", @@ -957,12 +994,12 @@ 8, 7 ], - "idx": 35 + "idx": 37 }, { "render": "", "hl": [], - "idx": 36 + "idx": 38 }, { "render": " $c = $a * $b;", @@ -989,7 +1026,7 @@ 8, 7 ], - "idx": 37 + "idx": 39 }, { "render": " $b = (int) ($c \/ $a);", @@ -1024,12 +1061,12 @@ 9, 7 ], - "idx": 38 + "idx": 40 }, { "render": "", "hl": [], - "idx": 39 + "idx": 41 }, { "render": " return $c;", @@ -1053,7 +1090,7 @@ 8, 7 ], - "idx": 40 + "idx": 42 }, { "render": " }", @@ -1064,19 +1101,500 @@ 0, 9 ], - "idx": 41 + "idx": 43 }, { "render": "}", "hl": [ 9 ], - "idx": 42 + "idx": 44 }, { "render": "", "hl": [], - "idx": 43 + "idx": 45 + }, + { + "render": "trait Baz {", + "hl": [ + 3, + 3, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 9 + ], + "idx": 46 + }, + { + "render": " public function about(): array", + "hl": [ + 0, + 0, + 0, + 0, + 3, + 3, + 3, + 3, + 3, + 3, + 0, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 9, + 9, + 7, + 0, + 9, + 9, + 9, + 9, + 9 + ], + "idx": 47 + }, + { + "render": " {", + "hl": [ + 0, + 0, + 0, + 0, + 9 + ], + "idx": 48 + }, + { + "render": " return [", + "hl": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 3, + 3, + 3, + 3, + 3, + 0, + 9 + ], + "idx": 49 + }, + { + "render": " '__CLASS__' => __CLASS__,", + "hl": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 0, + 7, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7 + ], + "idx": 50 + }, + { + "render": " '__DIR__' => __DIR__,", + "hl": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 0, + 7, + 7, + 0, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 7 + ], + "idx": 51 + }, + { + "render": " '__FILE__' => __FILE__,", + "hl": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 0, + 7, + 7, + 0, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 7 + ], + "idx": 52 + }, + { + "render": " '__FUNCTION__' => __FUNCTION__,", + "hl": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 0, + 7, + 7, + 0, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 7 + ], + "idx": 53 + }, + { + "render": " '__LINE__' => __LINE__,", + "hl": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 0, + 7, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7 + ], + "idx": 54 + }, + { + "render": " '__METHOD__' => __METHOD__,", + "hl": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 0, + 7, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7 + ], + "idx": 55 + }, + { + "render": " '__NAMESPACE__' => __NAMESPACE__,", + "hl": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 0, + 7, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7 + ], + "idx": 56 + }, + { + "render": " '__TRAIT__' => __TRAIT__,", + "hl": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 0, + 7, + 7, + 0, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 7 + ], + "idx": 57 + }, + { + "render": " ];", + "hl": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9, + 7 + ], + "idx": 58 + }, + { + "render": " }", + "hl": [ + 0, + 0, + 0, + 0, + 9 + ], + "idx": 59 + }, + { + "render": "}", + "hl": [ + 9 + ], + "idx": 60 + }, + { + "render": "", + "hl": [], + "idx": 61 }, { "render": "$square = fn (int $x) => $x ** 2;", @@ -1091,8 +1609,8 @@ 0, 7, 0, - 0, - 0, + 3, + 3, 0, 9, 4, @@ -1115,12 +1633,179 @@ 6, 7 ], - "idx": 44 + "idx": 62 }, { "render": "", "hl": [], - "idx": 45 + "idx": 63 + }, + { + "render": "foreach ([-1, 0, 1, 2] as $x)", + "hl": [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 0, + 9, + 9, + 7, + 6, + 7, + 0, + 6, + 7, + 0, + 6, + 7, + 0, + 6, + 9, + 0, + 7, + 7, + 0, + 8, + 8, + 9 + ], + "idx": 64 + }, + { + "render": "{", + "hl": [ + 9 + ], + "idx": 65 + }, + { + "render": " $not = match ($x) {", + "hl": [ + 0, + 0, + 0, + 0, + 8, + 8, + 8, + 8, + 0, + 7, + 0, + 3, + 3, + 3, + 3, + 3, + 0, + 9, + 8, + 8, + 9, + 0, + 9 + ], + "idx": 66 + }, + { + "render": " 0 => 1,", + "hl": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6, + 0, + 7, + 7, + 0, + 6, + 7 + ], + "idx": 67 + }, + { + "render": " 1,-1 => 0,", + "hl": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6, + 7, + 7, + 6, + 0, + 7, + 7, + 0, + 6, + 7 + ], + "idx": 68 + }, + { + "render": " default => 0,", + "hl": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 0, + 7, + 7, + 0, + 6, + 7 + ], + "idx": 69 + }, + { + "render": " };", + "hl": [ + 0, + 0, + 0, + 0, + 9, + 7 + ], + "idx": 70 + }, + { + "render": "}", + "hl": [ + 9 + ], + "idx": 71 + }, + { + "render": "", + "hl": [], + "idx": 72 }, { "render": "\/*", @@ -1128,7 +1813,7 @@ 2, 2 ], - "idx": 46 + "idx": 73 }, { "render": " * Multi-line comment", @@ -1155,7 +1840,7 @@ 2, 2 ], - "idx": 47 + "idx": 74 }, { "render": " *\/", @@ -1164,7 +1849,7 @@ 2, 2 ], - "idx": 48 + "idx": 75 }, { "render": "$foobar = new FooBar();", @@ -1193,12 +1878,12 @@ 9, 7 ], - "idx": 49 + "idx": 76 }, { "render": "", "hl": [], - "idx": 50 + "idx": 77 }, { "render": "$baz = ['a' => 'b'];", @@ -1224,12 +1909,12 @@ 9, 7 ], - "idx": 51 + "idx": 78 }, { "render": "", "hl": [], - "idx": 52 + "idx": 79 }, { "render": "\/\/ C++ style comment", @@ -1255,7 +1940,7 @@ 1, 1 ], - "idx": 53 + "idx": 80 }, { "render": "$x = 3;", @@ -1268,12 +1953,12 @@ 6, 7 ], - "idx": 54 + "idx": 81 }, { "render": "", "hl": [], - "idx": 55 + "idx": 82 }, { "render": "# Perl-style comment", @@ -1299,7 +1984,7 @@ 1, 1 ], - "idx": 56 + "idx": 83 }, { "render": "$y = [", @@ -1311,7 +1996,7 @@ 0, 9 ], - "idx": 57 + "idx": 84 }, { "render": " 1,", @@ -1323,7 +2008,7 @@ 6, 7 ], - "idx": 58 + "idx": 85 }, { "render": " 2,", @@ -1335,7 +2020,7 @@ 6, 7 ], - "idx": 59 + "idx": 86 }, { "render": " 3", @@ -1346,7 +2031,7 @@ 0, 6 ], - "idx": 60 + "idx": 87 }, { "render": "];", @@ -1354,12 +2039,12 @@ 9, 7 ], - "idx": 61 + "idx": 88 }, { "render": "", "hl": [], - "idx": 62 + "idx": 89 }, { "render": "\/\/ Multi-line ternary statement", @@ -1396,7 +2081,7 @@ 1, 1 ], - "idx": 63 + "idx": 90 }, { "render": "$q = ($x !== 2)", @@ -1417,7 +2102,7 @@ 6, 9 ], - "idx": 64 + "idx": 91 }, { "render": " ? 'yes'", @@ -1434,7 +2119,7 @@ 5, 5 ], - "idx": 65 + "idx": 92 }, { "render": " : 'no';", @@ -1451,12 +2136,12 @@ 5, 7 ], - "idx": 66 + "idx": 93 }, { "render": "", "hl": [], - "idx": 67 + "idx": 94 }, { "render": "\/*", @@ -1464,7 +2149,7 @@ 2, 2 ], - "idx": 68 + "idx": 95 }, { "render": "Heredoc", @@ -1477,7 +2162,7 @@ 2, 2 ], - "idx": 69 + "idx": 96 }, { "render": "*\/$z = $x + $y;", @@ -1498,7 +2183,7 @@ 8, 7 ], - "idx": 70 + "idx": 97 }, { "render": "$sql = <<{x}<\/foo>", @@ -1665,7 +2350,7 @@ 5, 5 ], - "idx": 77 + "idx": 104 }, { "render": "TEMPLATE;", @@ -1680,12 +2365,12 @@ 9, 7 ], - "idx": 78 + "idx": 105 }, { "render": "", "hl": [], - "idx": 79 + "idx": 106 }, { "render": "?>", @@ -1693,7 +2378,7 @@ 9, 9 ], - "idx": 80 + "idx": 107 }, { "render": "", @@ -1714,7 +2399,7 @@ 0, 0 ], - "idx": 81 + "idx": 108 }, { "render": "", @@ -1736,7 +2421,7 @@ 0, 0 ], - "idx": 82 + "idx": 109 }, { "render": "", @@ -1748,7 +2433,7 @@ 0, 0 ], - "idx": 83 + "idx": 110 }, { "render": "HTML<\/title>", @@ -1773,7 +2458,7 @@ 0, 0 ], - "idx": 84 + "idx": 111 }, { "render": "<\/head>", @@ -1786,7 +2471,7 @@ 0, 0 ], - "idx": 85 + "idx": 112 }, { "render": "<body>", @@ -1798,7 +2483,7 @@ 0, 0 ], - "idx": 86 + "idx": 113 }, { "render": "<h1><?= $_SERVER['HTTP_HOST'] ?><\/h1>", @@ -1841,7 +2526,7 @@ 0, 0 ], - "idx": 87 + "idx": 114 }, { "render": "<\/body>", @@ -1854,7 +2539,7 @@ 0, 0 ], - "idx": 88 + "idx": 115 }, { "render": "<\/html>", @@ -1867,7 +2552,7 @@ 0, 0 ], - "idx": 89 + "idx": 116 }, { "render": "<?php exit(); ?>", @@ -1878,10 +2563,10 @@ 9, 9, 9, - 0, - 0, - 0, - 0, + 3, + 3, + 3, + 3, 9, 9, 7, @@ -1889,7 +2574,7 @@ 9, 9 ], - "idx": 90 + "idx": 117 } ], "dirty": 0, @@ -2005,21 +2690,22 @@ "tokens": { "1": [ { - "type": 382, + "type": 390, "typeName": "T_OPEN_TAG", "char": "<?php ", "line": 1 }, { - "type": 332, + "type": 334, "typeName": "T_DECLARE", "char": "declare", "line": 1 }, { - "type": -1, - "typeName": "RAW", - "char": "(" + "type": 40, + "typeName": "(", + "char": "(", + "line": 1 }, { "type": 311, @@ -2028,9 +2714,10 @@ "line": 1 }, { - "type": -1, - "typeName": "RAW", - "char": "=" + "type": 61, + "typeName": "=", + "char": "=", + "line": 1 }, { "type": 309, @@ -2039,17 +2726,19 @@ "line": 1 }, { - "type": -1, - "typeName": "RAW", - "char": ")" + "type": 41, + "typeName": ")", + "char": ")", + "line": 1 }, { - "type": -1, - "typeName": "RAW", - "char": ";" + "type": 59, + "typeName": ";", + "char": ";", + "line": 1 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n\n", "line": 1 @@ -2058,13 +2747,13 @@ "2": [], "3": [ { - "type": 366, + "type": 368, "typeName": "T_INTERFACE", "char": "interface", "line": 3 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 3 @@ -2076,23 +2765,25 @@ "line": 3 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 3 }, { - "type": -1, - "typeName": "RAW", - "char": "{" + "type": 123, + "typeName": "{", + "char": "{", + "line": 3 }, { - "type": -1, - "typeName": "RAW", - "char": "}" + "type": 125, + "typeName": "}", + "char": "}", + "line": 3 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n\n", "line": 3 @@ -2101,25 +2792,25 @@ "4": [], "5": [ { - "type": 354, + "type": 356, "typeName": "T_ABSTRACT", "char": "abstract", "line": 5 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 5 }, { - "type": 364, + "type": 366, "typeName": "T_CLASS", "char": "class", "line": 5 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 5 @@ -2131,19 +2822,19 @@ "line": 5 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 5 }, { - "type": 368, + "type": 370, "typeName": "T_IMPLEMENTS", "char": "implements", "line": 5 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 5 @@ -2155,18 +2846,19 @@ "line": 5 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 5 }, { - "type": -1, - "typeName": "RAW", - "char": "{" + "type": 123, + "typeName": "{", + "char": "{", + "line": 5 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n ", "line": 5 @@ -2174,7 +2866,7 @@ ], "6": [ { - "type": 381, + "type": 389, "typeName": "T_DOC_COMMENT", "char": "\/**", "line": 6, @@ -2197,52 +2889,59 @@ { "type": -1, "typeName": "RAW", - "char": " * @param int $a" + "char": " * @param int $a", + "line": 7 } ], "8": [ { "type": -1, "typeName": "RAW", - "char": " * @param float $b" + "char": " * @param float $b", + "line": 8 } ], "9": [ { "type": -1, "typeName": "RAW", - "char": " * @param array $c" + "char": " * @param array $c", + "line": 9 } ], "10": [ { "type": -1, "typeName": "RAW", - "char": " * @param callable $d" + "char": " * @param callable $d", + "line": 10 } ], "11": [ { "type": -1, "typeName": "RAW", - "char": " * @param string $e" + "char": " * @param string $e", + "line": 11 } ], "12": [ { "type": -1, "typeName": "RAW", - "char": " * @return string" + "char": " * @return string", + "line": 12 } ], "13": [ { "type": -1, "typeName": "RAW", - "char": " *\/" + "char": " *\/", + "line": 13 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n ", "line": 13 @@ -2250,37 +2949,37 @@ ], "14": [ { - "type": 354, + "type": 356, "typeName": "T_ABSTRACT", "char": "abstract", "line": 14 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 14 }, { - "type": 358, + "type": 360, "typeName": "T_PUBLIC", "char": "public", "line": 14 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 14 }, { - "type": 342, + "type": 345, "typeName": "T_FUNCTION", "char": "function", "line": 14 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 14 @@ -2292,9 +2991,10 @@ "line": 14 }, { - "type": -1, - "typeName": "RAW", - "char": "(" + "type": 40, + "typeName": "(", + "char": "(", + "line": 14 }, { "type": 311, @@ -2303,24 +3003,25 @@ "line": 14 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 14 }, { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$a", "line": 14 }, { - "type": -1, - "typeName": "RAW", - "char": "," + "type": 44, + "typeName": ",", + "char": ",", + "line": 14 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 14 @@ -2332,82 +3033,85 @@ "line": 14 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 14 }, { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$b", "line": 14 }, { - "type": -1, - "typeName": "RAW", - "char": "," + "type": 44, + "typeName": ",", + "char": ",", + "line": 14 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 14 }, { - "type": 371, + "type": 373, "typeName": "T_ARRAY", "char": "array", "line": 14 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 14 }, { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$c", "line": 14 }, { - "type": -1, - "typeName": "RAW", - "char": "," + "type": 44, + "typeName": ",", + "char": ",", + "line": 14 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 14 }, { - "type": 372, + "type": 374, "typeName": "T_CALLABLE", "char": "callable", "line": 14 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 14 }, { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$d", "line": 14 }, { - "type": -1, - "typeName": "RAW", - "char": "," + "type": 44, + "typeName": ",", + "char": ",", + "line": 14 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 14 @@ -2419,29 +3123,31 @@ "line": 14 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 14 }, { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$e", "line": 14 }, { - "type": -1, - "typeName": "RAW", - "char": ")" + "type": 41, + "typeName": ")", + "char": ")", + "line": 14 }, { - "type": -1, - "typeName": "RAW", - "char": ":" + "type": 58, + "typeName": ":", + "char": ":", + "line": 14 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 14 @@ -2453,12 +3159,13 @@ "line": 14 }, { - "type": -1, - "typeName": "RAW", - "char": ";" + "type": 59, + "typeName": ";", + "char": ";", + "line": 14 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n\n ", "line": 14 @@ -2467,25 +3174,25 @@ "15": [], "16": [ { - "type": 357, + "type": 359, "typeName": "T_PROTECTED", "char": "protected", "line": 16 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 16 }, { - "type": 342, + "type": 345, "typeName": "T_FUNCTION", "char": "function", "line": 16 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 16 @@ -2497,22 +3204,25 @@ "line": 16 }, { - "type": -1, - "typeName": "RAW", - "char": "(" + "type": 40, + "typeName": "(", + "char": "(", + "line": 16 }, { - "type": -1, - "typeName": "RAW", - "char": ")" + "type": 41, + "typeName": ")", + "char": ")", + "line": 16 }, { - "type": -1, - "typeName": "RAW", - "char": ":" + "type": 58, + "typeName": ":", + "char": ":", + "line": 16 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 16 @@ -2524,23 +3234,25 @@ "line": 16 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 16 }, { - "type": -1, - "typeName": "RAW", - "char": "{" + "type": 123, + "typeName": "{", + "char": "{", + "line": 16 }, { - "type": -1, - "typeName": "RAW", - "char": "}" + "type": 125, + "typeName": "}", + "char": "}", + "line": 16 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n", "line": 16 @@ -2548,12 +3260,13 @@ ], "17": [ { - "type": -1, - "typeName": "RAW", - "char": "}" + "type": 125, + "typeName": "}", + "char": "}", + "line": 17 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n\n", "line": 17 @@ -2562,7 +3275,7 @@ "18": [], "19": [ { - "type": 381, + "type": 389, "typeName": "T_DOC_COMMENT", "char": "\/**", "line": 19, @@ -2580,17 +3293,19 @@ { "type": -1, "typeName": "RAW", - "char": " * Docblock comment" + "char": " * Docblock comment", + "line": 20 } ], "21": [ { "type": -1, "typeName": "RAW", - "char": " *\/" + "char": " *\/", + "line": 21 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n", "line": 21 @@ -2598,13 +3313,13 @@ ], "22": [ { - "type": 364, + "type": 366, "typeName": "T_CLASS", "char": "class", "line": 22 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 22 @@ -2616,19 +3331,19 @@ "line": 22 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 22 }, { - "type": 367, + "type": 369, "typeName": "T_EXTENDS", "char": "extends", "line": 22 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 22 @@ -2640,19 +3355,19 @@ "line": 22 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 22 }, { - "type": 368, + "type": 370, "typeName": "T_IMPLEMENTS", "char": "implements", "line": 22 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 22 @@ -2664,18 +3379,19 @@ "line": 22 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 22 }, { - "type": -1, - "typeName": "RAW", - "char": "{" + "type": 123, + "typeName": "{", + "char": "{", + "line": 22 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n ", "line": 22 @@ -2683,25 +3399,25 @@ ], "23": [ { - "type": 358, + "type": 360, "typeName": "T_PUBLIC", "char": "public", "line": 23 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 23 }, { - "type": 342, + "type": 345, "typeName": "T_FUNCTION", "char": "function", "line": 23 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 23 @@ -2713,9 +3429,10 @@ "line": 23 }, { - "type": -1, - "typeName": "RAW", - "char": "(" + "type": 40, + "typeName": "(", + "char": "(", + "line": 23 }, { "type": 311, @@ -2724,24 +3441,25 @@ "line": 23 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 23 }, { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$a", "line": 23 }, { - "type": -1, - "typeName": "RAW", - "char": "," + "type": 44, + "typeName": ",", + "char": ",", + "line": 23 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 23 @@ -2753,139 +3471,85 @@ "line": 23 }, { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 23 - }, - { - "type": 312, - "typeName": "T_VARIABLE", - "char": "$b", - "line": 23 - }, - { - "type": -1, - "typeName": "RAW", - "char": "," - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 23 - }, - { - "type": 371, - "typeName": "T_ARRAY", - "char": "array", - "line": 23 - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 23 - }, - { - "type": 312, - "typeName": "T_VARIABLE", - "char": "$c", - "line": 23 - }, - { - "type": -1, - "typeName": "RAW", - "char": "," - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 23 - }, - { - "type": 372, - "typeName": "T_CALLABLE", - "char": "callable", - "line": 23 - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 23 - }, - { - "type": 312, - "typeName": "T_VARIABLE", - "char": "$d", - "line": 23 - }, - { - "type": -1, - "typeName": "RAW", - "char": "," - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 23 - }, - { - "type": 311, - "typeName": "T_STRING", - "char": "string", - "line": 23 - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 23 - }, - { - "type": 312, - "typeName": "T_VARIABLE", - "char": "$e", - "line": 23 - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 23 - }, - { - "type": -1, - "typeName": "RAW", - "char": "=" - }, - { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 23 }, { "type": 315, - "typeName": "T_CONSTANT_ENCAPSED_STRING", - "char": "'default'", + "typeName": "T_VARIABLE", + "char": "$b", "line": 23 }, { - "type": -1, - "typeName": "RAW", - "char": ")" + "type": 44, + "typeName": ",", + "char": ",", + "line": 23 }, { - "type": -1, - "typeName": "RAW", - "char": ":" + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 23 }, { - "type": 385, + "type": 373, + "typeName": "T_ARRAY", + "char": "array", + "line": 23 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 23 + }, + { + "type": 315, + "typeName": "T_VARIABLE", + "char": "$c", + "line": 23 + }, + { + "type": 44, + "typeName": ",", + "char": ",", + "line": 23 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 23 + }, + { + "type": 374, + "typeName": "T_CALLABLE", + "char": "callable", + "line": 23 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 23 + }, + { + "type": 315, + "typeName": "T_VARIABLE", + "char": "$d", + "line": 23 + }, + { + "type": 44, + "typeName": ",", + "char": ",", + "line": 23 + }, + { + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 23 @@ -2897,7 +3561,67 @@ "line": 23 }, { - "type": 385, + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 23 + }, + { + "type": 315, + "typeName": "T_VARIABLE", + "char": "$e", + "line": 23 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 23 + }, + { + "type": 61, + "typeName": "=", + "char": "=", + "line": 23 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 23 + }, + { + "type": 318, + "typeName": "T_CONSTANT_ENCAPSED_STRING", + "char": "'default'", + "line": 23 + }, + { + "type": 41, + "typeName": ")", + "char": ")", + "line": 23 + }, + { + "type": 58, + "typeName": ":", + "char": ":", + "line": 23 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 23 + }, + { + "type": 311, + "typeName": "T_STRING", + "char": "string", + "line": 23 + }, + { + "type": 393, "typeName": "T_WHITESPACE", "char": "\n ", "line": 23 @@ -2905,12 +3629,13 @@ ], "24": [ { - "type": -1, - "typeName": "RAW", - "char": "{" + "type": 123, + "typeName": "{", + "char": "{", + "line": 24 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n ", "line": 24 @@ -2918,24 +3643,25 @@ ], "25": [ { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$cstr", "line": 25 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 25 }, { - "type": -1, - "typeName": "RAW", - "char": "=" + "type": 61, + "typeName": "=", + "char": "=", + "line": 25 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 25 @@ -2947,23 +3673,25 @@ "line": 25 }, { - "type": -1, - "typeName": "RAW", - "char": "(" + "type": 40, + "typeName": "(", + "char": "(", + "line": 25 }, { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$c", "line": 25 }, { - "type": -1, - "typeName": "RAW", - "char": "," + "type": 44, + "typeName": ",", + "char": ",", + "line": 25 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 25 @@ -2975,17 +3703,19 @@ "line": 25 }, { - "type": -1, - "typeName": "RAW", - "char": ")" + "type": 41, + "typeName": ")", + "char": ")", + "line": 25 }, { - "type": -1, - "typeName": "RAW", - "char": ";" + "type": 59, + "typeName": ";", + "char": ";", + "line": 25 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n ", "line": 25 @@ -2993,28 +3723,31 @@ ], "26": [ { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$d", "line": 26 }, { - "type": -1, - "typeName": "RAW", - "char": "(" + "type": 40, + "typeName": "(", + "char": "(", + "line": 26 }, { - "type": -1, - "typeName": "RAW", - "char": ")" + "type": 41, + "typeName": ")", + "char": ")", + "line": 26 }, { - "type": -1, - "typeName": "RAW", - "char": ";" + "type": 59, + "typeName": ";", + "char": ";", + "line": 26 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n\n ", "line": 26 @@ -3023,103 +3756,109 @@ "27": [], "28": [ { - "type": 345, + "type": 348, "typeName": "T_RETURN", "char": "return", "line": 28 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 28 }, { - "type": -1, - "typeName": "RAW", - "char": "\"" + "type": 34, + "typeName": "\"", + "char": "\"", + "line": 28 }, { - "type": 389, + "type": 397, "typeName": "T_CURLY_OPEN", "char": "{", "line": 28 }, { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$a", "line": 28 }, { - "type": -1, - "typeName": "RAW", - "char": "}" + "type": 125, + "typeName": "}", + "char": "}", + "line": 28 }, { - "type": 314, + "type": 317, "typeName": "T_ENCAPSED_AND_WHITESPACE", "char": ", ", "line": 28 }, { - "type": 388, + "type": 396, "typeName": "T_DOLLAR_OPEN_CURLY_BRACES", "char": "${", "line": 28 }, { - "type": 316, + "type": 319, "typeName": "T_STRING_VARNAME", "char": "b", "line": 28 }, { - "type": -1, - "typeName": "RAW", - "char": "}" + "type": 125, + "typeName": "}", + "char": "}", + "line": 28 }, { - "type": 314, + "type": 317, "typeName": "T_ENCAPSED_AND_WHITESPACE", "char": ", ", "line": 28 }, { - "type": -1, - "typeName": "RAW", - "char": "\"" + "type": 34, + "typeName": "\"", + "char": "\"", + "line": 28 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 28 }, { - "type": -1, - "typeName": "RAW", - "char": "." + "type": 46, + "typeName": ".", + "char": ".", + "line": 28 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 28 }, { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$cstr", "line": 28 }, { - "type": -1, - "typeName": "RAW", - "char": ";" + "type": 59, + "typeName": ";", + "char": ";", + "line": 28 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n ", "line": 28 @@ -3127,12 +3866,13 @@ ], "29": [ { - "type": -1, - "typeName": "RAW", - "char": "}" + "type": 125, + "typeName": "}", + "char": "}", + "line": 29 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n\n ", "line": 29 @@ -3141,25 +3881,25 @@ "30": [], "31": [ { - "type": 356, + "type": 358, "typeName": "T_PRIVATE", "char": "private", "line": 31 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 31 }, { - "type": 342, + "type": 345, "typeName": "T_FUNCTION", "char": "function", "line": 31 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 31 @@ -3171,9 +3911,10 @@ "line": 31 }, { - "type": -1, - "typeName": "RAW", - "char": "(" + "type": 40, + "typeName": "(", + "char": "(", + "line": 31 }, { "type": 311, @@ -3182,24 +3923,25 @@ "line": 31 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 31 }, { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$a", "line": 31 }, { - "type": -1, - "typeName": "RAW", - "char": "," + "type": 44, + "typeName": ",", + "char": ",", + "line": 31 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 31 @@ -3211,29 +3953,31 @@ "line": 31 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 31 }, { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$b", "line": 31 }, { - "type": -1, - "typeName": "RAW", - "char": ")" + "type": 41, + "typeName": ")", + "char": ")", + "line": 31 }, { - "type": -1, - "typeName": "RAW", - "char": ":" + "type": 58, + "typeName": ":", + "char": ":", + "line": 31 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", "line": 31 @@ -3245,7 +3989,7 @@ "line": 31 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n ", "line": 31 @@ -3253,12 +3997,13 @@ ], "32": [ { - "type": -1, - "typeName": "RAW", - "char": "{" + "type": 123, + "typeName": "{", + "char": "{", + "line": 32 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n ", "line": 32 @@ -3266,40 +4011,55 @@ ], "33": [ { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$this", "line": 33 }, { - "type": 369, - "typeName": "T_OBJECT_OPERATOR", - "char": "->", + "type": 387, + "typeName": "T_NULLSAFE_OBJECT_OPERATOR", + "char": "?->", "line": 33 }, { "type": 311, "typeName": "T_STRING", - "char": "doNothing", + "char": "x", "line": 33 }, { - "type": -1, - "typeName": "RAW", - "char": "(" + "type": 387, + "typeName": "T_NULLSAFE_OBJECT_OPERATOR", + "char": "?->", + "line": 33 }, { - "type": -1, - "typeName": "RAW", - "char": ")" + "type": 311, + "typeName": "T_STRING", + "char": "bar", + "line": 33 }, { - "type": -1, - "typeName": "RAW", - "char": ";" + "type": 40, + "typeName": "(", + "char": "(", + "line": 33 }, { - "type": 385, + "type": 41, + "typeName": ")", + "char": ")", + "line": 33 + }, + { + "type": 59, + "typeName": ";", + "char": ";", + "line": 33 + }, + { + "type": 393, "typeName": "T_WHITESPACE", "char": "\n\n ", "line": 33 @@ -3308,465 +4068,402 @@ "34": [], "35": [ { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", - "char": "$c", + "char": "$this", "line": 35 }, { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", + "type": 386, + "typeName": "T_OBJECT_OPERATOR", + "char": "->", "line": 35 }, - { - "type": -1, - "typeName": "RAW", - "char": "=" - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 35 - }, - { - "type": 312, - "typeName": "T_VARIABLE", - "char": "$a", - "line": 35 - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 35 - }, - { - "type": -1, - "typeName": "RAW", - "char": "+" - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 35 - }, - { - "type": 312, - "typeName": "T_VARIABLE", - "char": "$b", - "line": 35 - }, - { - "type": -1, - "typeName": "RAW", - "char": ";" - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": "\n ", - "line": 35 - } - ], - "36": [ - { - "type": 312, - "typeName": "T_VARIABLE", - "char": "$a", - "line": 36 - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 36 - }, - { - "type": -1, - "typeName": "RAW", - "char": "=" - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 36 - }, - { - "type": 312, - "typeName": "T_VARIABLE", - "char": "$c", - "line": 36 - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 36 - }, - { - "type": -1, - "typeName": "RAW", - "char": "-" - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 36 - }, - { - "type": 312, - "typeName": "T_VARIABLE", - "char": "$b", - "line": 36 - }, - { - "type": -1, - "typeName": "RAW", - "char": ";" - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": "\n\n ", - "line": 36 - } - ], - "37": [], - "38": [ - { - "type": 312, - "typeName": "T_VARIABLE", - "char": "$c", - "line": 38 - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 38 - }, - { - "type": -1, - "typeName": "RAW", - "char": "=" - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 38 - }, - { - "type": 312, - "typeName": "T_VARIABLE", - "char": "$a", - "line": 38 - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 38 - }, - { - "type": -1, - "typeName": "RAW", - "char": "*" - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 38 - }, - { - "type": 312, - "typeName": "T_VARIABLE", - "char": "$b", - "line": 38 - }, - { - "type": -1, - "typeName": "RAW", - "char": ";" - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": "\n ", - "line": 38 - } - ], - "39": [ - { - "type": 312, - "typeName": "T_VARIABLE", - "char": "$b", - "line": 39 - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 39 - }, - { - "type": -1, - "typeName": "RAW", - "char": "=" - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 39 - }, - { - "type": 296, - "typeName": "T_INT_CAST", - "char": "(int)", - "line": 39 - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 39 - }, - { - "type": -1, - "typeName": "RAW", - "char": "(" - }, - { - "type": 312, - "typeName": "T_VARIABLE", - "char": "$c", - "line": 39 - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 39 - }, - { - "type": -1, - "typeName": "RAW", - "char": "\/" - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 39 - }, - { - "type": 312, - "typeName": "T_VARIABLE", - "char": "$a", - "line": 39 - }, - { - "type": -1, - "typeName": "RAW", - "char": ")" - }, - { - "type": -1, - "typeName": "RAW", - "char": ";" - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": "\n\n ", - "line": 39 - } - ], - "40": [], - "41": [ - { - "type": 345, - "typeName": "T_RETURN", - "char": "return", - "line": 41 - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 41 - }, - { - "type": 312, - "typeName": "T_VARIABLE", - "char": "$c", - "line": 41 - }, - { - "type": -1, - "typeName": "RAW", - "char": ";" - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": "\n ", - "line": 41 - } - ], - "42": [ - { - "type": -1, - "typeName": "RAW", - "char": "}" - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": "\n", - "line": 42 - } - ], - "43": [ - { - "type": -1, - "typeName": "RAW", - "char": "}" - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": "\n\n", - "line": 43 - } - ], - "44": [], - "45": [ - { - "type": 312, - "typeName": "T_VARIABLE", - "char": "$square", - "line": 45 - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 45 - }, - { - "type": -1, - "typeName": "RAW", - "char": "=" - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 45 - }, - { - "type": 343, - "typeName": "T_FN", - "char": "fn", - "line": 45 - }, - { - "type": 385, - "typeName": "T_WHITESPACE", - "char": " ", - "line": 45 - }, - { - "type": -1, - "typeName": "RAW", - "char": "(" - }, { "type": 311, "typeName": "T_STRING", - "char": "int", - "line": 45 + "char": "doNothing", + "line": 35 }, { - "type": 385, + "type": 40, + "typeName": "(", + "char": "(", + "line": 35 + }, + { + "type": 41, + "typeName": ")", + "char": ")", + "line": 35 + }, + { + "type": 59, + "typeName": ";", + "char": ";", + "line": 35 + }, + { + "type": 393, "typeName": "T_WHITESPACE", - "char": " ", - "line": 45 - }, + "char": "\n\n ", + "line": 35 + } + ], + "36": [], + "37": [ { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", - "char": "$x", - "line": 45 + "char": "$c", + "line": 37 }, { - "type": -1, - "typeName": "RAW", - "char": ")" - }, - { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 45 + "line": 37 }, { - "type": 268, - "typeName": "T_DOUBLE_ARROW", - "char": "=>", - "line": 45 + "type": 61, + "typeName": "=", + "char": "=", + "line": 37 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 45 + "line": 37 }, { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", - "char": "$x", - "line": 45 + "char": "$a", + "line": 37 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 45 + "line": 37 }, { - "type": 303, - "typeName": "T_POW", - "char": "**", - "line": 45 + "type": 43, + "typeName": "+", + "char": "+", + "line": 37 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", + "line": 37 + }, + { + "type": 315, + "typeName": "T_VARIABLE", + "char": "$b", + "line": 37 + }, + { + "type": 59, + "typeName": ";", + "char": ";", + "line": 37 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n ", + "line": 37 + } + ], + "38": [ + { + "type": 315, + "typeName": "T_VARIABLE", + "char": "$a", + "line": 38 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 38 + }, + { + "type": 61, + "typeName": "=", + "char": "=", + "line": 38 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 38 + }, + { + "type": 315, + "typeName": "T_VARIABLE", + "char": "$c", + "line": 38 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 38 + }, + { + "type": 45, + "typeName": "-", + "char": "-", + "line": 38 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 38 + }, + { + "type": 315, + "typeName": "T_VARIABLE", + "char": "$b", + "line": 38 + }, + { + "type": 59, + "typeName": ";", + "char": ";", + "line": 38 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n\n ", + "line": 38 + } + ], + "39": [], + "40": [ + { + "type": 315, + "typeName": "T_VARIABLE", + "char": "$c", + "line": 40 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 40 + }, + { + "type": 61, + "typeName": "=", + "char": "=", + "line": 40 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 40 + }, + { + "type": 315, + "typeName": "T_VARIABLE", + "char": "$a", + "line": 40 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 40 + }, + { + "type": 42, + "typeName": "*", + "char": "*", + "line": 40 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 40 + }, + { + "type": 315, + "typeName": "T_VARIABLE", + "char": "$b", + "line": 40 + }, + { + "type": 59, + "typeName": ";", + "char": ";", + "line": 40 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n ", + "line": 40 + } + ], + "41": [ + { + "type": 315, + "typeName": "T_VARIABLE", + "char": "$b", + "line": 41 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 41 + }, + { + "type": 61, + "typeName": "=", + "char": "=", + "line": 41 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 41 + }, + { + "type": 297, + "typeName": "T_INT_CAST", + "char": "(int)", + "line": 41 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 41 + }, + { + "type": 40, + "typeName": "(", + "char": "(", + "line": 41 + }, + { + "type": 315, + "typeName": "T_VARIABLE", + "char": "$c", + "line": 41 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 41 + }, + { + "type": 47, + "typeName": "\/", + "char": "\/", + "line": 41 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 41 + }, + { + "type": 315, + "typeName": "T_VARIABLE", + "char": "$a", + "line": 41 + }, + { + "type": 41, + "typeName": ")", + "char": ")", + "line": 41 + }, + { + "type": 59, + "typeName": ";", + "char": ";", + "line": 41 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n\n ", + "line": 41 + } + ], + "42": [], + "43": [ + { + "type": 348, + "typeName": "T_RETURN", + "char": "return", + "line": 43 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 43 + }, + { + "type": 315, + "typeName": "T_VARIABLE", + "char": "$c", + "line": 43 + }, + { + "type": 59, + "typeName": ";", + "char": ";", + "line": 43 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n ", + "line": 43 + } + ], + "44": [ + { + "type": 125, + "typeName": "}", + "char": "}", + "line": 44 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n", + "line": 44 + } + ], + "45": [ + { + "type": 125, + "typeName": "}", + "char": "}", "line": 45 }, { - "type": 309, - "typeName": "T_LNUMBER", - "char": "2", - "line": 45 - }, - { - "type": -1, - "typeName": "RAW", - "char": ";" - }, - { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n\n", "line": 45 @@ -3774,11 +4471,1094 @@ ], "46": [], "47": [ + { + "type": 367, + "typeName": "T_TRAIT", + "char": "trait", + "line": 47 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 47 + }, + { + "type": 311, + "typeName": "T_STRING", + "char": "Baz", + "line": 47 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 47 + }, + { + "type": 123, + "typeName": "{", + "char": "{", + "line": 47 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n ", + "line": 47 + } + ], + "48": [ + { + "type": 360, + "typeName": "T_PUBLIC", + "char": "public", + "line": 48 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 48 + }, + { + "type": 345, + "typeName": "T_FUNCTION", + "char": "function", + "line": 48 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 48 + }, + { + "type": 311, + "typeName": "T_STRING", + "char": "about", + "line": 48 + }, + { + "type": 40, + "typeName": "(", + "char": "(", + "line": 48 + }, + { + "type": 41, + "typeName": ")", + "char": ")", + "line": 48 + }, + { + "type": 58, + "typeName": ":", + "char": ":", + "line": 48 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 48 + }, + { + "type": 373, + "typeName": "T_ARRAY", + "char": "array", + "line": 48 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n ", + "line": 48 + } + ], + "49": [ + { + "type": 123, + "typeName": "{", + "char": "{", + "line": 49 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n ", + "line": 49 + } + ], + "50": [ + { + "type": 348, + "typeName": "T_RETURN", + "char": "return", + "line": 50 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 50 + }, + { + "type": 91, + "typeName": "[", + "char": "[", + "line": 50 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n ", + "line": 50 + } + ], + "51": [ + { + "type": 318, + "typeName": "T_CONSTANT_ENCAPSED_STRING", + "char": "'__CLASS__'", + "line": 51 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 51 + }, + { + "type": 269, + "typeName": "T_DOUBLE_ARROW", + "char": "=>", + "line": 51 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 51 + }, + { + "type": 378, + "typeName": "T_CLASS_C", + "char": "__CLASS__", + "line": 51 + }, + { + "type": 44, + "typeName": ",", + "char": ",", + "line": 51 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n ", + "line": 51 + } + ], + "52": [ + { + "type": 318, + "typeName": "T_CONSTANT_ENCAPSED_STRING", + "char": "'__DIR__'", + "line": 52 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 52 + }, + { + "type": 269, + "typeName": "T_DOUBLE_ARROW", + "char": "=>", + "line": 52 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 52 + }, + { + "type": 377, + "typeName": "T_DIR", + "char": "__DIR__", + "line": 52 + }, + { + "type": 44, + "typeName": ",", + "char": ",", + "line": 52 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n ", + "line": 52 + } + ], + "53": [ + { + "type": 318, + "typeName": "T_CONSTANT_ENCAPSED_STRING", + "char": "'__FILE__'", + "line": 53 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 53 + }, + { + "type": 269, + "typeName": "T_DOUBLE_ARROW", + "char": "=>", + "line": 53 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 53 + }, + { + "type": 376, + "typeName": "T_FILE", + "char": "__FILE__", + "line": 53 + }, + { + "type": 44, + "typeName": ",", + "char": ",", + "line": 53 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n ", + "line": 53 + } + ], + "54": [ + { + "type": 318, + "typeName": "T_CONSTANT_ENCAPSED_STRING", + "char": "'__FUNCTION__'", + "line": 54 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 54 + }, + { + "type": 269, + "typeName": "T_DOUBLE_ARROW", + "char": "=>", + "line": 54 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 54 + }, + { + "type": 381, + "typeName": "T_FUNC_C", + "char": "__FUNCTION__", + "line": 54 + }, + { + "type": 44, + "typeName": ",", + "char": ",", + "line": 54 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n ", + "line": 54 + } + ], + "55": [ + { + "type": 318, + "typeName": "T_CONSTANT_ENCAPSED_STRING", + "char": "'__LINE__'", + "line": 55 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 55 + }, + { + "type": 269, + "typeName": "T_DOUBLE_ARROW", + "char": "=>", + "line": 55 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 55 + }, + { + "type": 375, + "typeName": "T_LINE", + "char": "__LINE__", + "line": 55 + }, + { + "type": 44, + "typeName": ",", + "char": ",", + "line": 55 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n ", + "line": 55 + } + ], + "56": [ + { + "type": 318, + "typeName": "T_CONSTANT_ENCAPSED_STRING", + "char": "'__METHOD__'", + "line": 56 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 56 + }, + { + "type": 269, + "typeName": "T_DOUBLE_ARROW", + "char": "=>", + "line": 56 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 56 + }, { "type": 380, + "typeName": "T_METHOD_C", + "char": "__METHOD__", + "line": 56 + }, + { + "type": 44, + "typeName": ",", + "char": ",", + "line": 56 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n ", + "line": 56 + } + ], + "57": [ + { + "type": 318, + "typeName": "T_CONSTANT_ENCAPSED_STRING", + "char": "'__NAMESPACE__'", + "line": 57 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 57 + }, + { + "type": 269, + "typeName": "T_DOUBLE_ARROW", + "char": "=>", + "line": 57 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 57 + }, + { + "type": 382, + "typeName": "T_NS_C", + "char": "__NAMESPACE__", + "line": 57 + }, + { + "type": 44, + "typeName": ",", + "char": ",", + "line": 57 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n ", + "line": 57 + } + ], + "58": [ + { + "type": 318, + "typeName": "T_CONSTANT_ENCAPSED_STRING", + "char": "'__TRAIT__'", + "line": 58 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 58 + }, + { + "type": 269, + "typeName": "T_DOUBLE_ARROW", + "char": "=>", + "line": 58 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 58 + }, + { + "type": 379, + "typeName": "T_TRAIT_C", + "char": "__TRAIT__", + "line": 58 + }, + { + "type": 44, + "typeName": ",", + "char": ",", + "line": 58 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n ", + "line": 58 + } + ], + "59": [ + { + "type": 93, + "typeName": "]", + "char": "]", + "line": 59 + }, + { + "type": 59, + "typeName": ";", + "char": ";", + "line": 59 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n ", + "line": 59 + } + ], + "60": [ + { + "type": 125, + "typeName": "}", + "char": "}", + "line": 60 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n", + "line": 60 + } + ], + "61": [ + { + "type": 125, + "typeName": "}", + "char": "}", + "line": 61 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n\n", + "line": 61 + } + ], + "62": [], + "63": [ + { + "type": 315, + "typeName": "T_VARIABLE", + "char": "$square", + "line": 63 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 63 + }, + { + "type": 61, + "typeName": "=", + "char": "=", + "line": 63 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 63 + }, + { + "type": 346, + "typeName": "T_FN", + "char": "fn", + "line": 63 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 63 + }, + { + "type": 40, + "typeName": "(", + "char": "(", + "line": 63 + }, + { + "type": 311, + "typeName": "T_STRING", + "char": "int", + "line": 63 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 63 + }, + { + "type": 315, + "typeName": "T_VARIABLE", + "char": "$x", + "line": 63 + }, + { + "type": 41, + "typeName": ")", + "char": ")", + "line": 63 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 63 + }, + { + "type": 269, + "typeName": "T_DOUBLE_ARROW", + "char": "=>", + "line": 63 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 63 + }, + { + "type": 315, + "typeName": "T_VARIABLE", + "char": "$x", + "line": 63 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 63 + }, + { + "type": 304, + "typeName": "T_POW", + "char": "**", + "line": 63 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 63 + }, + { + "type": 309, + "typeName": "T_LNUMBER", + "char": "2", + "line": 63 + }, + { + "type": 59, + "typeName": ";", + "char": ";", + "line": 63 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n\n", + "line": 63 + } + ], + "64": [], + "65": [ + { + "type": 332, + "typeName": "T_FOREACH", + "char": "foreach", + "line": 65 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 65 + }, + { + "type": 40, + "typeName": "(", + "char": "(", + "line": 65 + }, + { + "type": 91, + "typeName": "[", + "char": "[", + "line": 65 + }, + { + "type": 45, + "typeName": "-", + "char": "-", + "line": 65 + }, + { + "type": 309, + "typeName": "T_LNUMBER", + "char": "1", + "line": 65 + }, + { + "type": 44, + "typeName": ",", + "char": ",", + "line": 65 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 65 + }, + { + "type": 309, + "typeName": "T_LNUMBER", + "char": "0", + "line": 65 + }, + { + "type": 44, + "typeName": ",", + "char": ",", + "line": 65 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 65 + }, + { + "type": 309, + "typeName": "T_LNUMBER", + "char": "1", + "line": 65 + }, + { + "type": 44, + "typeName": ",", + "char": ",", + "line": 65 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 65 + }, + { + "type": 309, + "typeName": "T_LNUMBER", + "char": "2", + "line": 65 + }, + { + "type": 93, + "typeName": "]", + "char": "]", + "line": 65 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 65 + }, + { + "type": 336, + "typeName": "T_AS", + "char": "as", + "line": 65 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 65 + }, + { + "type": 315, + "typeName": "T_VARIABLE", + "char": "$x", + "line": 65 + }, + { + "type": 41, + "typeName": ")", + "char": ")", + "line": 65 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n", + "line": 65 + } + ], + "66": [ + { + "type": 123, + "typeName": "{", + "char": "{", + "line": 66 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n ", + "line": 66 + } + ], + "67": [ + { + "type": 315, + "typeName": "T_VARIABLE", + "char": "$not", + "line": 67 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 67 + }, + { + "type": 61, + "typeName": "=", + "char": "=", + "line": 67 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 67 + }, + { + "type": 341, + "typeName": "T_MATCH", + "char": "match", + "line": 67 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 67 + }, + { + "type": 40, + "typeName": "(", + "char": "(", + "line": 67 + }, + { + "type": 315, + "typeName": "T_VARIABLE", + "char": "$x", + "line": 67 + }, + { + "type": 41, + "typeName": ")", + "char": ")", + "line": 67 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 67 + }, + { + "type": 123, + "typeName": "{", + "char": "{", + "line": 67 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n ", + "line": 67 + } + ], + "68": [ + { + "type": 309, + "typeName": "T_LNUMBER", + "char": "0", + "line": 68 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 68 + }, + { + "type": 269, + "typeName": "T_DOUBLE_ARROW", + "char": "=>", + "line": 68 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 68 + }, + { + "type": 309, + "typeName": "T_LNUMBER", + "char": "1", + "line": 68 + }, + { + "type": 44, + "typeName": ",", + "char": ",", + "line": 68 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n ", + "line": 68 + } + ], + "69": [ + { + "type": 309, + "typeName": "T_LNUMBER", + "char": "1", + "line": 69 + }, + { + "type": 44, + "typeName": ",", + "char": ",", + "line": 69 + }, + { + "type": 45, + "typeName": "-", + "char": "-", + "line": 69 + }, + { + "type": 309, + "typeName": "T_LNUMBER", + "char": "1", + "line": 69 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 69 + }, + { + "type": 269, + "typeName": "T_DOUBLE_ARROW", + "char": "=>", + "line": 69 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 69 + }, + { + "type": 309, + "typeName": "T_LNUMBER", + "char": "0", + "line": 69 + }, + { + "type": 44, + "typeName": ",", + "char": ",", + "line": 69 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n ", + "line": 69 + } + ], + "70": [ + { + "type": 340, + "typeName": "T_DEFAULT", + "char": "default", + "line": 70 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 70 + }, + { + "type": 269, + "typeName": "T_DOUBLE_ARROW", + "char": "=>", + "line": 70 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": " ", + "line": 70 + }, + { + "type": 309, + "typeName": "T_LNUMBER", + "char": "0", + "line": 70 + }, + { + "type": 44, + "typeName": ",", + "char": ",", + "line": 70 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n ", + "line": 70 + } + ], + "71": [ + { + "type": 125, + "typeName": "}", + "char": "}", + "line": 71 + }, + { + "type": 59, + "typeName": ";", + "char": ";", + "line": 71 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n", + "line": 71 + } + ], + "72": [ + { + "type": 125, + "typeName": "}", + "char": "}", + "line": 72 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n\n", + "line": 72 + } + ], + "73": [], + "74": [ + { + "type": 388, "typeName": "T_COMMENT", "char": "\/*", - "line": 47, + "line": 74, "original": { "string": "\/*\n * Multi-line comment\n *\/", "lines": [ @@ -3789,496 +5569,517 @@ } } ], - "48": [ + "75": [ { "type": -1, "typeName": "RAW", - "char": " * Multi-line comment" + "char": " * Multi-line comment", + "line": 75 } ], - "49": [ + "76": [ { "type": -1, "typeName": "RAW", - "char": " *\/" + "char": " *\/", + "line": 76 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n", - "line": 49 + "line": 76 } ], - "50": [ + "77": [ { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$foobar", - "line": 50 + "line": 77 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 50 + "line": 77 }, { - "type": -1, - "typeName": "RAW", - "char": "=" + "type": 61, + "typeName": "=", + "char": "=", + "line": 77 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 50 + "line": 77 }, { - "type": 304, + "type": 322, "typeName": "T_NEW", "char": "new", - "line": 50 + "line": 77 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 50 + "line": 77 }, { "type": 311, "typeName": "T_STRING", "char": "FooBar", - "line": 50 + "line": 77 }, { - "type": -1, - "typeName": "RAW", - "char": "(" + "type": 40, + "typeName": "(", + "char": "(", + "line": 77 }, { - "type": -1, - "typeName": "RAW", - "char": ")" + "type": 41, + "typeName": ")", + "char": ")", + "line": 77 }, { - "type": -1, - "typeName": "RAW", - "char": ";" + "type": 59, + "typeName": ";", + "char": ";", + "line": 77 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n\n", - "line": 50 + "line": 77 } ], - "51": [], - "52": [ + "78": [], + "79": [ { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$baz", - "line": 52 + "line": 79 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 52 + "line": 79 }, { - "type": -1, - "typeName": "RAW", - "char": "=" + "type": 61, + "typeName": "=", + "char": "=", + "line": 79 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 52 + "line": 79 }, { - "type": -1, - "typeName": "RAW", - "char": "[" + "type": 91, + "typeName": "[", + "char": "[", + "line": 79 }, { - "type": 315, + "type": 318, "typeName": "T_CONSTANT_ENCAPSED_STRING", "char": "'a'", - "line": 52 + "line": 79 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 52 + "line": 79 }, { - "type": 268, + "type": 269, "typeName": "T_DOUBLE_ARROW", "char": "=>", - "line": 52 + "line": 79 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 52 + "line": 79 }, { - "type": 315, + "type": 318, "typeName": "T_CONSTANT_ENCAPSED_STRING", "char": "'b'", - "line": 52 + "line": 79 }, { - "type": -1, - "typeName": "RAW", - "char": "]" + "type": 93, + "typeName": "]", + "char": "]", + "line": 79 }, { - "type": -1, - "typeName": "RAW", - "char": ";" + "type": 59, + "typeName": ";", + "char": ";", + "line": 79 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n\n", - "line": 52 + "line": 79 } ], - "53": [], - "54": [ + "80": [], + "81": [ { - "type": 380, + "type": 388, "typeName": "T_COMMENT", "char": "\/\/ C++ style comment", - "line": 54, - "original": { - "string": "\/\/ C++ style comment\n", - "lines": [ - "\/\/ C++ style comment", - "" - ] - } + "line": 81 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n", + "line": 81 } ], - "55": [ + "82": [ { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$x", - "line": 55 + "line": 82 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 55 + "line": 82 }, { - "type": -1, - "typeName": "RAW", - "char": "=" + "type": 61, + "typeName": "=", + "char": "=", + "line": 82 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 55 + "line": 82 }, { "type": 309, "typeName": "T_LNUMBER", "char": "3", - "line": 55 + "line": 82 }, { - "type": -1, - "typeName": "RAW", - "char": ";" + "type": 59, + "typeName": ";", + "char": ";", + "line": 82 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n\n", - "line": 55 + "line": 82 } ], - "56": [], - "57": [ + "83": [], + "84": [ { - "type": 380, + "type": 388, "typeName": "T_COMMENT", "char": "# Perl-style comment", - "line": 57, - "original": { - "string": "# Perl-style comment\n", - "lines": [ - "# Perl-style comment", - "" - ] - } + "line": 84 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n", + "line": 84 } ], - "58": [ + "85": [ { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$y", - "line": 58 + "line": 85 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 58 + "line": 85 }, { - "type": -1, - "typeName": "RAW", - "char": "=" + "type": 61, + "typeName": "=", + "char": "=", + "line": 85 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 58 + "line": 85 }, { - "type": -1, - "typeName": "RAW", - "char": "[" + "type": 91, + "typeName": "[", + "char": "[", + "line": 85 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n ", - "line": 58 + "line": 85 } ], - "59": [ + "86": [ { "type": 309, "typeName": "T_LNUMBER", "char": "1", - "line": 59 + "line": 86 }, { - "type": -1, - "typeName": "RAW", - "char": "," + "type": 44, + "typeName": ",", + "char": ",", + "line": 86 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n ", - "line": 59 + "line": 86 } ], - "60": [ + "87": [ { "type": 309, "typeName": "T_LNUMBER", "char": "2", - "line": 60 + "line": 87 }, { - "type": -1, - "typeName": "RAW", - "char": "," + "type": 44, + "typeName": ",", + "char": ",", + "line": 87 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n ", - "line": 60 + "line": 87 } ], - "61": [ + "88": [ { "type": 309, "typeName": "T_LNUMBER", "char": "3", - "line": 61 + "line": 88 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n", - "line": 61 + "line": 88 } ], - "62": [ + "89": [ { - "type": -1, - "typeName": "RAW", - "char": "]" + "type": 93, + "typeName": "]", + "char": "]", + "line": 89 }, { - "type": -1, - "typeName": "RAW", - "char": ";" + "type": 59, + "typeName": ";", + "char": ";", + "line": 89 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n\n", - "line": 62 + "line": 89 } ], - "63": [], - "64": [ + "90": [], + "91": [ { - "type": 380, + "type": 388, "typeName": "T_COMMENT", "char": "\/\/ Multi-line ternary statement", - "line": 64, - "original": { - "string": "\/\/ Multi-line ternary statement\n", - "lines": [ - "\/\/ Multi-line ternary statement", - "" - ] - } + "line": 91 + }, + { + "type": 393, + "typeName": "T_WHITESPACE", + "char": "\n", + "line": 91 } ], - "65": [ + "92": [ { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$q", - "line": 65 + "line": 92 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 65 + "line": 92 }, { - "type": -1, - "typeName": "RAW", - "char": "=" + "type": 61, + "typeName": "=", + "char": "=", + "line": 92 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 65 + "line": 92 }, { - "type": -1, - "typeName": "RAW", - "char": "(" + "type": 40, + "typeName": "(", + "char": "(", + "line": 92 }, { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$x", - "line": 65 + "line": 92 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 65 + "line": 92 }, { - "type": 289, + "type": 290, "typeName": "T_IS_NOT_IDENTICAL", "char": "!==", - "line": 65 + "line": 92 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 65 + "line": 92 }, { "type": 309, "typeName": "T_LNUMBER", "char": "2", - "line": 65 + "line": 92 }, { - "type": -1, - "typeName": "RAW", - "char": ")" + "type": 41, + "typeName": ")", + "char": ")", + "line": 92 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n ", - "line": 65 + "line": 92 } ], - "66": [ + "93": [ { - "type": -1, - "typeName": "RAW", - "char": "?" + "type": 63, + "typeName": "?", + "char": "?", + "line": 93 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 66 + "line": 93 }, { - "type": 315, + "type": 318, "typeName": "T_CONSTANT_ENCAPSED_STRING", "char": "'yes'", - "line": 66 + "line": 93 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n ", - "line": 66 + "line": 93 } ], - "67": [ + "94": [ { - "type": -1, - "typeName": "RAW", - "char": ":" + "type": 58, + "typeName": ":", + "char": ":", + "line": 94 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 67 + "line": 94 }, { - "type": 315, + "type": 318, "typeName": "T_CONSTANT_ENCAPSED_STRING", "char": "'no'", - "line": 67 + "line": 94 }, { - "type": -1, - "typeName": "RAW", - "char": ";" + "type": 59, + "typeName": ";", + "char": ";", + "line": 94 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n\n", - "line": 67 + "line": 94 } ], - "68": [], - "69": [ + "95": [], + "96": [ { - "type": 380, + "type": 388, "typeName": "T_COMMENT", "char": "\/*", - "line": 69, + "line": 96, "original": { "string": "\/*\nHeredoc\n*\/", "lines": [ @@ -4289,112 +6090,118 @@ } } ], - "70": [ + "97": [ { "type": -1, "typeName": "RAW", - "char": "Heredoc" + "char": "Heredoc", + "line": 97 } ], - "71": [ + "98": [ { "type": -1, "typeName": "RAW", - "char": "*\/" + "char": "*\/", + "line": 98 }, { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$z", - "line": 71 + "line": 98 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 71 + "line": 98 }, { - "type": -1, - "typeName": "RAW", - "char": "=" + "type": 61, + "typeName": "=", + "char": "=", + "line": 98 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 71 + "line": 98 }, { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$x", - "line": 71 + "line": 98 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 71 + "line": 98 }, { - "type": -1, - "typeName": "RAW", - "char": "+" + "type": 43, + "typeName": "+", + "char": "+", + "line": 98 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 71 + "line": 98 }, { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$y", - "line": 71 + "line": 98 }, { - "type": -1, - "typeName": "RAW", - "char": ";" + "type": 59, + "typeName": ";", + "char": ";", + "line": 98 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n", - "line": 71 + "line": 98 } ], - "72": [ + "99": [ { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$sql", - "line": 72 + "line": 99 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 72 + "line": 99 }, { - "type": -1, - "typeName": "RAW", - "char": "=" + "type": 61, + "typeName": "=", + "char": "=", + "line": 99 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 72 + "line": 99 }, { - "type": 386, + "type": 394, "typeName": "T_START_HEREDOC", "char": "<<<SQL", - "line": 72, + "line": 99, "original": { "string": "<<<SQL\n", "lines": [ @@ -4404,35 +6211,36 @@ } } ], - "73": [ + "100": [ { - "type": 314, + "type": 317, "typeName": "T_ENCAPSED_AND_WHITESPACE", "char": " SELECT * FROM \"foo\" WHERE \"bar\"='baz' AND id=", - "line": 73 + "line": 100 }, { - "type": 389, + "type": 397, "typeName": "T_CURLY_OPEN", "char": "{", - "line": 73 + "line": 100 }, { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$x", - "line": 73 + "line": 100 }, { - "type": -1, - "typeName": "RAW", - "char": "}" + "type": 125, + "typeName": "}", + "char": "}", + "line": 100 }, { - "type": 314, + "type": 317, "typeName": "T_ENCAPSED_AND_WHITESPACE", "char": ";", - "line": 73, + "line": 100, "original": { "string": ";\n", "lines": [ @@ -4442,69 +6250,71 @@ } } ], - "74": [ + "101": [ { - "type": 387, + "type": 395, "typeName": "T_END_HEREDOC", "char": "SQL", - "line": 74 + "line": 101 }, { - "type": -1, - "typeName": "RAW", - "char": ";" + "type": 59, + "typeName": ";", + "char": ";", + "line": 101 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n\n", - "line": 74 + "line": 101 } ], - "75": [], - "76": [ + "102": [], + "103": [ { - "type": 380, + "type": 388, "typeName": "T_COMMENT", "char": "\/* Nowdoc *\/", - "line": 76 + "line": 103 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n", - "line": 76 + "line": 103 } ], - "77": [ + "104": [ { - "type": 312, + "type": 315, "typeName": "T_VARIABLE", "char": "$template", - "line": 77 + "line": 104 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 77 + "line": 104 }, { - "type": -1, - "typeName": "RAW", - "char": "=" + "type": 61, + "typeName": "=", + "char": "=", + "line": 104 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 77 + "line": 104 }, { - "type": 386, + "type": 394, "typeName": "T_START_HEREDOC", "char": "<<<'TEMPLATE'", - "line": 77, + "line": 104, "original": { "string": "<<<'TEMPLATE'\n", "lines": [ @@ -4514,12 +6324,12 @@ } } ], - "78": [ + "105": [ { - "type": 314, + "type": 317, "typeName": "T_ENCAPSED_AND_WHITESPACE", "char": " <foo>{x}<\/foo>", - "line": 78, + "line": 105, "original": { "string": " <foo>{x}<\/foo>\n", "lines": [ @@ -4529,32 +6339,33 @@ } } ], - "79": [ + "106": [ { - "type": 387, + "type": 395, "typeName": "T_END_HEREDOC", "char": "TEMPLATE", - "line": 79 + "line": 106 }, { - "type": -1, - "typeName": "RAW", - "char": ";" + "type": 59, + "typeName": ";", + "char": ";", + "line": 106 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": "\n\n", - "line": 79 + "line": 106 } ], - "80": [], - "81": [ + "107": [], + "108": [ { - "type": 384, + "type": 392, "typeName": "T_CLOSE_TAG", "char": "?>", - "line": 81, + "line": 108, "original": { "string": "?>\n", "lines": [ @@ -4564,12 +6375,12 @@ } } ], - "82": [ + "109": [ { - "type": 313, + "type": 316, "typeName": "T_INLINE_HTML", "char": "<!DOCTYPE html>", - "line": 82, + "line": 109, "original": { "string": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<title>HTML<\/title>\n<\/head>\n<body>\n<h1>", "lines": [ @@ -4584,98 +6395,106 @@ } } ], - "83": [ + "110": [ { "type": -1, "typeName": "RAW", - "char": "<html lang=\"en\">" + "char": "<html lang=\"en\">", + "line": 110 } ], - "84": [ + "111": [ { "type": -1, "typeName": "RAW", - "char": "<head>" + "char": "<head>", + "line": 111 } ], - "85": [ + "112": [ { "type": -1, "typeName": "RAW", - "char": "<title>HTML<\/title>" + "char": "<title>HTML<\/title>", + "line": 112 } ], - "86": [ + "113": [ { "type": -1, "typeName": "RAW", - "char": "<\/head>" + "char": "<\/head>", + "line": 113 } ], - "87": [ + "114": [ { "type": -1, "typeName": "RAW", - "char": "<body>" + "char": "<body>", + "line": 114 } ], - "88": [ + "115": [ { "type": -1, "typeName": "RAW", - "char": "<h1>" + "char": "<h1>", + "line": 115 }, { - "type": 383, + "type": 391, "typeName": "T_OPEN_TAG_WITH_ECHO", "char": "<?=", - "line": 88 + "line": 115 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 88 - }, - { - "type": 312, - "typeName": "T_VARIABLE", - "char": "$_SERVER", - "line": 88 - }, - { - "type": -1, - "typeName": "RAW", - "char": "[" + "line": 115 }, { "type": 315, + "typeName": "T_VARIABLE", + "char": "$_SERVER", + "line": 115 + }, + { + "type": 91, + "typeName": "[", + "char": "[", + "line": 115 + }, + { + "type": 318, "typeName": "T_CONSTANT_ENCAPSED_STRING", "char": "'HTTP_HOST'", - "line": 88 + "line": 115 }, { - "type": -1, - "typeName": "RAW", - "char": "]" + "type": 93, + "typeName": "]", + "char": "]", + "line": 115 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 88 + "line": 115 }, { - "type": 384, + "type": 392, "typeName": "T_CLOSE_TAG", "char": "?>", - "line": 88 + "line": 115 }, { - "type": 313, + "type": 316, "typeName": "T_INLINE_HTML", "char": "<\/h1>", - "line": 88, + "line": 115, "original": { "string": "<\/h1>\n<\/body>\n<\/html>\n", "lines": [ @@ -4687,59 +6506,64 @@ } } ], - "89": [ + "116": [ { "type": -1, "typeName": "RAW", - "char": "<\/body>" + "char": "<\/body>", + "line": 116 } ], - "90": [ + "117": [ { "type": -1, "typeName": "RAW", - "char": "<\/html>" + "char": "<\/html>", + "line": 117 } ], - "91": [ + "118": [ { - "type": 382, + "type": 390, "typeName": "T_OPEN_TAG", "char": "<?php ", - "line": 91 + "line": 118 }, { - "type": 321, + "type": 323, "typeName": "T_EXIT", "char": "exit", - "line": 91 + "line": 118 }, { - "type": -1, - "typeName": "RAW", - "char": "(" + "type": 40, + "typeName": "(", + "char": "(", + "line": 118 }, { - "type": -1, - "typeName": "RAW", - "char": ")" + "type": 41, + "typeName": ")", + "char": ")", + "line": 118 }, { - "type": -1, - "typeName": "RAW", - "char": ";" + "type": 59, + "typeName": ";", + "char": ";", + "line": 118 }, { - "type": 385, + "type": 393, "typeName": "T_WHITESPACE", "char": " ", - "line": 91 + "line": 118 }, { - "type": 384, + "type": 392, "typeName": "T_CLOSE_TAG", "char": "?>", - "line": 91 + "line": 118 } ] }