@@ -10,12 +10,20 @@ import { languageServerOptions } from '../shared/options';
10
10
import { ServerState } from './serverStateChange' ;
11
11
import { getCSharpDevKit } from '../utils/getCSharpDevKit' ;
12
12
import { RazorLanguage } from '../razor/src/razorLanguage' ;
13
+ import { VSWorkspaceKind } from './roslynProtocol' ;
14
+
15
+ let currentServerState : ServerState = ServerState . Stopped ;
13
16
14
17
export function registerLanguageStatusItems (
15
18
context : vscode . ExtensionContext ,
16
19
languageServer : RoslynLanguageServer ,
17
20
languageServerEvents : RoslynLanguageServerEvents
18
21
) {
22
+ // Track the current server state.
23
+ languageServerEvents . onServerStateChange ( ( e ) => {
24
+ currentServerState = e . state ;
25
+ } ) ;
26
+
19
27
// DevKit will provide an equivalent workspace status item.
20
28
if ( ! getCSharpDevKit ( ) ) {
21
29
WorkspaceStatus . createStatusItem ( context , languageServerEvents ) ;
@@ -44,14 +52,16 @@ class WorkspaceStatus {
44
52
45
53
const item = vscode . languages . createLanguageStatusItem ( 'csharp.workspaceStatus' , documentSelector ) ;
46
54
item . name = vscode . l10n . t ( 'C# Workspace Status' ) ;
55
+ item . severity = vscode . LanguageStatusSeverity . Error ;
56
+ item . command = openSolutionCommand ;
47
57
context . subscriptions . push ( item ) ;
48
58
49
59
languageServerEvents . onServerStateChange ( ( e ) => {
50
60
item . text = e . workspaceLabel ;
51
61
item . busy = e . state === ServerState . ProjectInitializationStarted ;
52
62
item . severity =
53
63
e . state === ServerState . Stopped
54
- ? vscode . LanguageStatusSeverity . Warning
64
+ ? vscode . LanguageStatusSeverity . Error
55
65
: vscode . LanguageStatusSeverity . Information ;
56
66
item . command = e . state === ServerState . Stopped ? restartServerCommand : openSolutionCommand ;
57
67
} ) ;
@@ -73,6 +83,17 @@ class ProjectContextStatus {
73
83
74
84
projectContextService . onActiveFileContextChanged ( ( e ) => {
75
85
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
+ }
76
97
} ) ;
77
98
78
99
// Trigger a refresh, but don't block creation on the refresh completing.
0 commit comments