Skip to content

Commit

Permalink
Log errors from feature providers as external (#16128)
Browse files Browse the repository at this point in the history
* Log errors from feature providers as external

* rename errors should bubble up, why?, fixes test failures

* log errors from format
  • Loading branch information
ramya-rao-a committed Dec 1, 2016
1 parent 5e0e796 commit aa099fe
Show file tree
Hide file tree
Showing 13 changed files with 42 additions and 30 deletions.
13 changes: 13 additions & 0 deletions src/vs/base/common/errors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,11 @@ export class ErrorHandler {
this.unexpectedErrorHandler(e);
this.emit(e);
}

// For external errors, we don't want the listeners to be called
public onUnexpectedExternalError(e: any): void {
this.unexpectedErrorHandler(e);
}
}

export let errorHandler = new ErrorHandler();
Expand All @@ -84,6 +89,14 @@ export function onUnexpectedError(e: any): void {
}
}

export function onUnexpectedExternalError(e: any): void {

// ignore errors from cancelled promises
if (!isPromiseCanceledError(e)) {
errorHandler.onUnexpectedExternalError(e);
}
}

export function onUnexpectedPromiseError<T>(promise: TPromise<T>): TPromise<T> {
return promise.then<T>(null, onUnexpectedError);
}
Expand Down
4 changes: 2 additions & 2 deletions src/vs/editor/contrib/codelens/common/codelens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

'use strict';

import { illegalArgument, onUnexpectedError } from 'vs/base/common/errors';
import { illegalArgument, onUnexpectedExternalError } from 'vs/base/common/errors';
import URI from 'vs/base/common/uri';
import { TPromise } from 'vs/base/common/winjs.base';
import { IModel } from 'vs/editor/common/editorCommon';
Expand All @@ -30,7 +30,7 @@ export function getCodeLensData(model: IModel): TPromise<ICodeLensData[]> {
symbols.push({ symbol, provider });
}
}
}, onUnexpectedError));
}, onUnexpectedExternalError));

return TPromise.join(promises).then(() => {
return symbols.sort((a, b) => {
Expand Down
12 changes: 4 additions & 8 deletions src/vs/editor/contrib/format/common/format.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

'use strict';

import { illegalArgument } from 'vs/base/common/errors';
import { illegalArgument, onUnexpectedExternalError } from 'vs/base/common/errors';
import URI from 'vs/base/common/uri';
import { isFalsyOrEmpty } from 'vs/base/common/arrays';
import { TPromise } from 'vs/base/common/winjs.base';
Expand All @@ -31,9 +31,7 @@ export function getDocumentRangeFormattingEdits(model: IReadOnlyModel, range: Ra
return () => {
return asWinJsPromise(token => provider.provideDocumentRangeFormattingEdits(model, range, options, token)).then(value => {
result = value;
}, err => {
// ignore
});
}, onUnexpectedExternalError);
};
}
})).then(() => result);
Expand All @@ -53,9 +51,7 @@ export function getDocumentFormattingEdits(model: IReadOnlyModel, options: Forma
return () => {
return asWinJsPromise(token => provider.provideDocumentFormattingEdits(model, options, token)).then(value => {
result = value;
}, err => {
// ignore
});
}, onUnexpectedExternalError);
};
}
})).then(() => result);
Expand All @@ -72,7 +68,7 @@ export function getOnTypeFormattingEdits(model: IReadOnlyModel, position: Positi

return asWinJsPromise((token) => {
return support.provideOnTypeFormattingEdits(model, position, ch, options, token);
});
}).then(r => r, onUnexpectedExternalError);
}

CommonEditorRegistry.registerLanguageCommand('_executeFormatRangeProvider', function (accessor, args) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

'use strict';

import { onUnexpectedError } from 'vs/base/common/errors';
import { onUnexpectedExternalError } from 'vs/base/common/errors';
import { TPromise } from 'vs/base/common/winjs.base';
import { IReadOnlyModel } from 'vs/editor/common/editorCommon';
import { CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';
Expand All @@ -24,7 +24,7 @@ export function getDeclarationsAtPosition(model: IReadOnlyModel, position: Posit
}).then(result => {
return result;
}, err => {
onUnexpectedError(err);
onUnexpectedExternalError(err);
});
});

Expand Down
4 changes: 2 additions & 2 deletions src/vs/editor/contrib/hover/common/hover.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
'use strict';

import { coalesce } from 'vs/base/common/arrays';
import { onUnexpectedError } from 'vs/base/common/errors';
import { onUnexpectedExternalError } from 'vs/base/common/errors';
import { TPromise } from 'vs/base/common/winjs.base';
import { IReadOnlyModel } from 'vs/editor/common/editorCommon';
import { CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';
Expand All @@ -31,7 +31,7 @@ export function getHover(model: IReadOnlyModel, position: Position): TPromise<Ho
}
}
}, err => {
onUnexpectedError(err);
onUnexpectedExternalError(err);
});
});

Expand Down
4 changes: 2 additions & 2 deletions src/vs/editor/contrib/links/common/links.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

'use strict';

import { onUnexpectedError } from 'vs/base/common/errors';
import { onUnexpectedExternalError } from 'vs/base/common/errors';
import URI from 'vs/base/common/uri';
import { TPromise } from 'vs/base/common/winjs.base';
import { Range } from 'vs/editor/common/core/range';
Expand Down Expand Up @@ -69,7 +69,7 @@ export function getLinks(model: IReadOnlyModel): TPromise<Link[]> {
const newLinks = result.map(link => new Link(link, provider));
links = union(links, newLinks);
}
}, onUnexpectedError);
}, onUnexpectedExternalError);
});

