From 70328b1b48dcc4e0f35fe72c592f25057bd82096 Mon Sep 17 00:00:00 2001 From: w1redch4d <106700035+w1redch4d@users.noreply.github.com> Date: Wed, 26 Oct 2022 14:11:05 +0530 Subject: [PATCH] fix problems with html style comments in embedded code (#160981) * fix problems with html style comments in embedded code * add spacings to the replaced characters add same amount of characters, in the replacements so that all offsets stays the same * revert javascriptMode.ts * add replace characters in embeddedSupport.ts instead * added few more tests with javascript more testcases with js code before and after the comments * polish Co-authored-by: UwUeeb <106700035+UwUeeb@users.noreply.github.com> Co-authored-by: Martin Aeschlimann --- .../server/src/modes/embeddedSupport.ts | 8 +++++++- .../server/src/test/embedded.test.ts | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/extensions/html-language-features/server/src/modes/embeddedSupport.ts b/extensions/html-language-features/server/src/modes/embeddedSupport.ts index c3398f8f80f..26ef68439da 100644 --- a/extensions/html-language-features/server/src/modes/embeddedSupport.ts +++ b/extensions/html-language-features/server/src/modes/embeddedSupport.ts @@ -168,7 +168,7 @@ function getEmbeddedDocument(document: TextDocument, contents: EmbeddedRegion[], for (const c of contents) { if (c.languageId === languageId && (!ignoreAttributeValues || !c.attributeValue)) { result = substituteWithWhitespace(result, currentPos, c.start, oldContent, lastSuffix, getPrefix(c)); - result += oldContent.substring(c.start, c.end); + result += updateContent(c, oldContent.substring(c.start, c.end)); currentPos = c.end; lastSuffix = getSuffix(c); } @@ -194,6 +194,12 @@ function getSuffix(c: EmbeddedRegion) { } return ''; } +function updateContent(c: EmbeddedRegion, content: string): string { + if (!c.attributeValue && c.languageId === 'javascript') { + return content.replace(``, ` */`); + } + return content; +} function substituteWithWhitespace(result: string, start: number, end: number, oldContent: string, before: string, after: string) { result += before; diff --git a/extensions/html-language-features/server/src/test/embedded.test.ts b/extensions/html-language-features/server/src/test/embedded.test.ts index 722578cb07c..87698f39718 100644 --- a/extensions/html-language-features/server/src/test/embedded.test.ts +++ b/extensions/html-language-features/server/src/test/embedded.test.ts @@ -119,7 +119,10 @@ suite('HTML Embedded Support', () => { test('Script content', function (): any { assertEmbeddedLanguageContent('', 'javascript', ' var i = 0; '); assertEmbeddedLanguageContent('', 'javascript', ' var i = 0; '); + assertEmbeddedLanguageContent('', 'javascript', ' /* this comment should not give error */ '); + assertEmbeddedLanguageContent('', 'javascript', ' /* this comment should not give error */ console.log("logging"); '); + assertEmbeddedLanguageContent('', 'javascript', ' var data=100; /* this comment should not give error */ '); assertEmbeddedLanguageContent('
', 'javascript', ' foo(); bar(); '); assertEmbeddedLanguageContent('
', 'javascript', ' return; '); assertEmbeddedLanguageContent('
', 'javascript', ' return;\n foo(); ');