mirror of
https://github.com/Microsoft/vscode
synced 2024-08-28 13:29:44 +00:00
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 <martinae@microsoft.com>
This commit is contained in:
parent
a887d72e8d
commit
70328b1b48
|
@ -168,7 +168,7 @@ function getEmbeddedDocument(document: TextDocument, contents: EmbeddedRegion[],
|
||||||
for (const c of contents) {
|
for (const c of contents) {
|
||||||
if (c.languageId === languageId && (!ignoreAttributeValues || !c.attributeValue)) {
|
if (c.languageId === languageId && (!ignoreAttributeValues || !c.attributeValue)) {
|
||||||
result = substituteWithWhitespace(result, currentPos, c.start, oldContent, lastSuffix, getPrefix(c));
|
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;
|
currentPos = c.end;
|
||||||
lastSuffix = getSuffix(c);
|
lastSuffix = getSuffix(c);
|
||||||
}
|
}
|
||||||
|
@ -194,6 +194,12 @@ function getSuffix(c: EmbeddedRegion) {
|
||||||
}
|
}
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
function updateContent(c: EmbeddedRegion, content: string): string {
|
||||||
|
if (!c.attributeValue && c.languageId === 'javascript') {
|
||||||
|
return content.replace(`<!--`, `/* `).replace(`-->`, ` */`);
|
||||||
|
}
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
function substituteWithWhitespace(result: string, start: number, end: number, oldContent: string, before: string, after: string) {
|
function substituteWithWhitespace(result: string, start: number, end: number, oldContent: string, before: string, after: string) {
|
||||||
result += before;
|
result += before;
|
||||||
|
|
|
@ -119,7 +119,10 @@ suite('HTML Embedded Support', () => {
|
||||||
test('Script content', function (): any {
|
test('Script content', function (): any {
|
||||||
assertEmbeddedLanguageContent('<html><script>var i = 0;</script></html>', 'javascript', ' var i = 0; ');
|
assertEmbeddedLanguageContent('<html><script>var i = 0;</script></html>', 'javascript', ' var i = 0; ');
|
||||||
assertEmbeddedLanguageContent('<script type="text/javascript">var i = 0;</script>', 'javascript', ' var i = 0; ');
|
assertEmbeddedLanguageContent('<script type="text/javascript">var i = 0;</script>', 'javascript', ' var i = 0; ');
|
||||||
|
assertEmbeddedLanguageContent('<script><!--this comment should not give error--></script>', 'javascript', ' /* this comment should not give error */ ');
|
||||||
|
assertEmbeddedLanguageContent('<script><!--this comment should not give error--> console.log("logging");</script>', 'javascript', ' /* this comment should not give error */ console.log("logging"); ');
|
||||||
|
|
||||||
|
assertEmbeddedLanguageContent('<script>var data=100; <!--this comment should not give error--> </script>', 'javascript', ' var data=100; /* this comment should not give error */ ');
|
||||||
assertEmbeddedLanguageContent('<div onKeyUp="foo()" onkeydown="bar()"/>', 'javascript', ' foo(); bar(); ');
|
assertEmbeddedLanguageContent('<div onKeyUp="foo()" onkeydown="bar()"/>', 'javascript', ' foo(); bar(); ');
|
||||||
assertEmbeddedLanguageContent('<div onKeyUp="return"/>', 'javascript', ' return; ');
|
assertEmbeddedLanguageContent('<div onKeyUp="return"/>', 'javascript', ' return; ');
|
||||||
assertEmbeddedLanguageContent('<div onKeyUp=return\n/><script>foo();</script>', 'javascript', ' return;\n foo(); ');
|
assertEmbeddedLanguageContent('<div onKeyUp=return\n/><script>foo();</script>', 'javascript', ' return;\n foo(); ');
|
||||||
|
|
Loading…
Reference in a new issue