return TPromise.join(promises).then(() => {
Expand Down
4 changes: 2 additions & 2 deletions src/vs/editor/contrib/parameterHints/common/parameterHints.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
'use strict';

import { TPromise } from 'vs/base/common/winjs.base';
import { onUnexpectedError } from 'vs/base/common/errors';
import { onUnexpectedExternalError } from 'vs/base/common/errors';
import { IReadOnlyModel } from 'vs/editor/common/editorCommon';
import { CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';
import { SignatureHelp, SignatureHelpProviderRegistry } from 'vs/editor/common/modes';
Expand All @@ -33,7 +33,7 @@ export function provideSignatureHelp(model: IReadOnlyModel, position: Position):

return asWinJsPromise(token => support.provideSignatureHelp(model, position, token)).then(thisResult => {
result = thisResult;
}, onUnexpectedError);
}, onUnexpectedExternalError);

})).then(() => result);
}
Expand Down
4 changes: 2 additions & 2 deletions src/vs/editor/contrib/quickFix/common/quickFix.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

'use strict';

import { illegalArgument, onUnexpectedError } from 'vs/base/common/errors';
import { illegalArgument, onUnexpectedExternalError } from 'vs/base/common/errors';
import URI from 'vs/base/common/uri';
import { TPromise } from 'vs/base/common/winjs.base';
import { Range } from 'vs/editor/common/core/range';
Expand All @@ -24,7 +24,7 @@ export function getCodeActions(model: IReadOnlyModel, range: Range): TPromise<Co
allResults.push(...result);
}
}, err => {
onUnexpectedError(err);
onUnexpectedExternalError(err);
});
});

Expand Down
4 changes: 2 additions & 2 deletions src/vs/editor/contrib/quickOpen/common/quickOpen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

'use strict';

import { illegalArgument, onUnexpectedError } from 'vs/base/common/errors';
import { illegalArgument, onUnexpectedExternalError } from 'vs/base/common/errors';
import URI from 'vs/base/common/uri';
import { TPromise } from 'vs/base/common/winjs.base';
import { Range } from 'vs/editor/common/core/range';
Expand All @@ -32,7 +32,7 @@ export function getDocumentSymbols(model: IModel): TPromise<IOutline> {
entries.push(...result);
}
}, err => {
onUnexpectedError(err);
onUnexpectedExternalError(err);
});
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

'use strict';

import { onUnexpectedError } from 'vs/base/common/errors';
import { onUnexpectedExternalError } from 'vs/base/common/errors';
import { TPromise } from 'vs/base/common/winjs.base';
import { IReadOnlyModel } from 'vs/editor/common/editorCommon';
import { CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';
Expand All @@ -24,7 +24,7 @@ export function provideReferences(model: IReadOnlyModel, position: Position): TP
return <Location[]>result;
}
}, err => {
onUnexpectedError(err);
onUnexpectedExternalError(err);
});
});

Expand Down
7 changes: 5 additions & 2 deletions src/vs/editor/contrib/rename/common/rename.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import { localize } from 'vs/nls';
import { sequence, asWinJsPromise } from 'vs/base/common/async';
import { illegalArgument } from 'vs/base/common/errors';
import { illegalArgument, onUnexpectedExternalError } from 'vs/base/common/errors';
import { TPromise } from 'vs/base/common/winjs.base';
import { IReadOnlyModel } from 'vs/editor/common/editorCommon';
import { CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';
Expand All @@ -34,6 +34,9 @@ export function rename(model: IReadOnlyModel, position: Position, newName: strin
} else {
rejects.push(result.rejectReason);
}
}, err => {
onUnexpectedExternalError(err);
return TPromise.wrapError<WorkspaceEdit>('provider failed');
});
}
};
Expand Down Expand Up @@ -63,4 +66,4 @@ CommonEditorRegistry.registerDefaultLanguageCommand('_executeDocumentRenameProvi
throw illegalArgument('newName');
}
return rename(model, position, newName);
});
});
4 changes: 2 additions & 2 deletions src/vs/editor/contrib/suggest/common/suggest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { sequence, asWinJsPromise } from 'vs/base/common/async';
import { isFalsyOrEmpty } from 'vs/base/common/arrays';
import { compare } from 'vs/base/common/strings';
import { assign } from 'vs/base/common/objects';
import { onUnexpectedError } from 'vs/base/common/errors';
import { onUnexpectedExternalError } from 'vs/base/common/errors';
import { TPromise } from 'vs/base/common/winjs.base';
import { IModel, IPosition } from 'vs/editor/common/editorCommon';
import { CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions';
Expand Down Expand Up @@ -106,7 +106,7 @@ export function provideSuggestionItems(model: IModel, position: Position, snippe
hasResult = true;
}

}, onUnexpectedError);
}, onUnexpectedExternalError);
}));
};
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
'use strict';

import { sequence, asWinJsPromise } from 'vs/base/common/async';
import { onUnexpectedError } from 'vs/base/common/errors';
import { onUnexpectedExternalError } from 'vs/base/common/errors';
import { TPromise } from 'vs/base/common/winjs.base';
import { Range } from 'vs/editor/common/core/range';
import * as editorCommon from 'vs/editor/common/editorCommon';
Expand Down Expand Up @@ -33,7 +33,7 @@ export function getOccurrencesAtPosition(model: editorCommon.IReadOnlyModel, pos
return data;
}
}, err => {
onUnexpectedError(err);
onUnexpectedExternalError(err);
});
}
};
Expand Down

0 comments on commit aa099fe

Please sign in to comment.