1
0
Эх сурвалжийг харах

Avoid `Uri.parse` for fileName equality

Alex Dima 3 жил өмнө
parent
commit
215112db6d
1 өөрчлөгдсөн 13 нэмэгдсэн , 21 устгасан
  1. 13 21
      src/languageFeatures.ts

+ 13 - 21
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}.`);
 			}
 		}