From ea9ddb0a8cc3fcbc3712c91e94d59946ec90001e Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Fri, 28 Aug 2020 10:00:16 +0200 Subject: [PATCH] Adopt LibFiles in ReferenceAdapter --- src/languageFeatures.ts | 16 +++++++++++++++- src/tsMode.ts | 2 +- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/languageFeatures.ts b/src/languageFeatures.ts index a2e44807..ef7f6033 100644 --- a/src/languageFeatures.ts +++ b/src/languageFeatures.ts @@ -600,6 +600,13 @@ export class DefinitionAdapter extends Adapter { export class ReferenceAdapter extends Adapter implements monaco.languages.ReferenceProvider { + constructor( + private readonly _libFiles: LibFiles, + worker: (...uris: Uri[]) => Promise + ) { + super(worker); + } + public async provideReferences(model: monaco.editor.ITextModel, position: Position, context: monaco.languages.ReferenceContext, token: CancellationToken): Promise { const resource = model.uri; const offset = model.getOffsetAt(position); @@ -610,10 +617,17 @@ export class ReferenceAdapter extends Adapter implements monaco.languages.Refere return; } + // Fetch lib files if necessary + await this._libFiles.fetchLibFilesIfNecessary(entries.map(entry => Uri.parse(entry.fileName))); + + if (model.isDisposed()) { + return; + } + const result: monaco.languages.Location[] = []; for (let entry of entries) { const uri = Uri.parse(entry.fileName); - const refModel = getOrCreateLibFile(uri); + const refModel = this._libFiles.getOrCreateModel(uri); if (refModel) { result.push({ uri: uri, diff --git a/src/tsMode.ts b/src/tsMode.ts index dc0e391b..9bfbed37 100644 --- a/src/tsMode.ts +++ b/src/tsMode.ts @@ -62,7 +62,7 @@ function setupMode(defaults: LanguageServiceDefaultsImpl, modeId: string): (...u monaco.languages.registerHoverProvider(modeId, new languageFeatures.QuickInfoAdapter(worker)); monaco.languages.registerDocumentHighlightProvider(modeId, new languageFeatures.OccurrencesAdapter(worker)); monaco.languages.registerDefinitionProvider(modeId, new languageFeatures.DefinitionAdapter(libFiles, worker)); - monaco.languages.registerReferenceProvider(modeId, new languageFeatures.ReferenceAdapter(worker)); + monaco.languages.registerReferenceProvider(modeId, new languageFeatures.ReferenceAdapter(libFiles, worker)); monaco.languages.registerDocumentSymbolProvider(modeId, new languageFeatures.OutlineAdapter(worker)); monaco.languages.registerDocumentRangeFormattingEditProvider(modeId, new languageFeatures.FormatAdapter(worker)); monaco.languages.registerOnTypeFormattingEditProvider(modeId, new languageFeatures.FormatOnTypeAdapter(worker));