@@ -89,12 +89,11 @@ public static async Task<ILanguageServer> From(LanguageServerOptions options, Ca
89
89
/// <returns></returns>
90
90
public static ILanguageServer PreInit ( LanguageServerOptions options )
91
91
{
92
- var server = new LanguageServer (
92
+ return new LanguageServer (
93
93
options . Input ,
94
94
options . Output ,
95
95
options . Reciever ,
96
96
options . RequestProcessIdentifier ,
97
- options . LoggerFactory ,
98
97
options . Serializer ,
99
98
options . Services ,
100
99
options . HandlerTypes . Select ( x => x . Assembly )
@@ -106,21 +105,17 @@ public static ILanguageServer PreInit(LanguageServerOptions options)
106
105
options . TextDocumentIdentifiers ,
107
106
options . TextDocumentIdentifierTypes ,
108
107
options . InitializeDelegates ,
109
- options . InitializedDelegates
108
+ options . InitializedDelegates ,
109
+ options . LoggingBuilderAction ,
110
+ options . AddDefaultLoggingProvider
110
111
) ;
111
-
112
- if ( options . AddDefaultLoggingProvider )
113
- options . LoggerFactory . AddProvider ( new LanguageServerLoggerProvider ( server ) ) ;
114
-
115
- return server ;
116
112
}
117
113
118
114
internal LanguageServer (
119
115
Stream input ,
120
116
Stream output ,
121
117
ILspReciever reciever ,
122
118
IRequestProcessIdentifier requestProcessIdentifier ,
123
- ILoggerFactory loggerFactory ,
124
119
ISerializer serializer ,
125
120
IServiceCollection services ,
126
121
IEnumerable < Assembly > assemblies ,
@@ -131,11 +126,22 @@ internal LanguageServer(
131
126
IEnumerable < ITextDocumentIdentifier > textDocumentIdentifiers ,
132
127
IEnumerable < Type > textDocumentIdentifierTypes ,
133
128
IEnumerable < InitializeDelegate > initializeDelegates ,
134
- IEnumerable < InitializedDelegate > initializedDelegates )
129
+ IEnumerable < InitializedDelegate > initializedDelegates ,
130
+ Action < ILoggingBuilder > loggingBuilderAction ,
131
+ bool addDefaultLoggingProvider )
135
132
{
136
133
var outputHandler = new OutputHandler ( output , serializer ) ;
137
134
138
- services . AddLogging ( ) ;
135
+ services . AddLogging ( builder =>
136
+ {
137
+ loggingBuilderAction ( builder ) ;
138
+
139
+ if ( addDefaultLoggingProvider )
140
+ {
141
+ builder . AddProvider ( new LanguageServerLoggerProvider ( this ) ) ;
142
+ }
143
+ } ) ;
144
+
139
145
_reciever = reciever ;
140
146
_serializer = serializer ;
141
147
_supportedCapabilities = new SupportedCapabilities ( ) ;
@@ -153,7 +159,7 @@ internal LanguageServer(
153
159
services . AddSingleton ( requestProcessIdentifier ) ;
154
160
services . AddSingleton < OmniSharp . Extensions . JsonRpc . IReciever > ( reciever ) ;
155
161
services . AddSingleton < ILspReciever > ( reciever ) ;
156
- services . AddSingleton ( loggerFactory ) ;
162
+
157
163
foreach ( var item in handlers )
158
164
{
159
165
services . AddSingleton ( item ) ;
@@ -209,6 +215,12 @@ internal LanguageServer(
209
215
210
216
_exitHandler = new ServerExitHandler ( _shutdownHandler ) ;
211
217
218
+ // We need to at least create Window here in case any handler does loggin in their constructor
219
+ Document = new LanguageServerDocument ( _responseRouter ) ;
220
+ Client = new LanguageServerClient ( _responseRouter ) ;
221
+ Window = new LanguageServerWindow ( _responseRouter ) ;
222
+ Workspace = new LanguageServerWorkspace ( _responseRouter ) ;
223
+
212
224
_disposable . Add (
213
225
AddHandlers ( this , _shutdownHandler , _exitHandler , new CancelRequestHandler < ILspHandlerDescriptor > ( _requestRouter ) )
214
226
) ;
@@ -226,12 +238,6 @@ internal LanguageServer(
226
238
{
227
239
_disposable . Add ( _collection . Add ( name , handlerFunc ( _serviceProvider ) ) ) ;
228
240
}
229
-
230
-
231
- Document = new LanguageServerDocument ( _responseRouter ) ;
232
- Client = new LanguageServerClient ( _responseRouter ) ;
233
- Window = new LanguageServerWindow ( _responseRouter ) ;
234
- Workspace = new LanguageServerWorkspace ( _responseRouter ) ;
235
241
}
236
242
237
243
public ILanguageServerDocument Document { get ; }
0 commit comments