From 31144fb2e3d6c1f448de3bdad375a3dd8e747896 Mon Sep 17 00:00:00 2001 From: Timothy Warren Date: Wed, 10 Mar 2021 11:10:52 -0500 Subject: [PATCH] Some more code cleanup --- src/Enum/Highlight.php | 184 ++++++++++++++++++ src/Point.php | 2 +- src/Row.php | 4 +- src/functions.php | 180 +---------------- .../EditorTest__testOpenPHP__1.json | 23 +-- tokens.php | 14 -- 6 files changed, 191 insertions(+), 216 deletions(-) delete mode 100644 tokens.php diff --git a/src/Enum/Highlight.php b/src/Enum/Highlight.php index 48f797e..80cd0f3 100644 --- a/src/Enum/Highlight.php +++ b/src/Enum/Highlight.php @@ -23,4 +23,188 @@ class Highlight { public const INVALID = 10; public const MATCH = 11; public const IDENTIFIER = 12; + + /** + * Map a PHP syntax token to its associated highlighting type + * + * @param int $token + * @return int + */ + public static function fromPHPToken(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_CLASS_C, + T_DIR, + T_DNUMBER, + T_LNUMBER, + T_FILE, + T_FUNC_C, + T_LINE, + T_METHOD_C, + T_NS_C, + T_NUM_STRING, + T_TRAIT_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_ISSET, + T_LIST, + T_MATCH, + T_NAMESPACE, + T_NEW, + T_PRINT, + T_PRIVATE, + T_PUBLIC, + T_PROTECTED, + T_REQUIRE, + T_REQUIRE_ONCE, + T_RETURN, + T_STATIC, + T_SWITCH, + T_THROW, + T_TRAIT, + T_TRY, + T_UNSET, + T_USE, + T_VAR, + T_WHILE, + T_YIELD, + T_YIELD_FROM => Highlight::KEYWORD1, + + // Not string literals, but identifiers, keywords, etc. + T_STRING => Highlight::IDENTIFIER, + + // 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, + }; + } + + /** + * Map a single character PHP delimiter or operator to its associated + * highlighting type + * + * @param string $char + * @return int + */ + public static function fromPHPChar(string $char): int + { + return match ($char) { + // Delimiter characters + '[', ']', '{', '}', '(', ')', '"', "'" => Highlight::DELIMITER, + + // Single character operators + '?', ',', ';', ':', '^', '%', '+', '-', + '*', '/', '.', '|', '~', '>', '<', '=', '!' => Highlight::OPERATOR, + + default => Highlight::NORMAL, + }; + } } \ No newline at end of file diff --git a/src/Point.php b/src/Point.php index 6ea4314..9c890a9 100644 --- a/src/Point.php +++ b/src/Point.php @@ -21,7 +21,7 @@ final class Point { } /** - * Create a new Point from another position + * Create a new Point from another Point * * @param Point $pos * @return Point diff --git a/src/Row.php b/src/Row.php index c5a33b5..d497808 100644 --- a/src/Row.php +++ b/src/Row.php @@ -389,8 +389,8 @@ class Row { } } - $tokenHighlight = php_token_to_highlight($token['type']); - $charHighlight = php_char_to_highlight(trim($token['char'])); + $tokenHighlight = Highlight::fromPHPToken($token['type']); + $charHighlight = Highlight::fromPHPChar(trim($token['char'])); $hl = match(true) { // Matches a predefined PHP token diff --git a/src/functions.php b/src/functions.php index 03f841a..75b6c16 100644 --- a/src/functions.php +++ b/src/functions.php @@ -247,13 +247,8 @@ function get_file_syntax_map(): array Syntax::new( 'PHP', ['.php', 'kilo'], - [ - '?php', '$this', '__halt_compiler' - ], - [ - 'int', 'float', 'bool', 'string', 'true', 'TRUE', 'false', 'FALSE', 'null', 'NULL', - 'void', 'iterable', 'object', 'strict_types' - ], + [], + [], '//', '/*', '*/', @@ -286,174 +281,3 @@ 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_CLASS_C, - T_DIR, - T_DNUMBER, - T_LNUMBER, - T_FILE, - T_FUNC_C, - T_LINE, - T_METHOD_C, - T_NS_C, - T_NUM_STRING, - T_TRAIT_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_ISSET, - T_LIST, - T_MATCH, - T_NAMESPACE, - T_NEW, - T_PRINT, - T_PRIVATE, - T_PUBLIC, - T_PROTECTED, - T_REQUIRE, - T_REQUIRE_ONCE, - T_RETURN, - T_STATIC, - T_SWITCH, - T_THROW, - T_TRAIT, - T_TRY, - T_UNSET, - T_USE, - T_VAR, - T_WHILE, - T_YIELD, - T_YIELD_FROM => Highlight::KEYWORD1, - - // Not string literals, but identifiers, keywords, etc. - T_STRING => Highlight::IDENTIFIER, - - // 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/__snapshots__/EditorTest__testOpenPHP__1.json b/tests/__snapshots__/EditorTest__testOpenPHP__1.json index 2457fc1..c36f513 100644 --- a/tests/__snapshots__/EditorTest__testOpenPHP__1.json +++ b/tests/__snapshots__/EditorTest__testOpenPHP__1.json @@ -2714,27 +2714,8 @@ ".php", "kilo" ], - "keywords1": [ - "?php", - "$this", - "__halt_compiler" - ], - "keywords2": [ - "int", - "float", - "bool", - "string", - "true", - "TRUE", - "false", - "FALSE", - "null", - "NULL", - "void", - "iterable", - "object", - "strict_types" - ], + "keywords1": [], + "keywords2": [], "singleLineCommentStart": "\/\/", "multiLineCommentStart": "\/*", "multiLineCommentEnd": "*\/", diff --git a/tokens.php b/tokens.php deleted file mode 100644 index bb76aec..0000000 --- a/tokens.php +++ /dev/null @@ -1,14 +0,0 @@ -type = $token->getTokenName(); - return $token; -} - -$tokens = array_map('addName', $tokens); - -var_export($tokens); \ No newline at end of file