Skip to content

Commit a706e71

Browse files
committed
Send workspace label with ServerStatusChange event
1 parent 021cc51 commit a706e71

File tree

7 files changed

+40
-38
lines changed

7 files changed

+40
-38
lines changed

src/lsptoolshost/debugger.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { IWorkspaceDebugInformationProvider } from '../shared/IWorkspaceDebugInf
1010
import { RoslynLanguageServer } from './roslynLanguageServer';
1111
import { RoslynWorkspaceDebugInformationProvider } from './roslynWorkspaceDebugConfigurationProvider';
1212
import { PlatformInformation } from '../shared/platform';
13-
import { ServerStateChange } from './serverStateChange';
13+
import { ServerState } from './serverStateChange';
1414
import { DotnetConfigurationResolver } from '../shared/dotnetConfigurationProvider';
1515
import { getCSharpDevKit } from '../utils/getCSharpDevKit';
1616
import { RoslynLanguageServerEvents } from './languageServerEvents';
@@ -25,8 +25,8 @@ export function registerDebugger(
2525
const workspaceInformationProvider: IWorkspaceDebugInformationProvider =
2626
new RoslynWorkspaceDebugInformationProvider(languageServer, csharpOutputChannel);
2727

28-
const disposable = languageServerEvents.onServerStateChange(async (state) => {
29-
if (state === ServerStateChange.ProjectInitializationComplete) {
28+
const disposable = languageServerEvents.onServerStateChange(async (e) => {
29+
if (e.state === ServerState.ProjectInitializationComplete) {
3030
const csharpDevkitExtension = getCSharpDevKit();
3131
if (!csharpDevkitExtension) {
3232
// Update or add tasks.json and launch.json

src/lsptoolshost/languageServerEvents.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import * as vscode from 'vscode';
7-
import { ServerStateChange } from './serverStateChange';
7+
import { ServerStateChangeEvent } from './serverStateChange';
88
import { IDisposable } from '../disposable';
99

1010
/**
1111
* Defines events that are fired by the language server.
1212
* These events can be consumed to wait for the server to reach a certain state.
1313
*/
1414
export interface LanguageServerEvents {
15-
readonly onServerStateChange: vscode.Event<ServerStateChange>;
15+
readonly onServerStateChange: vscode.Event<ServerStateChangeEvent>;
1616
}
1717

1818
/**
@@ -21,9 +21,9 @@ export interface LanguageServerEvents {
2121
* register for events without having to know about the specific current state of the language server.
2222
*/
2323
export class RoslynLanguageServerEvents implements LanguageServerEvents, IDisposable {
24-
public readonly onServerStateChangeEmitter = new vscode.EventEmitter<ServerStateChange>();
24+
public readonly onServerStateChangeEmitter = new vscode.EventEmitter<ServerStateChangeEvent>();
2525

26-
public get onServerStateChange(): vscode.Event<ServerStateChange> {
26+
public get onServerStateChange(): vscode.Event<ServerStateChangeEvent> {
2727
return this.onServerStateChangeEmitter.event;
2828
}
2929

src/lsptoolshost/languageStatusBar.ts

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import * as vscode from 'vscode';
77
import { RoslynLanguageServer } from './roslynLanguageServer';
88
import { RoslynLanguageServerEvents } from './languageServerEvents';
99
import { languageServerOptions } from '../shared/options';
10-
import { ServerStateChange } from './serverStateChange';
10+
import { ServerState } from './serverStateChange';
1111
import { getCSharpDevKit } from '../utils/getCSharpDevKit';
1212

1313
export function registerLanguageStatusItems(
@@ -17,16 +17,12 @@ export function registerLanguageStatusItems(
1717
) {
1818
// DevKit will provide an equivalent workspace status item.
1919
if (!getCSharpDevKit()) {
20-
WorkspaceStatus.createStatusItem(context, languageServer, languageServerEvents);
20+
WorkspaceStatus.createStatusItem(context, languageServerEvents);
2121
}
2222
}
2323

2424
class WorkspaceStatus {
25-
static createStatusItem(
26-
context: vscode.ExtensionContext,
27-
languageServer: RoslynLanguageServer,
28-
languageServerEvents: RoslynLanguageServerEvents
29-
) {
25+
static createStatusItem(context: vscode.ExtensionContext, languageServerEvents: RoslynLanguageServerEvents) {
3026
const item = vscode.languages.createLanguageStatusItem(
3127
'csharp.workspaceStatus',
3228
languageServerOptions.documentSelector
@@ -39,13 +35,8 @@ class WorkspaceStatus {
3935
context.subscriptions.push(item);
4036

4137
languageServerEvents.onServerStateChange((e) => {
42-
if (e === ServerStateChange.ProjectInitializationStarted) {
43-
item.text = languageServer.workspaceDisplayName();
44-
item.busy = true;
45-
} else if (e === ServerStateChange.ProjectInitializationComplete) {
46-
item.text = languageServer.workspaceDisplayName();
47-
item.busy = false;
48-
}
38+
item.text = e.workspaceLabel;
39+
item.busy = e.state === ServerState.ProjectInitializationStarted;
4940
});
5041
}
5142
}

src/lsptoolshost/roslynLanguageServer.ts

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import ShowInformationMessage from '../shared/observers/utils/showInformationMes
3737
import * as RoslynProtocol from './roslynProtocol';
3838
import { CSharpDevKitExports } from '../csharpDevKitExports';
3939
import { SolutionSnapshotId } from './services/ISolutionSnapshotProvider';
40-
import { ServerStateChange } from './serverStateChange';
40+
import { ServerState } from './serverStateChange';
4141
import TelemetryReporter from '@vscode/extension-telemetry';
4242
import CSharpIntelliCodeExports from '../csharpIntelliCodeExports';
4343
import { csharpDevkitExtensionId, csharpDevkitIntelliCodeExtensionId, getCSharpDevKit } from '../utils/getCSharpDevKit';
@@ -158,18 +158,20 @@ export class RoslynLanguageServer {
158158
await this.openDefaultSolutionOrProjects();
159159
}
160160
await this.sendOrSubscribeForServiceBrokerConnection();
161-
this._languageServerEvents.onServerStateChangeEmitter.fire(ServerStateChange.Started);
161+
this._languageServerEvents.onServerStateChangeEmitter.fire({
162+
state: ServerState.Started,
163+
workspaceLabel: this.workspaceDisplayName(),
164+
});
162165
}
163166
});
164167
}
165168

166169
private registerProjectInitialization() {
167-
this._languageClient.onNotification(RoslynProtocol.ProjectInitializationStartedNotification.type, () => {
168-
this._languageServerEvents.onServerStateChangeEmitter.fire(ServerStateChange.ProjectInitializationStarted);
169-
});
170-
171170
this._languageClient.onNotification(RoslynProtocol.ProjectInitializationCompleteNotification.type, () => {
172-
this._languageServerEvents.onServerStateChangeEmitter.fire(ServerStateChange.ProjectInitializationComplete);
171+
this._languageServerEvents.onServerStateChangeEmitter.fire({
172+
state: ServerState.ProjectInitializationComplete,
173+
workspaceLabel: this.workspaceDisplayName(),
174+
});
173175
});
174176
}
175177

@@ -394,16 +396,20 @@ export class RoslynLanguageServer {
394396
await this._languageClient.sendNotification(RoslynProtocol.OpenSolutionNotification.type, {
395397
solution: protocolUri,
396398
});
397-
}
398-
399-
if (this._projectFiles.length > 0) {
399+
} else if (this._projectFiles.length > 0) {
400400
const projectProtocolUris = this._projectFiles.map((uri) =>
401401
this._languageClient.clientOptions.uriConverters!.code2Protocol(uri)
402402
);
403403
await this._languageClient.sendNotification(RoslynProtocol.OpenProjectNotification.type, {
404404
projects: projectProtocolUris,
405405
});
406+
} else {
407+
return;
406408
}
409+
this._languageServerEvents.onServerStateChangeEmitter.fire({
410+
state: ServerState.ProjectInitializationStarted,
411+
workspaceLabel: this.workspaceDisplayName(),
412+
});
407413
}
408414
}
409415

src/lsptoolshost/serverStateChange.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,13 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
export enum ServerStateChange {
6+
export enum ServerState {
77
Started = 0,
88
ProjectInitializationStarted = 1,
99
ProjectInitializationComplete = 2,
1010
}
11+
12+
export interface ServerStateChangeEvent {
13+
state: ServerState;
14+
workspaceLabel: string;
15+
}

src/main.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ import { RazorOmnisharpDownloader } from './razor/razorOmnisharpDownloader';
5252
import { RoslynLanguageServerExport } from './lsptoolshost/roslynLanguageServerExportChannel';
5353
import { registerOmnisharpOptionChanges } from './omnisharp/omnisharpOptionChanges';
5454
import { RoslynLanguageServerEvents } from './lsptoolshost/languageServerEvents';
55-
import { ServerStateChange } from './lsptoolshost/serverStateChange';
55+
import { ServerState } from './lsptoolshost/serverStateChange';
5656
import { SolutionSnapshotProvider } from './lsptoolshost/services/solutionSnapshotProvider';
5757
import { commonOptions, languageServerOptions, omnisharpOptions, razorOptions } from './shared/options';
5858
import { BuildResultDiagnostics } from './lsptoolshost/services/buildResultReporterService';
@@ -149,8 +149,8 @@ export async function activate(
149149

150150
// Setup a listener for project initialization complete before we start the server.
151151
projectInitializationCompletePromise = new Promise((resolve, _) => {
152-
roslynLanguageServerEvents.onServerStateChange(async (state) => {
153-
if (state === ServerStateChange.ProjectInitializationComplete) {
152+
roslynLanguageServerEvents.onServerStateChange(async (e) => {
153+
if (e.state === ServerState.ProjectInitializationComplete) {
154154
resolve();
155155
}
156156
});

test/integrationTests/integrationHelpers.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import * as vscode from 'vscode';
77
import * as path from 'path';
88
import { CSharpExtensionExports } from '../../src/csharpExtensionExports';
99
import { existsSync } from 'fs';
10-
import { ServerStateChange } from '../../src/lsptoolshost/serverStateChange';
10+
import { ServerState } from '../../src/lsptoolshost/serverStateChange';
1111
import testAssetWorkspace from './testAssets/testAssetWorkspace';
1212

1313
export async function activateCSharpExtension(): Promise<void> {
@@ -70,8 +70,8 @@ export async function restartLanguageServer(): Promise<void> {
7070
const csharpExtension = vscode.extensions.getExtension<CSharpExtensionExports>('ms-dotnettools.csharp');
7171
// Register to wait for initialization events and restart the server.
7272
const waitForInitialProjectLoad = new Promise<void>((resolve, _) => {
73-
csharpExtension!.exports.experimental.languageServerEvents.onServerStateChange(async (state) => {
74-
if (state === ServerStateChange.ProjectInitializationComplete) {
73+
csharpExtension!.exports.experimental.languageServerEvents.onServerStateChange(async (e) => {
74+
if (e.state === ServerState.ProjectInitializationComplete) {
7575
resolve();
7676
}
7777
});

0 commit comments

Comments
 (0)