@@ -32,10 +32,16 @@ internal class PsesLanguageServer
32
32
/// <summary>
33
33
/// Create a new language server instance.
34
34
/// </summary>
35
+ /// <remarks>
36
+ /// This class is only ever instantiated via <see
37
+ /// cref="EditorServicesServerFactory.CreateLanguageServer"/>. It is essentially a
38
+ /// singleton. The factory hides the logger.
39
+ /// </remarks>
35
40
/// <param name="factory">Factory to create loggers with.</param>
36
41
/// <param name="inputStream">Protocol transport input stream.</param>
37
42
/// <param name="outputStream">Protocol transport output stream.</param>
38
- /// <param name="hostStartupInfo">Host configuration to instantiate the server and services with.</param>
43
+ /// <param name="hostStartupInfo">Host configuration to instantiate the server and services
44
+ /// with.</param>
39
45
public PsesLanguageServer (
40
46
ILoggerFactory factory ,
41
47
Stream inputStream ,
@@ -53,6 +59,11 @@ public PsesLanguageServer(
53
59
/// <summary>
54
60
/// Start the server listening for input.
55
61
/// </summary>
62
+ /// <remarks>
63
+ /// For the services (including the <see cref="PowerShellContextService">
64
+ /// context wrapper around PowerShell itself) see <see
65
+ /// cref="PsesServiceCollectionExtensions.AddPsesLanguageServices"/>.
66
+ /// </remarks>
56
67
/// <returns>A task that completes when the server is ready and listening.</returns>
57
68
public async Task StartAsync ( )
58
69
{
@@ -62,11 +73,12 @@ public async Task StartAsync()
62
73
. WithInput ( _inputStream )
63
74
. WithOutput ( _outputStream )
64
75
. WithServices ( serviceCollection => serviceCollection
65
- . AddPsesLanguageServices ( _hostDetails ) )
76
+ . AddPsesLanguageServices ( _hostDetails ) ) // NOTE: This adds a lot of services!
66
77
. ConfigureLogging ( builder => builder
67
- . AddSerilog ( Log . Logger )
78
+ . AddSerilog ( Log . Logger ) // TODO: Set dispose to true?
68
79
. AddLanguageProtocolLogging ( )
69
80
. SetMinimumLevel ( _minimumLogLevel ) )
81
+ // TODO: Consider replacing all WithHandler with AddSingleton
70
82
. WithHandler < PsesWorkspaceSymbolsHandler > ( )
71
83
. WithHandler < PsesTextDocumentHandler > ( )
72
84
. WithHandler < GetVersionHandler > ( )
@@ -91,10 +103,15 @@ public async Task StartAsync()
91
103
. WithHandler < ShowHelpHandler > ( )
92
104
. WithHandler < ExpandAliasHandler > ( )
93
105
. WithHandler < PsesSemanticTokensHandler > ( )
106
+ // NOTE: The OnInitialize delegate gets run when we first receive the
107
+ // _Initialize_ request:
108
+ // https://microsoft.github.io/language-server-protocol/specifications/specification-current/#initialize
94
109
. OnInitialize (
95
110
// TODO: Either fix or ignore "method lacks 'await'" warning.
96
111
async ( languageServer , request , cancellationToken ) =>
97
112
{
113
+ Log . Logger . Debug ( "Initializing OmniSharp Language Server" ) ;
114
+
98
115
var serviceProvider = languageServer . Services ;
99
116
var workspaceService = serviceProvider . GetService < WorkspaceService > ( ) ;
100
117
@@ -125,6 +142,7 @@ public async Task StartAsync()
125
142
/// <returns>A task that completes when the server is shut down.</returns>
126
143
public async Task WaitForShutdown ( )
127
144
{
145
+ Log . Logger . Debug ( "Shutting down OmniSharp Language Server" ) ;
128
146
await _serverStart . Task . ConfigureAwait ( false ) ;
129
147
await LanguageServer . WaitForExit . ConfigureAwait ( false ) ;
130
148
}
0 commit comments