diff --git a/extensions/html/server/src/modes/embeddedSupport.ts b/extensions/html/server/src/modes/embeddedSupport.ts index 90f45705b56..cc992456b45 100644 --- a/extensions/html/server/src/modes/embeddedSupport.ts +++ b/extensions/html/server/src/modes/embeddedSupport.ts @@ -13,7 +13,7 @@ export interface LanguageRange extends Range { } export interface HTMLDocumentRegions { - getEmbeddedDocument(languageId: string): TextDocument; + getEmbeddedDocument(languageId: string, ignoreAttributeValues?: boolean): TextDocument; getLanguageRanges(range: Range): LanguageRange[]; getLanguageAtPosition(position: Position): string; getLanguagesInDocument(): string[]; @@ -83,7 +83,7 @@ export function getDocumentRegions(languageService: LanguageService, document: T } return { getLanguageRanges: (range: Range) => getLanguageRanges(document, regions, range), - getEmbeddedDocument: (languageId: string) => getEmbeddedDocument(document, regions, languageId), + getEmbeddedDocument: (languageId: string, ignoreAttributeValues: boolean) => getEmbeddedDocument(document, regions, languageId, ignoreAttributeValues), getLanguageAtPosition: (position: Position) => getLanguageAtPosition(document, regions, position), getLanguagesInDocument: () => getLanguagesInDocument(document, regions), getImportedScripts: () => importedScripts @@ -160,13 +160,13 @@ function getLanguageAtPosition(document: TextDocument, regions: EmbeddedRegion[] return 'html'; } -function getEmbeddedDocument(document: TextDocument, contents: EmbeddedRegion[], languageId: string): TextDocument { +function getEmbeddedDocument(document: TextDocument, contents: EmbeddedRegion[], languageId: string, ignoreAttributeValues: boolean): TextDocument { let currentPos = 0; let oldContent = document.getText(); let result = ''; let lastSuffix = ''; for (let c of contents) { - if (c.languageId === languageId) { + if (c.languageId === languageId && (!ignoreAttributeValues || !c.attributeValue)) { result = substituteWithWhitespace(result, currentPos, c.start, oldContent, lastSuffix, getPrefix(c)); result += oldContent.substring(c.start, c.end); currentPos = c.end; diff --git a/extensions/html/server/src/modes/javascriptMode.ts b/extensions/html/server/src/modes/javascriptMode.ts index 04c2177a365..9d781ac1b34 100644 --- a/extensions/html/server/src/modes/javascriptMode.ts +++ b/extensions/html/server/src/modes/javascriptMode.ts @@ -241,7 +241,9 @@ export function getJavascriptMode(documentRegions: LanguageModelCache + \ No newline at end of file diff --git a/extensions/html/server/src/test/fixtures/inputs/21634.html b/extensions/html/server/src/test/fixtures/inputs/21634.html new file mode 100644 index 00000000000..f5ec28098f3 --- /dev/null +++ b/extensions/html/server/src/test/fixtures/inputs/21634.html @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/extensions/html/server/src/test/formatting.test.ts b/extensions/html/server/src/test/formatting.test.ts index f84114afefe..b3d79eb8089 100644 --- a/extensions/html/server/src/test/formatting.test.ts +++ b/extensions/html/server/src/test/formatting.test.ts @@ -71,6 +71,7 @@ suite('HTML Embedded Formatting', () => { assertFormatWithFixture('19813.html', '19813.html'); assertFormatWithFixture('19813.html', '19813-4spaces.html', void 0, FormattingOptions.create(4, true)); assertFormatWithFixture('19813.html', '19813-tab.html', void 0, FormattingOptions.create(1, false)); + assertFormatWithFixture('21634.html', '21634.html'); }) test('Script end tag', function (): any {