diff --git a/src/vs/platform/files/common/files.ts b/src/vs/platform/files/common/files.ts index 28792d1ccce..1d5c80bcb83 100644 --- a/src/vs/platform/files/common/files.ts +++ b/src/vs/platform/files/common/files.ts @@ -285,30 +285,31 @@ export enum FileSystemProviderErrorCode { FileNotADirectory = 'EntryNotADirectory', FileIsADirectory = 'EntryIsADirectory', NoPermissions = 'NoPermissions', - Unavailable = 'Unavailable' + Unavailable = 'Unavailable', + Unknown = 'Unknown' } export class FileSystemProviderError extends Error { - constructor(message: string, public readonly code?: FileSystemProviderErrorCode) { + constructor(message: string, public readonly code: FileSystemProviderErrorCode) { super(message); } } -export function createFileSystemProviderError(error: Error, code?: FileSystemProviderErrorCode): FileSystemProviderError { +export function createFileSystemProviderError(error: Error, code: FileSystemProviderErrorCode): FileSystemProviderError { const providerError = new FileSystemProviderError(error.toString(), code); - markAsFileSystemProviderError(providerError); + markAsFileSystemProviderError(providerError, code); return providerError; } -export function markAsFileSystemProviderError(error: Error, code?: FileSystemProviderErrorCode): Error { +export function markAsFileSystemProviderError(error: Error, code: FileSystemProviderErrorCode): Error { error.name = code ? `${code} (FileSystemError)` : `FileSystemError`; return error; } -export function toFileSystemProviderErrorCode(error: Error): FileSystemProviderErrorCode | undefined { +export function toFileSystemProviderErrorCode(error: Error): FileSystemProviderErrorCode { // FileSystemProviderError comes with the code if (error instanceof FileSystemProviderError) { @@ -319,7 +320,7 @@ export function toFileSystemProviderErrorCode(error: Error): FileSystemProviderE // went through the markAsFileSystemProviderError() method const match = /^(.+) \(FileSystemError\)$/.exec(error.name); if (!match) { - return undefined; + return FileSystemProviderErrorCode.Unknown; } switch (match[1]) { @@ -331,7 +332,7 @@ export function toFileSystemProviderErrorCode(error: Error): FileSystemProviderE case FileSystemProviderErrorCode.Unavailable: return FileSystemProviderErrorCode.Unavailable; } - return undefined; + return FileSystemProviderErrorCode.Unknown; } export function toFileOperationResult(error: Error): FileOperationResult { diff --git a/src/vs/workbench/api/node/extHostTypes.ts b/src/vs/workbench/api/node/extHostTypes.ts index 756d945c972..b173994f35b 100644 --- a/src/vs/workbench/api/node/extHostTypes.ts +++ b/src/vs/workbench/api/node/extHostTypes.ts @@ -2206,12 +2206,12 @@ export class FileSystemError extends Error { return new FileSystemError(messageOrUri, FileSystemProviderErrorCode.Unavailable, FileSystemError.Unavailable); } - constructor(uriOrMessage?: string | URI, code?: string, terminator?: Function) { + constructor(uriOrMessage?: string | URI, code: FileSystemProviderErrorCode = FileSystemProviderErrorCode.Unknown, terminator?: Function) { super(URI.isUri(uriOrMessage) ? uriOrMessage.toString(true) : uriOrMessage); // mark the error as file system provider error so that // we can extract the error code on the receiving side - markAsFileSystemProviderError(this); + markAsFileSystemProviderError(this, code); // workaround when extending builtin objects and when compiling to ES5, see: // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work diff --git a/src/vs/workbench/services/files2/node/diskFileSystemProvider.ts b/src/vs/workbench/services/files2/node/diskFileSystemProvider.ts index dca3f2a9173..cfe5c21add9 100644 --- a/src/vs/workbench/services/files2/node/diskFileSystemProvider.ts +++ b/src/vs/workbench/services/files2/node/diskFileSystemProvider.ts @@ -300,7 +300,7 @@ export class DiskFileSystemProvider extends Disposable implements IFileSystemPro return error; // avoid double conversion } - let code: FileSystemProviderErrorCode | undefined = undefined; + let code: FileSystemProviderErrorCode; switch (error.code) { case 'ENOENT': code = FileSystemProviderErrorCode.FileNotFound; @@ -315,6 +315,8 @@ export class DiskFileSystemProvider extends Disposable implements IFileSystemPro case 'EACCESS': code = FileSystemProviderErrorCode.NoPermissions; break; + default: + code = FileSystemProviderErrorCode.Unknown; } return createFileSystemProviderError(error, code);