From 390a5295b034e4be6d59dc959398e151fb0bf337 Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Mon, 29 Jan 2018 10:04:28 -0800 Subject: [PATCH] Fix #40279 - rewrite php grammar rule to avoid regex that hangs vscode-textmate --- extensions/php/build/update-grammar.js | 17 ++++++++++++++++- extensions/php/syntaxes/php.tmLanguage.json | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/extensions/php/build/update-grammar.js b/extensions/php/build/update-grammar.js index 55cd1ae9c41..94b73aa7354 100644 --- a/extensions/php/build/update-grammar.js +++ b/extensions/php/build/update-grammar.js @@ -20,6 +20,21 @@ function adaptInjectionScope(grammar) { injections[newInjectionKey] = injection; } -updateGrammar.update('atom/language-php', 'grammars/php.cson', './syntaxes/php.tmLanguage.json', undefined); +// Workaround for https://github.com/Microsoft/vscode/issues/40279 +// and https://github.com/Microsoft/vscode-textmate/issues/59 +function fixBadRegex(grammar) { + const scopeResolution = grammar.repository['scope-resolution']; + if (scopeResolution) { + const match = scopeResolution.patterns[0].match; + if (match === '(?i)([a-z_\\x{7f}-\\x{7fffffff}\\\\][a-z0-9_\\x{7f}-\\x{7fffffff}\\\\]*)(?=\\s*::)') { + scopeResolution.patterns[0].match = '([A-Za-z_\\x{7f}-\\x{7fffffff}\\\\][A_Za-z0-9_\\x{7f}-\\x{7fffffff}\\\\]*)(?=\\s*::)'; + return; + } + } + + throw new Error(`fixBadRegex callback couldn't patch the regex. It may be obsolete`); +} + +updateGrammar.update('atom/language-php', 'grammars/php.cson', './syntaxes/php.tmLanguage.json', fixBadRegex); updateGrammar.update('atom/language-php', 'grammars/html.cson', './syntaxes/html.tmLanguage.json', adaptInjectionScope); diff --git a/extensions/php/syntaxes/php.tmLanguage.json b/extensions/php/syntaxes/php.tmLanguage.json index 9cacdd3c23c..9940c618083 100644 --- a/extensions/php/syntaxes/php.tmLanguage.json +++ b/extensions/php/syntaxes/php.tmLanguage.json @@ -2430,7 +2430,7 @@ "scope-resolution": { "patterns": [ { - "match": "(?i)([a-z_\\x{7f}-\\x{7fffffff}\\\\][a-z0-9_\\x{7f}-\\x{7fffffff}\\\\]*)(?=\\s*::)", + "match": "([A-Za-z_\\x{7f}-\\x{7fffffff}\\\\][A_Za-z0-9_\\x{7f}-\\x{7fffffff}\\\\]*)(?=\\s*::)", "captures": { "1": { "patterns": [