diff --git a/extensions/typescript-language-features/src/typescriptServiceClient.ts b/extensions/typescript-language-features/src/typescriptServiceClient.ts index 43002c897ba99..74a3fb9f23ef6 100644 --- a/extensions/typescript-language-features/src/typescriptServiceClient.ts +++ b/extensions/typescript-language-features/src/typescriptServiceClient.ts @@ -601,21 +601,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 {