diff --git a/src/utils.ts b/src/utils.ts index 8cd93d04..fdbdd168 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -157,7 +157,7 @@ export function isValidHexColor(hex: string): boolean { * Escapes regular expression characters in a given string */ export function escapeRegExpCharacters(value: string): string { - return value.replace(/[\-\\\{\}\*\+\?\|\^\$\.\,\[\]\(\)\#\s]/g, '\\$&'); + return value.replace(/[\\|([{}\]).?*+^$]/g, '\\$&'); } export class CachedFn { diff --git a/test-cases/suite1/fixtures/239.tmLanguage.json b/test-cases/suite1/fixtures/239.tmLanguage.json new file mode 100644 index 00000000..8c8ce758 --- /dev/null +++ b/test-cases/suite1/fixtures/239.tmLanguage.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://raw.githubusercontent.com/RedCMD/TmLanguage-Syntax-Highlighter/main/vscode.tmLanguage.schema.json", + "scopeName": "source.backreference-escaping", + "patterns": [ + { + "begin": "^(#)(\\S+)", + "end": "(?x)\\1\n[\\2]+", + "name": "string", + "endCaptures": { "0": { "name": "$0" } } + } + ] +} \ No newline at end of file diff --git a/test-cases/suite1/tests.json b/test-cases/suite1/tests.json index e49cc299..5ffc6679 100644 --- a/test-cases/suite1/tests.json +++ b/test-cases/suite1/tests.json @@ -1875,5 +1875,41 @@ ] } ] + }, + { + "grammars": [ + "fixtures/239.tmLanguage.json" + ], + "grammarPath": "fixtures/239.tmLanguage.json", + "desc": "Issue #239 Wrong backreference escaping", + "lines": [ + { + "line": "#a-z comment", + "tokens": [ + { + "value": "#a-z", + "scopes": [ + "source.backreference-escaping", + "string" + ] + }, + { + "value": " ", + "scopes": [ + "source.backreference-escaping", + "string" + ] + }, + { + "value": "comment", + "scopes": [ + "source.backreference-escaping", + "string", + "comment" + ] + } + ] + } + ] } ] \ No newline at end of file