From 23ea4d75ab16348d0c168172c9a37e4a383d5105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Nison?= Date: Fri, 5 Jun 2020 22:05:08 +0200 Subject: [PATCH] Adds support for zip archives --- .../src/typescriptServiceClient.ts | 18 +++++++++++------- .../src/utils/fileSchemes.ts | 4 +++- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/extensions/typescript-language-features/src/typescriptServiceClient.ts b/extensions/typescript-language-features/src/typescriptServiceClient.ts index 3af5d2da3539d..77f4f0b7f1c25 100644 --- a/extensions/typescript-language-features/src/typescriptServiceClient.ts +++ b/extensions/typescript-language-features/src/typescriptServiceClient.ts @@ -600,21 +600,25 @@ export default class TypeScriptServiceClient extends Disposable implements IType return resource.with({ path: path.posix.join(dirName, fileName), query: '' }).toString(true); } - if (resource.scheme !== fileSchemes.file) { - return undefined; - } - let result = resource.fsPath; if (!result) { return undefined; } - if (resource.scheme === fileSchemes.file) { - result = path.normalize(result); + if (!fileSchemes.isSupportedScheme(resource.scheme)) { + return undefined; } + result = path.normalize(result); + // Both \ and / must be escaped in regular expressions - return result.replace(new RegExp('\\' + this.pathSeparator, 'g'), '/'); + result = result.replace(new RegExp('\\' + this.pathSeparator, 'g'), '/'); + + if (resource.scheme !== fileSchemes.file) { + result = `${resource.scheme}:${result}`; + } + + return result; } public toPath(resource: vscode.Uri): string | undefined { diff --git a/extensions/typescript-language-features/src/utils/fileSchemes.ts b/extensions/typescript-language-features/src/utils/fileSchemes.ts index 6efcfab4d3b71..600f7ff0ce322 100644 --- a/extensions/typescript-language-features/src/utils/fileSchemes.ts +++ b/extensions/typescript-language-features/src/utils/fileSchemes.ts @@ -7,11 +7,13 @@ export const file = 'file'; export const untitled = 'untitled'; export const git = 'git'; export const walkThroughSnippet = 'walkThroughSnippet'; +export const zip = 'zip'; export const supportedSchemes = [ file, untitled, - walkThroughSnippet + walkThroughSnippet, + zip ]; export function isSupportedScheme(scheme: string): boolean {