From e929ec691f6ac8b5238cd77567d170f4d9cb11eb Mon Sep 17 00:00:00 2001 From: Wojciech Kania Date: Sun, 19 Dec 2021 23:29:39 +0100 Subject: [PATCH] enh(php) Left and right-side of double colon --- src/languages/php.js | 58 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/src/languages/php.js b/src/languages/php.js index a23b6543c2..27ef10feac 100644 --- a/src/languages/php.js +++ b/src/languages/php.js @@ -340,6 +340,62 @@ export default function(hljs) { } }; + // This will not detect camelCase classes + const PASCAL_CASE_CLASS_NAME = regex.concat("[A-Z]", IDENT_RE); + + const CONSTANT_REFERENCE = regex.concat(IDENT_RE, "\\b(?!\\()"); + + const LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON = { + variants: [ + { + match: [ + regex.concat( + /::/, + regex.lookahead(/(?!class\b)/) + ), + CONSTANT_REFERENCE, + ], + scope: { + 2: "variable", + }, + }, + { + match: [ + PASCAL_CASE_CLASS_NAME, + regex.concat( + "::", + regex.lookahead(/(?!class\b)/) + ), + CONSTANT_REFERENCE, + ], + scope: { + 1: "title.class", + 3: "variable", + }, + }, + { + match: [ + /::/, + /class/, + ], + scope: { + 2: "variable.language", + }, + }, + { + match: [ + PASCAL_CASE_CLASS_NAME, + /::/, + /class/, + ], + scope: { + 1: "title.class", + 3: "variable.language", + }, + } + ] + }; + return { case_insensitive: false, keywords: KEYWORDS, @@ -380,6 +436,7 @@ export default function(hljs) { }, VARIABLE, FUNCTION_INVOKE, + LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON, { match: [ /const/, @@ -425,6 +482,7 @@ export default function(hljs) { contains: [ 'self', VARIABLE, + LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON, hljs.C_BLOCK_COMMENT_MODE, STRING, NUMBER