diff --git a/extensions/html-language-features/server/src/modes/htmlMode.ts b/extensions/html-language-features/server/src/modes/htmlMode.ts
index 3efd68a75cb..9c75531b3d0 100644
--- a/extensions/html-language-features/server/src/modes/htmlMode.ts
+++ b/extensions/html-language-features/server/src/modes/htmlMode.ts
@@ -12,7 +12,7 @@ import {
} from './languageModes';
export function getHTMLMode(htmlLanguageService: HTMLLanguageService, workspace: Workspace): LanguageMode {
- let htmlDocuments = getLanguageModelCache(10, 60, document => htmlLanguageService.parseHTMLDocument(document));
+ const htmlDocuments = getLanguageModelCache(10, 60, document => htmlLanguageService.parseHTMLDocument(document));
return {
getId() {
return 'html';
@@ -21,15 +21,13 @@ export function getHTMLMode(htmlLanguageService: HTMLLanguageService, workspace:
return htmlLanguageService.getSelectionRanges(document, [position])[0];
},
doComplete(document: TextDocument, position: Position, documentContext: DocumentContext, settings = workspace.settings) {
- let options = settings && settings.html && settings.html.suggest;
- let doAutoComplete = settings && settings.html && settings.html.autoClosingTags;
- if (doAutoComplete) {
- options.hideAutoCompleteProposals = true;
- }
- options.attributeDefaultValue = settings.html.completion.attributeDefaultValue ?? 'doublequotes';
+ const htmlSettings = settings?.html;
+ const options = merge(htmlSettings?.suggest, {});
+ options.hideAutoCompleteProposals = htmlSettings?.autoClosingTags === true;
+ options.attributeDefaultValue = htmlSettings?.completion?.attributeDefaultValue ?? 'doublequotes';
const htmlDocument = htmlDocuments.get(document);
- let completionList = htmlLanguageService.doComplete2(document, position, htmlDocument, documentContext, options);
+ const completionList = htmlLanguageService.doComplete2(document, position, htmlDocument, documentContext, options);
return completionList;
},
async doHover(document: TextDocument, position: Position, settings?: Settings) {
@@ -45,26 +43,21 @@ export function getHTMLMode(htmlLanguageService: HTMLLanguageService, workspace:
return htmlLanguageService.findDocumentSymbols(document, htmlDocuments.get(document));
},
async format(document: TextDocument, range: Range, formatParams: FormattingOptions, settings = workspace.settings) {
- let formatSettings: HTMLFormatConfiguration = settings && settings.html && settings.html.format;
- if (formatSettings) {
- formatSettings = merge(formatSettings, {});
- } else {
- formatSettings = {};
- }
+ const formatSettings: HTMLFormatConfiguration = merge(settings?.html?.format, {});
if (formatSettings.contentUnformatted) {
formatSettings.contentUnformatted = formatSettings.contentUnformatted + ',script';
} else {
formatSettings.contentUnformatted = 'script';
}
- formatSettings = merge(formatParams, formatSettings);
+ merge(formatParams, formatSettings);
return htmlLanguageService.format(document, range, formatSettings);
},
async getFoldingRanges(document: TextDocument): Promise {
return htmlLanguageService.getFoldingRanges(document);
},
async doAutoClose(document: TextDocument, position: Position) {
- let offset = document.offsetAt(position);
- let text = document.getText();
+ const offset = document.offsetAt(position);
+ const text = document.getText();
if (offset > 0 && text.charAt(offset - 1).match(/[>\/]/g)) {
return htmlLanguageService.doTagComplete(document, position, htmlDocuments.get(document));
}
@@ -92,9 +85,11 @@ export function getHTMLMode(htmlLanguageService: HTMLLanguageService, workspace:
}
function merge(src: any, dst: any): any {
- for (const key in src) {
- if (src.hasOwnProperty(key)) {
- dst[key] = src[key];
+ if (src) {
+ for (const key in src) {
+ if (src.hasOwnProperty(key)) {
+ dst[key] = src[key];
+ }
}
}
return dst;