This commit is contained in:
Martin Aeschlimann
2025-04-10 11:24:30 +02:00
parent 618a091f90
commit 165c1094cd
3 changed files with 17 additions and 15 deletions

View File

@@ -8,7 +8,7 @@ import {
SymbolInformation, SymbolKind, CompletionItem, Location, SignatureHelp, SignatureInformation, ParameterInformation,
Definition, TextEdit, TextDocument, Diagnostic, DiagnosticSeverity, Range, CompletionItemKind, Hover,
DocumentHighlight, DocumentHighlightKind, CompletionList, Position, FormattingOptions, FoldingRange, FoldingRangeKind, SelectionRange,
LanguageMode, Settings, SemanticTokenData, Workspace, DocumentContext, CompletionItemData, isCompletionItemData, FILE_PROTOCOL
LanguageMode, Settings, SemanticTokenData, Workspace, DocumentContext, CompletionItemData, isCompletionItemData, FILE_PROTOCOL, DocumentUri
} from './languageModes';
import { getWordAtText, isWhitespaceOnly, repeat } from '../utils/strings';
import { HTMLDocumentRegions } from './embeddedSupport';
@@ -110,6 +110,8 @@ export function getJavaScriptMode(documentRegions: LanguageModelCache<HTMLDocume
const host = getLanguageServiceHost(languageId === 'javascript' ? ts.ScriptKind.JS : ts.ScriptKind.TS);
const globalSettings: Settings = {};
const libParentUri = `${FILE_PROTOCOL}://${languageId}/libs/`;
function updateHostSettings(settings: Settings) {
const hostSettings = host.getCompilationSettings();
hostSettings.experimentalDecorators = settings?.['js/ts']?.implicitProjectConfig?.experimentalDecorators;
@@ -315,7 +317,7 @@ export function getJavaScriptMode(documentRegions: LanguageModelCache<HTMLDocume
range: convertRange(jsDocument, d.textSpan)
};
} else {
const libUri = `${FILE_PROTOCOL}://${languageId}/${d.fileName}`;
const libUri = libParentUri + d.fileName;
const content = await host.loadLibrary(d.fileName);
if (!content) {
return undefined;
@@ -421,8 +423,11 @@ export function getJavaScriptMode(documentRegions: LanguageModelCache<HTMLDocume
getSemanticTokenLegend(): { types: string[]; modifiers: string[] } {
return getSemanticTokenLegend();
},
getTextDocumentContent(name: string): Promise<string> {
return host.loadLibrary(name);
async getTextDocumentContent(documentUri: DocumentUri): Promise<string | undefined> {
if (documentUri.startsWith(libParentUri)) {
return host.loadLibrary(documentUri.substring(libParentUri.length));
}
return undefined;
},
dispose() {
host.dispose();

View File

@@ -14,7 +14,7 @@ import {
Color, ColorInformation, ColorPresentation, WorkspaceEdit,
WorkspaceFolder
} from 'vscode-languageserver';
import { TextDocument } from 'vscode-languageserver-textdocument';
import { DocumentUri, TextDocument } from 'vscode-languageserver-textdocument';
import { getLanguageModelCache, LanguageModelCache } from '../languageModelCache';
import { getCSSMode } from './cssMode';
@@ -34,7 +34,7 @@ export {
export { ClientCapabilities, DocumentContext, LanguageService, HTMLDocument, HTMLFormatConfiguration, TokenType } from 'vscode-html-languageservice';
export { TextDocument } from 'vscode-languageserver-textdocument';
export { TextDocument, DocumentUri } from 'vscode-languageserver-textdocument';
export interface Settings {
readonly css?: any;
@@ -89,7 +89,7 @@ export interface LanguageMode {
onDocumentRemoved(document: TextDocument): void;
getSemanticTokens?(document: TextDocument): Promise<SemanticTokenData[]>;
getSemanticTokenLegend?(): { types: string[]; modifiers: string[] };
getTextDocumentContent?(name: string): Promise<string>;
getTextDocumentContent?(uri: DocumentUri): Promise<string | undefined>;
dispose(): void;
}