Skip to content

Commit 2e3c24c

Browse files
authored
use name property for errornotelemetry (microsoft#151974)
* use name property for errornotelemetry * fix ENOPRO errors * fileoperationerror extends error now
1 parent c7a9cd2 commit 2e3c24c

File tree

5 files changed

+24
-20
lines changed

5 files changed

+24
-20
lines changed

src/vs/base/common/errors.ts

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ export class ErrorHandler {
2323
this.unexpectedErrorHandler = function (e: any) {
2424
setTimeout(() => {
2525
if (e.stack) {
26+
if (ErrorNoTelemetry.isErrorNoTelemetry(e)) {
27+
throw new ErrorNoTelemetry(e.message + '\n\n' + e.stack);
28+
}
29+
2630
throw new Error(e.message + '\n\n' + e.stack);
2731
}
2832

@@ -109,7 +113,7 @@ export function transformErrorForSerialization(error: any): any {
109113
name,
110114
message,
111115
stack,
112-
noTelemetry: error instanceof ErrorNoTelemetry
116+
noTelemetry: ErrorNoTelemetry.isErrorNoTelemetry(error)
113117
};
114118
}
115119

@@ -235,24 +239,27 @@ export class ExpectedError extends Error {
235239
* Error that when thrown won't be logged in telemetry as an unhandled error.
236240
*/
237241
export class ErrorNoTelemetry extends Error {
242+
override readonly name: string;
238243

239-
public static fromError(err: any): ErrorNoTelemetry {
240-
if (err && err instanceof ErrorNoTelemetry) {
241-
return err;
242-
}
244+
constructor(msg?: string) {
245+
super(msg);
246+
this.name = 'ErrorNoTelemetry';
247+
}
243248

244-
if (err && err instanceof Error) {
245-
const result = new ErrorNoTelemetry();
246-
result.name = err.name;
247-
result.message = err.message;
248-
result.stack = err.stack;
249-
return result;
249+
public static fromError(err: Error): ErrorNoTelemetry {
250+
if (err instanceof ErrorNoTelemetry) {
251+
return err;
250252
}
251253

252-
return new ErrorNoTelemetry(err);
254+
const result = new ErrorNoTelemetry();
255+
result.message = err.message;
256+
result.stack = err.stack;
257+
return result;
253258
}
254259

255-
readonly logTelemetry = false;
260+
public static isErrorNoTelemetry(err: Error): err is ErrorNoTelemetry {
261+
return err.name === 'ErrorNoTelemetry';
262+
}
256263
}
257264

258265
/**

src/vs/platform/files/common/fileService.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { coalesce } from 'vs/base/common/arrays';
77
import { Promises, ResourceQueue } from 'vs/base/common/async';
88
import { bufferedStreamToBuffer, bufferToReadable, newWriteableBufferStream, readableToBuffer, streamToBuffer, VSBuffer, VSBufferReadable, VSBufferReadableBufferedStream, VSBufferReadableStream } from 'vs/base/common/buffer';
99
import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation';
10-
import { ErrorNoTelemetry } from 'vs/base/common/errors';
1110
import { Emitter } from 'vs/base/common/event';
1211
import { hash } from 'vs/base/common/hash';
1312
import { Iterable } from 'vs/base/common/iterator';
@@ -137,7 +136,7 @@ export class FileService extends Disposable implements IFileService {
137136
// Assert provider
138137
const provider = this.provider.get(resource.scheme);
139138
if (!provider) {
140-
const error = new ErrorNoTelemetry();
139+
const error = new Error();
141140
error.name = 'ENOPRO';
142141
error.message = localize('noProviderFound', "No file system provider found for resource '{0}'", resource.toString());
143142

src/vs/platform/files/common/files.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
import { VSBuffer, VSBufferReadable, VSBufferReadableStream } from 'vs/base/common/buffer';
77
import { CancellationToken } from 'vs/base/common/cancellation';
8-
import { ErrorNoTelemetry } from 'vs/base/common/errors';
98
import { Event } from 'vs/base/common/event';
109
import { IExpression, IRelativePattern } from 'vs/base/common/glob';
1110
import { IDisposable } from 'vs/base/common/lifecycle';
@@ -1148,7 +1147,7 @@ export interface ICreateFileOptions {
11481147
readonly overwrite?: boolean;
11491148
}
11501149

1151-
export class FileOperationError extends ErrorNoTelemetry {
1150+
export class FileOperationError extends Error {
11521151
constructor(
11531152
message: string,
11541153
readonly fileOperationResult: FileOperationResult,

src/vs/platform/telemetry/browser/errorTelemetry.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export default class ErrorTelemetry extends BaseErrorTelemetry {
3939

4040
if (err) {
4141
// If it's the no telemetry error it doesn't get logged
42-
if (err instanceof ErrorNoTelemetry) {
42+
if (ErrorNoTelemetry.isErrorNoTelemetry(err)) {
4343
return;
4444
}
4545

src/vs/workbench/api/common/extHostFileSystem.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import { CharCode } from 'vs/base/common/charCode';
1717
import { VSBuffer } from 'vs/base/common/buffer';
1818
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
1919
import { checkProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions';
20-
import { ErrorNoTelemetry } from 'vs/base/common/errors';
2120

2221
class FsLinkProvider {
2322

@@ -296,7 +295,7 @@ export class ExtHostFileSystem implements ExtHostFileSystemShape {
296295
private _getFsProvider(handle: number): vscode.FileSystemProvider {
297296
const provider = this._fsProvider.get(handle);
298297
if (!provider) {
299-
const err = new ErrorNoTelemetry();
298+
const err = new Error();
300299
err.name = 'ENOPRO';
301300
err.message = `no provider`;
302301
throw err;

0 commit comments

Comments
 (0)