From 215112db6d0c43b9fd1e46a47f900f4f6e83dab0 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Fri, 8 Oct 2021 16:45:48 +0200 Subject: [PATCH] Avoid `Uri.parse` for fileName equality --- src/languageFeatures.ts | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/src/languageFeatures.ts b/src/languageFeatures.ts index 6a1add50..46efc82c 100644 --- a/src/languageFeatures.ts +++ b/src/languageFeatures.ts @@ -114,7 +114,8 @@ export class LibFiles { return false; } - public getOrCreateModel(uri: Uri): editor.ITextModel | null { + public getOrCreateModel(fileName: string): editor.ITextModel | null { + const uri = Uri.parse(fileName); const model = editor.getModel(uri); if (model) { return model; @@ -122,14 +123,9 @@ export class LibFiles { if (this.isLibFile(uri) && this._hasFetchedLibFiles) { return editor.createModel(this._libFiles[uri.path.slice(1)], 'typescript', uri); } - const extraLibs = typescriptDefaults.getExtraLibs(); - const extraLibPaths = Object.keys(extraLibs); - for (let i = 0; i < extraLibPaths.length; i++) { - const currentPath = extraLibPaths[i]; - const currentUri = Uri.parse(currentPath); - if (currentUri.path === uri.path) { - return editor.createModel(extraLibs[currentPath].content, 'typescript', uri); - } + const matchedLibFile = typescriptDefaults.getExtraLibs()[fileName]; + if (matchedLibFile) { + return editor.createModel(matchedLibFile.content, 'typescript', uri); } return null; } @@ -390,8 +386,7 @@ export class DiagnosticsAdapter extends Adapter { relatedInformation.forEach((info) => { let relatedResource: editor.ITextModel | null = model; if (info.file) { - const relatedResourceUri = Uri.parse(info.file.fileName); - relatedResource = this._libFiles.getOrCreateModel(relatedResourceUri); + relatedResource = this._libFiles.getOrCreateModel(info.file.fileName); } if (!relatedResource) { @@ -796,11 +791,10 @@ export class DefinitionAdapter extends Adapter { const result: languages.Location[] = []; for (let entry of entries) { - const uri = Uri.parse(entry.fileName); - const refModel = this._libFiles.getOrCreateModel(uri); + const refModel = this._libFiles.getOrCreateModel(entry.fileName); if (refModel) { result.push({ - uri: uri, + uri: refModel.uri, range: this._textSpanToRange(refModel, entry.textSpan) }); } @@ -850,11 +844,10 @@ export class ReferenceAdapter extends Adapter implements languages.ReferenceProv const result: languages.Location[] = []; for (let entry of entries) { - const uri = Uri.parse(entry.fileName); - const refModel = this._libFiles.getOrCreateModel(uri); + const refModel = this._libFiles.getOrCreateModel(entry.fileName); if (refModel) { result.push({ - uri: uri, + uri: refModel.uri, range: this._textSpanToRange(refModel, entry.textSpan) }); } @@ -1209,18 +1202,17 @@ export class RenameAdapter extends Adapter implements languages.RenameProvider { const edits: languages.WorkspaceTextEdit[] = []; for (const renameLocation of renameLocations) { - const resource = Uri.parse(renameLocation.fileName); - const model = this._libFiles.getOrCreateModel(resource); + const model = this._libFiles.getOrCreateModel(renameLocation.fileName); if (model) { edits.push({ - resource, + resource: model.uri, edit: { range: this._textSpanToRange(model, renameLocation.textSpan), text: newName } }); } else { - throw new Error(`Unknown URI ${resource}.`); + throw new Error(`Unknown file ${renameLocation.fileName}.`); } }