Skip to content

Commit d31f777

Browse files
committed
Warn in the statusbar when the active file is not part of the open workspace.
1 parent 8dd4dfc commit d31f777

File tree

3 files changed

+36
-2
lines changed

3 files changed

+36
-2
lines changed

src/lsptoolshost/languageStatusBar.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,20 @@ import { languageServerOptions } from '../shared/options';
1010
import { ServerState } from './serverStateChange';
1111
import { getCSharpDevKit } from '../utils/getCSharpDevKit';
1212
import { RazorLanguage } from '../razor/src/razorLanguage';
13+
import { VSWorkspaceKind } from './roslynProtocol';
14+
15+
let currentServerState: ServerState = ServerState.Stopped;
1316

1417
export function registerLanguageStatusItems(
1518
context: vscode.ExtensionContext,
1619
languageServer: RoslynLanguageServer,
1720
languageServerEvents: RoslynLanguageServerEvents
1821
) {
22+
// Track the current server state.
23+
languageServerEvents.onServerStateChange((e) => {
24+
currentServerState = e.state;
25+
});
26+
1927
// DevKit will provide an equivalent workspace status item.
2028
if (!getCSharpDevKit()) {
2129
WorkspaceStatus.createStatusItem(context, languageServerEvents);
@@ -44,14 +52,16 @@ class WorkspaceStatus {
4452

4553
const item = vscode.languages.createLanguageStatusItem('csharp.workspaceStatus', documentSelector);
4654
item.name = vscode.l10n.t('C# Workspace Status');
55+
item.severity = vscode.LanguageStatusSeverity.Error;
56+
item.command = openSolutionCommand;
4757
context.subscriptions.push(item);
4858

4959
languageServerEvents.onServerStateChange((e) => {
5060
item.text = e.workspaceLabel;
5161
item.busy = e.state === ServerState.ProjectInitializationStarted;
5262
item.severity =
5363
e.state === ServerState.Stopped
54-
? vscode.LanguageStatusSeverity.Warning
64+
? vscode.LanguageStatusSeverity.Error
5565
: vscode.LanguageStatusSeverity.Information;
5666
item.command = e.state === ServerState.Stopped ? restartServerCommand : openSolutionCommand;
5767
});
@@ -73,6 +83,17 @@ class ProjectContextStatus {
7383

7484
projectContextService.onActiveFileContextChanged((e) => {
7585
item.text = e.context._vs_label;
86+
87+
// Show a warning when the active file is part of the Miscellaneous File workspace and
88+
// project initialization is complete.
89+
if (currentServerState === ServerState.ProjectInitializationComplete) {
90+
item.severity =
91+
e.context._vs_workspace_kind === VSWorkspaceKind.MiscellaneousFiles
92+
? vscode.LanguageStatusSeverity.Warning
93+
: vscode.LanguageStatusSeverity.Information;
94+
} else {
95+
item.severity = vscode.LanguageStatusSeverity.Information;
96+
}
7697
});
7798

7899
// Trigger a refresh, but don't block creation on the refresh completing.

src/lsptoolshost/roslynProtocol.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,17 @@ export interface VSProjectContextList {
1313
_vs_defaultIndex: number;
1414
}
1515

16+
export enum VSWorkspaceKind {
17+
Unknown = 0,
18+
Host = 1,
19+
MiscellaneousFiles = 2,
20+
}
21+
1622
export interface VSProjectContext {
1723
_vs_label: string;
1824
_vs_id: string;
1925
_vs_kind: string;
26+
_vs_workspace_kind: VSWorkspaceKind;
2027
}
2128

2229
export interface VSTextDocumentIdentifier extends lsp.TextDocumentIdentifier {

src/lsptoolshost/services/projectContextService.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@
55

66
import * as vscode from 'vscode';
77
import { RoslynLanguageServer } from '../roslynLanguageServer';
8-
import { VSGetProjectContextsRequest, VSProjectContext, VSProjectContextList } from '../roslynProtocol';
8+
import {
9+
VSGetProjectContextsRequest,
10+
VSProjectContext,
11+
VSProjectContextList,
12+
VSWorkspaceKind,
13+
} from '../roslynProtocol';
914
import { TextDocumentIdentifier } from 'vscode-languageserver-protocol';
1015
import { UriConverter } from '../uriConverter';
1116
import { LanguageServerEvents } from '../languageServerEvents';
@@ -26,6 +31,7 @@ export class ProjectContextService {
2631
_vs_id: '',
2732
_vs_kind: '',
2833
_vs_label: '',
34+
_vs_workspace_kind: VSWorkspaceKind.Unknown,
2935
};
3036

3137
constructor(private _languageServer: RoslynLanguageServer, _languageServerEvents: LanguageServerEvents) {

0 commit comments

Comments
 (0)