Always reject Promises with Error instances

This commit is contained in:
Felix Becker
2017-06-19 19:35:58 +02:00
parent d0a6cc2715
commit dbe0f89264
63 changed files with 207 additions and 236 deletions

View File

@@ -343,7 +343,7 @@ export class ExtHostApiCommands {
return undefined;
}
if (value.rejectReason) {
return TPromise.wrapError<types.WorkspaceEdit>(value.rejectReason);
return TPromise.wrapError<types.WorkspaceEdit>(new Error(value.rejectReason));
}
let workspaceEdit = new types.WorkspaceEdit();
for (let edit of value.edits) {

View File

@@ -104,7 +104,7 @@ export class ExtHostCommands extends ExtHostCommandsShape {
$executeContributedCommand<T>(id: string, ...args: any[]): Thenable<T> {
let command = this._commands.get(id);
if (!command) {
return TPromise.wrapError<T>(`Contributed command '${id}' does not exist.`);
return TPromise.wrapError<T>(new Error(`Contributed command '${id}' does not exist.`));
}
let { callback, thisArg, description } = command;
@@ -114,7 +114,7 @@ export class ExtHostCommands extends ExtHostCommandsShape {
try {
validateConstraint(args[i], description.args[i].constraint);
} catch (err) {
return TPromise.wrapError<T>(`Running the contributed command:'${id}' failed. Illegal argument '${description.args[i].name}' - ${description.args[i].description}`);
return TPromise.wrapError<T>(new Error(`Running the contributed command:'${id}' failed. Illegal argument '${description.args[i].name}' - ${description.args[i].description}`));
}
}
}
@@ -131,7 +131,7 @@ export class ExtHostCommands extends ExtHostCommandsShape {
// } catch (err) {
// //
// }
return TPromise.wrapError<T>(`Running the contributed command:'${id}' failed.`);
return TPromise.wrapError<T>(new Error(`Running the contributed command:'${id}' failed.`));
}
}

View File

@@ -101,7 +101,7 @@ export class ExtHostDocumentData extends MirrorModel {
private _save(): TPromise<boolean> {
if (this._isDisposed) {
return TPromise.wrapError<boolean>('Document has been closed');
return TPromise.wrapError<boolean>(new Error('Document has been closed'));
}
return this._proxy.$trySaveDocument(this._uri);
}

View File

@@ -154,7 +154,7 @@ export class ExtHostDocuments extends ExtHostDocumentsShape {
public $provideTextDocumentContent(handle: number, uri: URI): TPromise<string> {
const provider = this._documentContentProviders.get(handle);
if (!provider) {
return TPromise.wrapError<string>(`unsupported uri-scheme: ${uri.scheme}`);
return TPromise.wrapError<string>(new Error(`unsupported uri-scheme: ${uri.scheme}`));
}
return asWinJsPromise(token => provider.provideTextDocumentContent(uri, token));
}

View File

@@ -399,7 +399,7 @@ export class ExtHostTextEditor implements vscode.TextEditor {
throw illegalArgument('selection');
}
this._selections = [value];
this._trySetSelection(true);
this._trySetSelection();
}
get selections(): Selection[] {
@@ -411,7 +411,7 @@ export class ExtHostTextEditor implements vscode.TextEditor {
throw illegalArgument('selections');
}
this._selections = value;
this._trySetSelection(true);
this._trySetSelection();
}
setDecorations(decorationType: vscode.TextEditorDecorationType, ranges: Range[] | vscode.DecorationOptions[]): void {
@@ -420,8 +420,7 @@ export class ExtHostTextEditor implements vscode.TextEditor {
this._id,
decorationType.key,
TypeConverters.fromRangeOrRangeWithMessage(ranges)
),
true
)
);
}
@@ -431,14 +430,13 @@ export class ExtHostTextEditor implements vscode.TextEditor {
this._id,
TypeConverters.fromRange(range),
(revealType || TextEditorRevealType.Default)
),
true
)
);
}
private _trySetSelection(silent: boolean): TPromise<vscode.TextEditor> {
private _trySetSelection(): TPromise<vscode.TextEditor> {
let selection = this._selections.map(TypeConverters.fromSelection);
return this._runOnProxy(() => this._proxy.$trySetSelections(this._id, selection), silent);
return this._runOnProxy(() => this._proxy.$trySetSelections(this._id, selection));
}
_acceptSelections(selections: Selection[]): void {
@@ -450,7 +448,7 @@ export class ExtHostTextEditor implements vscode.TextEditor {
edit(callback: (edit: TextEditorEdit) => void, options: { undoStopBefore: boolean; undoStopAfter: boolean; } = { undoStopBefore: true, undoStopAfter: true }): Thenable<boolean> {
if (this._disposed) {
return TPromise.wrapError<boolean>('TextEditor#edit not possible on closed editors');
return TPromise.wrapError<boolean>(new Error('TextEditor#edit not possible on closed editors'));
}
let edit = new TextEditorEdit(this._documentData.document, options);
callback(edit);
@@ -508,7 +506,7 @@ export class ExtHostTextEditor implements vscode.TextEditor {
insertSnippet(snippet: SnippetString, where?: Position | Position[] | Range | Range[], options: { undoStopBefore: boolean; undoStopAfter: boolean; } = { undoStopBefore: true, undoStopAfter: true }): Thenable<boolean> {
if (this._disposed) {
return TPromise.wrapError<boolean>('TextEditor#insertSnippet not possible on closed editors');
return TPromise.wrapError<boolean>(new Error('TextEditor#insertSnippet not possible on closed editors'));
}
let ranges: IRange[];
@@ -538,19 +536,12 @@ export class ExtHostTextEditor implements vscode.TextEditor {
// ---- util
private _runOnProxy(callback: () => TPromise<any>, silent: boolean): TPromise<ExtHostTextEditor> {
private _runOnProxy(callback: () => TPromise<any>): TPromise<ExtHostTextEditor> {
if (this._disposed) {
if (!silent) {
return TPromise.wrapError<ExtHostTextEditor>(silent);
} else {
console.warn('TextEditor is closed/disposed');
return TPromise.as(undefined);
}
console.warn('TextEditor is closed/disposed');
return TPromise.as(undefined);
}
return callback().then(() => this, err => {
if (!silent) {
return TPromise.wrapError<ExtHostTextEditor>(silent);
}
console.warn(err);
return undefined;
});

View File

@@ -53,7 +53,7 @@ export class ExtHostTreeViews extends ExtHostTreeViewsShape {
$getElements(treeViewId: string): TPromise<ITreeItem[]> {
const treeView = this.treeViews.get(treeViewId);
if (!treeView) {
return TPromise.wrapError<ITreeItem[]>(localize('treeView.notRegistered', 'No tree view with id \'{0}\' registered.', treeViewId));
return TPromise.wrapError<ITreeItem[]>(new Error(localize('treeView.notRegistered', 'No tree view with id \'{0}\' registered.', treeViewId)));
}
return treeView.getTreeItems();
}
@@ -61,7 +61,7 @@ export class ExtHostTreeViews extends ExtHostTreeViewsShape {
$getChildren(treeViewId: string, treeItemHandle?: number): TPromise<ITreeItem[]> {
const treeView = this.treeViews.get(treeViewId);
if (!treeView) {
return TPromise.wrapError<ITreeItem[]>(localize('treeView.notRegistered', 'No tree view with id \'{0}\' registered.', treeViewId));
return TPromise.wrapError<ITreeItem[]>(new Error(localize('treeView.notRegistered', 'No tree view with id \'{0}\' registered.', treeViewId)));
}
return treeView.getChildren(treeItemHandle);
}
@@ -102,7 +102,7 @@ class ExtHostTreeView<T> extends Disposable {
if (extElement) {
this.clearChildren(extElement);
} else {
return TPromise.wrapError<ITreeItem[]>(localize('treeItem.notFound', 'No tree item with id \'{0}\' found.', treeItemHandle));
return TPromise.wrapError<ITreeItem[]>(new Error(localize('treeItem.notFound', 'No tree item with id \'{0}\' found.', treeItemHandle)));
}
return asWinJsPromise(() => this.dataProvider.getChildren(extElement))
@@ -130,7 +130,7 @@ class ExtHostTreeView<T> extends Disposable {
elements.filter(element => !!element)
.map(element => {
if (this.extChildrenElementsMap.has(element)) {
return TPromise.wrapError<ITreeItem>(localize('treeView.duplicateElement', 'Element {0} is already registered', element));
return TPromise.wrapError<ITreeItem>(new Error(localize('treeView.duplicateElement', 'Element {0} is already registered', element)));
}
return this.resolveElement(element);
}))