diff --git a/extensions/html-language-features/server/src/modes/javascriptMode.ts b/extensions/html-language-features/server/src/modes/javascriptMode.ts
index d820810c920..a66bc57681a 100644
--- a/extensions/html-language-features/server/src/modes/javascriptMode.ts
+++ b/extensions/html-language-features/server/src/modes/javascriptMode.ts
@@ -15,6 +15,8 @@ import { HTMLDocumentRegions } from './embeddedSupport';
import * as ts from 'typescript';
import { getSemanticTokens, getSemanticTokenLegend } from './javascriptSemanticTokens';
+import path from 'path';
+import fs from 'fs';
const JS_WORD_REGEX = /(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g;
@@ -302,11 +304,19 @@ export function getJavaScriptMode(documentRegions: LanguageModelCache d.fileName === jsDocument.uri).map(d => {
- return {
- uri: document.uri,
- range: convertRange(jsDocument, d.textSpan)
- };
+ return definition.filter(d => d.fileName === jsDocument.uri || d.fileName === 'lib.dom.d.ts').map(d => {
+ if (d.fileName === jsDocument.uri) {
+ return {
+ uri: document.uri,
+ range: convertRange(jsDocument, d.textSpan)
+ };
+ } else {
+ const [libDomUri, libDomDocument] = getLibDomUriAndDocument();
+ return {
+ uri: libDomUri,
+ range: convertRange(libDomDocument, d.textSpan)
+ };
+ }
});
}
return null;
@@ -601,3 +611,11 @@ function generateIndent(level: number, options: FormattingOptions) {
return repeat('\t', level);
}
}
+
+function getLibDomUriAndDocument(): [string, TextDocument] {
+ const folderName = path.dirname(path.dirname(path.dirname(path.dirname(__dirname))));
+ const filepath = path.resolve(folderName, 'node_modules', 'typescript', 'lib', 'lib.dom.d.ts');
+ const fileUri = `file:///${filepath}`;
+ const content = fs.readFileSync(filepath, 'utf8');
+ return [fileUri, TextDocument.create(fileUri, 'typescript', 1, content)];
+}