vscode-textmate icon indicating copy to clipboard operation
vscode-textmate copied to clipboard

`begin` matching ending `\n` creates rogue `\\G` on every newline

Open RedCMD opened this issue 1 year ago • 1 comments

A begin/end rule will create a \\G anchor immediately after the begin match ✅

however, if the begin rule matches the ending newline \n character it causes it to place a \\G anchor at the beginning of every single line within the begin/end rule ❌

create a grammar with the following code

"begin": "#\n",
"end": "#",
"patterns": [
	{
		"match": "\\G.",
		"name": "invalid"
	}
]

create a file and apply the grammar

#
ab
cd
#

notice how both a and c are highlighted red ❌ image even tho there should not be any \\G anchors there

remove the \n newline from the grammar notice that there is now no incorrect \\G anchors ✅

TextMate Help/TextMate.md states:

\G matches end of parent rule’s begin — or end of last stacked while.

RedCMD avatar Aug 08 '24 01:08 RedCMD

@alexdima is this directly related to https://github.com/microsoft/vscode-textmate/issues/119?

~~I'm not sure what happens in TextMate (no Mac here)~~ ~~are you able to confirm this is intentional and I am able to rely on this behaviour?~~

I can confirm that TextMate 2.0 does have this behaviour and it seems it has a caching problem causing it to change depending on if the user just typed it

RedCMD avatar Sep 01 '24 10:09 RedCMD