Skip to content

Commit c3d1b9f

Browse files
author
Benjamin Pasero
committed
offer reload action when extension host dies
1 parent 1902dce commit c3d1b9f

4 files changed

Lines changed: 17 additions & 10 deletions

File tree

src/vs/workbench/electron-browser/actions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ export class ReloadWindowAction extends Action {
376376
}
377377

378378
public run(): TPromise<boolean> {
379-
ipc.send('vscode:reloadWindow', this.windowService.getWindowId());
379+
this.windowService.getWindow().reload();
380380

381381
return TPromise.as(true);
382382
}

src/vs/workbench/electron-browser/shell.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import {Dimension, Builder, $} from 'vs/base/browser/builder';
2020
import objects = require('vs/base/common/objects');
2121
import dom = require('vs/base/browser/dom');
2222
import aria = require('vs/base/browser/ui/aria/aria');
23-
import {Emitter} from 'vs/base/common/event';
2423
import {disposeAll, IDisposable} from 'vs/base/common/lifecycle';
2524
import errors = require('vs/base/common/errors');
2625
import {ContextViewService} from 'vs/platform/contextview/browser/contextViewService';
@@ -97,11 +96,11 @@ import {IUntitledEditorService, UntitledEditorService} from 'vs/workbench/servic
9796
import {CrashReporter} from 'vs/workbench/electron-browser/crashReporter';
9897
import {IThemeService, DEFAULT_THEME_ID} from 'vs/workbench/services/themes/common/themeService';
9998
import {ThemeService} from 'vs/workbench/services/themes/node/themeService';
100-
import { IServiceCtor, isServiceEvent, getService } from 'vs/base/common/service';
101-
import { connect, Client } from 'vs/base/node/service.net';
102-
import { IExtensionsService } from 'vs/workbench/parts/extensions/common/extensions';
103-
import { ExtensionsService } from 'vs/workbench/parts/extensions/node/extensionsService';
104-
import { ReloadWindowAction } from 'vs/workbench/electron-browser/actions';
99+
import {getService } from 'vs/base/common/service';
100+
import {connect} from 'vs/base/node/service.net';
101+
import {IExtensionsService} from 'vs/workbench/parts/extensions/common/extensions';
102+
import {ExtensionsService} from 'vs/workbench/parts/extensions/node/extensionsService';
103+
import {ReloadWindowAction} from 'vs/workbench/electron-browser/actions';
105104

106105
/**
107106
* The Monaco Workbench Shell contains the Monaco workbench with a rich header containing navigation and the activity bar.
@@ -163,7 +162,7 @@ export class WorkbenchShell {
163162
sharedProcessClientPromise.done(service => {
164163
service.onClose(() => {
165164
this.messageService.show(Severity.Error, {
166-
message: nls.localize('sharedProcessCrashed', "The shared process terminated unexpectedly. Please reload the window."),
165+
message: nls.localize('sharedProcessCrashed', "The shared process terminated unexpectedly. Please reload the window to recover."),
167166
actions: [instantiationService.createInstance(ReloadWindowAction, ReloadWindowAction.ID, ReloadWindowAction.LABEL)]
168167
});
169168
});

src/vs/workbench/electron-browser/window.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,10 @@ export class ElectronWindow {
154154
this.win.close();
155155
}
156156

157+
public reload(): void {
158+
ipc.send('vscode:reloadWindow', this.win.id);
159+
}
160+
157161
public showMessageBox(options: Electron.Dialog.ShowMessageBoxOptions): number {
158162
return remote.dialog.showMessageBox(this.win, options);
159163
}

src/vs/workbench/services/thread/electron-browser/threadService.ts

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

66
'use strict';
77

8+
import {Action} from 'vs/base/common/actions';
89
import {TPromise} from 'vs/base/common/winjs.base';
910
import nls = require('vs/nls');
1011
import {MainThreadService as CommonMainThreadService} from 'vs/platform/thread/common/mainThreadService';
@@ -176,7 +177,7 @@ class PluginHostProcessManager {
176177

177178
// Support logging from plugin host
178179
else if (msg && (<ILogEntry>msg).type === '__$console') {
179-
let logEntry:ILogEntry = msg;
180+
let logEntry: ILogEntry = msg;
180181

181182
let args = [];
182183
try {
@@ -243,7 +244,10 @@ class PluginHostProcessManager {
243244

244245
// Unexpected termination
245246
if (!this.isPluginDevelopmentHost) {
246-
this.messageService.show(Severity.Error, nls.localize('pluginHostProcess.crash', "Extension host terminated unexpectedly. Please restart VSCode to recover."));
247+
this.messageService.show(Severity.Error, {
248+
message: nls.localize('pluginHostProcess.crash', "Extension host terminated unexpectedly. Please reload the window to recover."),
249+
actions: [new Action('reloadWindow', nls.localize('reloadWindow', "Reload Window"), null, true, () => { this.windowService.getWindow().reload(); return TPromise.as(null); })]
250+
});
247251
console.error('Plugin host terminated unexpectedly. Code: ', code, ' Signal: ', signal);
248252
}
249253

0 commit comments

Comments
 (0)