Skip to content

Commit dbb0163

Browse files
committed
Show an error message instead of warning
1 parent b6de270 commit dbb0163

File tree

7 files changed

+83
-18
lines changed

7 files changed

+83
-18
lines changed

src/main.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import { ProjectStatusBarObserver } from './observers/ProjectStatusBarObserver';
3030
import CSharpExtensionExports from './CSharpExtensionExports';
3131
import { Options } from './omnisharp/options';
3232
import { vscodeNetworkSettingsProvider, NetworkSettingsProvider } from './NetworkSettings';
33+
import { ErrorMessageObserver } from './observers/ErrorMessageObserver';
3334

3435
export async function activate(context: vscode.ExtensionContext): Promise<CSharpExtensionExports> {
3536

@@ -67,6 +68,9 @@ export async function activate(context: vscode.ExtensionContext): Promise<CSharp
6768
let informationMessageObserver = new InformationMessageObserver(vscode);
6869
eventStream.subscribe(informationMessageObserver.post);
6970

71+
let errorMessageObserver = new ErrorMessageObserver(vscode);
72+
eventStream.subscribe(errorMessageObserver.post);
73+
7074
let omnisharpStatusBar = new StatusBarItemAdapter(vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, Number.MIN_VALUE));
7175
let omnisharpStatusBarObserver = new OmnisharpStatusBarObserver(omnisharpStatusBar);
7276
eventStream.subscribe(omnisharpStatusBarObserver.post);
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
7+
import { BaseEvent, ZipError } from "../omnisharp/loggingEvents";
8+
import { vscode } from "../vscodeAdapter";
9+
10+
export class ErrorMessageObserver {
11+
12+
constructor(private vscode: vscode) {
13+
}
14+
15+
public post = (event: BaseEvent) => {
16+
switch (event.constructor.name) {
17+
case ZipError.name:
18+
this.handleZipError(<ZipError>event);
19+
break;
20+
}
21+
}
22+
23+
private async handleZipError(event: ZipError) {
24+
await showErrorMessage(this.vscode, event.message);
25+
}
26+
}
27+
28+
async function showErrorMessage(vscode: vscode, message: string, ...items: string[]) {
29+
try {
30+
await vscode.window.showErrorMessage(message, ...items);
31+
}
32+
catch (err) {
33+
console.log(err);
34+
}
35+
}

src/observers/WarningMessageObserver.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { MessageItem, vscode } from '../vscodeAdapter';
7-
import { BaseEvent, OmnisharpServerOnError, OmnisharpServerMsBuildProjectDiagnostics, ZipError } from "../omnisharp/loggingEvents";
7+
import { BaseEvent, OmnisharpServerOnError, OmnisharpServerMsBuildProjectDiagnostics } from "../omnisharp/loggingEvents";
88
import { Scheduler } from 'rxjs/Scheduler';
99
import { Subject } from 'rxjs/Subject';
1010
import 'rxjs/add/operator/debounceTime';
@@ -32,9 +32,6 @@ export class WarningMessageObserver {
3232
case OmnisharpServerMsBuildProjectDiagnostics.name:
3333
this.handleOmnisharpServerMsBuildProjectDiagnostics(<OmnisharpServerMsBuildProjectDiagnostics>event);
3434
break;
35-
case ZipError.name:
36-
this.handleZipError(<ZipError>event);
37-
break;
3835
}
3936
}
4037

@@ -43,10 +40,6 @@ export class WarningMessageObserver {
4340
this.warningMessageDebouncer.next(event);
4441
}
4542
}
46-
47-
private async handleZipError(event: ZipError) {
48-
await showWarningMessage(this.vscode, event.message);
49-
}
5043
}
5144

5245
async function showWarningMessage(vscode: vscode, message: string, ...items: MessageItemWithCommand[]) {

src/vscodeAdapter.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -900,6 +900,7 @@ export interface vscode {
900900
activeTextEditor: TextEditor | undefined;
901901
showInformationMessage: (message: string, ...items: string[]) => Thenable<string | undefined>;
902902
showWarningMessage: <T extends MessageItem>(message: string, ...items: T[]) => Thenable<T | undefined>;
903+
showErrorMessage(message: string, ...items: string[]): Thenable<string | undefined>;
903904
};
904905
workspace: {
905906
getConfiguration: (section?: string, resource?: Uri) => WorkspaceConfiguration;
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { use as chaiUse, expect, should } from 'chai';
7+
import { vscode } from '../../../src/vscodeAdapter';
8+
import { getFakeVsCode } from '../testAssets/Fakes';
9+
import 'rxjs/add/observable/fromPromise';
10+
import 'rxjs/add/operator/timeout';
11+
import { ErrorMessageObserver } from '../../../src/observers/ErrorMessageObserver';
12+
import { ZipError } from '../../../src/omnisharp/loggingEvents';
13+
14+
chaiUse(require('chai-as-promised'));
15+
chaiUse(require('chai-string'));
16+
17+
suite("ErrorMessageObserver", () => {
18+
suiteSetup(() => should());
19+
20+
let vscode: vscode = getFakeVsCode();
21+
let errorMessage: string;
22+
let observer = new ErrorMessageObserver(vscode);
23+
24+
vscode.window.showErrorMessage = async (message: string, ...items: string[]) => {
25+
errorMessage = message;
26+
return Promise.resolve<string>("Done");
27+
};
28+
29+
setup(() => {
30+
errorMessage = undefined;
31+
});
32+
33+
test('ZipError: Error message is shown', () => {
34+
let event = new ZipError("This is an error");
35+
observer.post(event);
36+
expect(errorMessage).to.be.equal("This is an error");
37+
});
38+
});

test/unitTests/logging/WarningMessageObserver.test.ts

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import { WarningMessageObserver } from '../../../src/observers/WarningMessageObserver';
77
import { assert, use as chaiUse, expect, should } from 'chai';
88
import { getFakeVsCode, getMSBuildDiagnosticsMessage, getOmnisharpMSBuildProjectDiagnosticsEvent, getOmnisharpServerOnErrorEvent } from '../testAssets/Fakes';
9-
import { BaseEvent, ZipError } from '../../../src/omnisharp/loggingEvents';
9+
import { BaseEvent } from '../../../src/omnisharp/loggingEvents';
1010
import { vscode } from '../../../src/vscodeAdapter';
1111
import { TestScheduler } from 'rxjs/testing/TestScheduler';
1212
import { Observable } from 'rxjs/Observable';
@@ -172,15 +172,6 @@ suite('WarningMessageObserver', () => {
172172
});
173173
});
174174
});
175-
176-
suite('ZipError', () => {
177-
test('When the event is fired then a warning message is displayed', () => {
178-
let event = new ZipError("This is an error");
179-
observer.post(event);
180-
expect(warningMessages.length).to.be.equal(1);
181-
expect(warningMessages[0]).to.be.equal("This is an error");
182-
});
183-
});
184175
});
185176

186177
function timeToMarble(timeinMilliseconds: number): string {

test/unitTests/testAssets/Fakes.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,9 @@ export function getFakeVsCode(): vscode.vscode {
132132
},
133133
showWarningMessage: <T extends MessageItem>(message: string, ...items: T[]) => {
134134
throw new Error("Not Implemented");
135+
},
136+
showErrorMessage: (message: string, ...items: string[]) => {
137+
throw new Error("Not Implemented");
135138
}
136139
},
137140
workspace: {

0 commit comments

Comments
 (0)