From 5f175d902e40ff3c3c24ae84945ac3d166e7831c Mon Sep 17 00:00:00 2001 From: Tyler McEnaney Date: Sat, 26 Mar 2022 16:44:02 -0700 Subject: [PATCH 1/2] Fix for PartialStyleSheet getting stuck in loop Adds a clause for detecting `//` as a comment marker when working backwards through a file, preventing the parser from getting stuck when the comment starts at 1:1 --- extensions/emmet/src/util.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/extensions/emmet/src/util.ts b/extensions/emmet/src/util.ts index e81d25bae3b4d..73de02e910364 100644 --- a/extensions/emmet/src/util.ts +++ b/extensions/emmet/src/util.ts @@ -227,10 +227,14 @@ export function parsePartialStylesheet(document: vscode.TextDocument, position: function consumeBlockCommentBackwards() { if (stream.peek() === slash) { - if (stream.backUp(1) === star) { - stream.pos = findOpeningCommentBeforePosition(stream.pos) ?? startOffset; - } else { - stream.next(); + switch (stream.backUp(1)) { + case star: + stream.pos = findOpeningCommentBeforePosition(stream.pos) ?? startOffset; + break; + case slash: + break; + default: + stream.next(); } } } From 2f31c59b42c7e2c1a583b092b42d768102116cdb Mon Sep 17 00:00:00 2001 From: Tyler McEnaney Date: Fri, 1 Apr 2022 15:30:00 -0700 Subject: [PATCH 2/2] Modify change to detect start of file instead of skipping additional `/` characters now that we know the issue only occurs at offset 0. --- extensions/emmet/src/util.ts | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/extensions/emmet/src/util.ts b/extensions/emmet/src/util.ts index 73de02e910364..ee45de467e6ce 100644 --- a/extensions/emmet/src/util.ts +++ b/extensions/emmet/src/util.ts @@ -226,15 +226,11 @@ export function parsePartialStylesheet(document: vscode.TextDocument, position: } function consumeBlockCommentBackwards() { - if (stream.peek() === slash) { - switch (stream.backUp(1)) { - case star: - stream.pos = findOpeningCommentBeforePosition(stream.pos) ?? startOffset; - break; - case slash: - break; - default: - stream.next(); + if (!stream.sof() && stream.peek() === slash) { + if (stream.backUp(1) === star) { + stream.pos = findOpeningCommentBeforePosition(stream.pos) ?? startOffset; + } else { + stream.next(); } } }