internal LanguageServerTarget( AbstractRequestDispatcherFactory requestDispatcherFactory, JsonRpc jsonRpc, ICapabilitiesProvider capabilitiesProvider, ILspWorkspaceRegistrationService workspaceRegistrationService, IGlobalOptionService globalOptions, IAsynchronousOperationListenerProvider listenerProvider, ILspLogger logger, ImmutableArray <string> supportedLanguages, string?clientName, string userVisibleServerName, string telemetryServerTypeName) { GlobalOptions = globalOptions; RequestDispatcher = requestDispatcherFactory.CreateRequestDispatcher(supportedLanguages); _capabilitiesProvider = capabilitiesProvider; WorkspaceRegistrationService = workspaceRegistrationService; Logger = logger; JsonRpc = jsonRpc; JsonRpc.AddLocalRpcTarget(this); JsonRpc.Disconnected += JsonRpc_Disconnected; Listener = listenerProvider.GetListener(FeatureAttribute.LanguageServer); ClientName = clientName; _userVisibleServerName = userVisibleServerName; TelemetryServerName = telemetryServerTypeName; Queue = new RequestExecutionQueue(logger, workspaceRegistrationService, globalOptions, supportedLanguages, userVisibleServerName, TelemetryServerName); Queue.RequestServerShutdown += RequestExecutionQueue_Errored; }
internal VisualStudioInProcLanguageServer( AbstractRequestDispatcherFactory requestDispatcherFactory, JsonRpc jsonRpc, ICapabilitiesProvider capabilitiesProvider, LspWorkspaceRegistrationService workspaceRegistrationService, IGlobalOptionService globalOptions, IAsynchronousOperationListenerProvider listenerProvider, ILspLogger logger, IDiagnosticService?diagnosticService, ImmutableArray <string> supportedLanguages, string?clientName, string userVisibleServerName, string telemetryServerTypeName) : base(requestDispatcherFactory, jsonRpc, capabilitiesProvider, workspaceRegistrationService, lspMiscellaneousFilesWorkspace: null, globalOptions, listenerProvider, logger, supportedLanguages, clientName, userVisibleServerName, telemetryServerTypeName) { _supportedLanguages = supportedLanguages; _diagnosticService = diagnosticService; // Dedupe on DocumentId. If we hear about the same document multiple times, we only need to process that id once. _diagnosticsWorkQueue = new AsyncBatchingWorkQueue <DocumentId>( TimeSpan.FromMilliseconds(250), (ids, ct) => ProcessDiagnosticUpdatedBatchAsync(_diagnosticService, ids, ct), EqualityComparer <DocumentId> .Default, Listener, Queue.CancellationToken); if (_diagnosticService != null) { _diagnosticService.DiagnosticsUpdated += DiagnosticService_DiagnosticsUpdated; } }
internal LanguageServerTarget( AbstractRequestDispatcherFactory requestDispatcherFactory, JsonRpc jsonRpc, ICapabilitiesProvider capabilitiesProvider, LspWorkspaceRegistrationService workspaceRegistrationService, LspMiscellaneousFilesWorkspace?lspMiscellaneousFilesWorkspace, IGlobalOptionService globalOptions, IAsynchronousOperationListenerProvider listenerProvider, ILspLogger logger, ImmutableArray <string> supportedLanguages, string?clientName, WellKnownLspServerKinds serverKind) { _requestDispatcher = requestDispatcherFactory.CreateRequestDispatcher(serverKind); _capabilitiesProvider = capabilitiesProvider; _logger = logger; _jsonRpc = jsonRpc; _jsonRpc.AddLocalRpcTarget(this); _jsonRpc.Disconnected += JsonRpc_Disconnected; _listener = listenerProvider.GetListener(FeatureAttribute.LanguageServer); _clientName = clientName; _queue = new RequestExecutionQueue( logger, workspaceRegistrationService, lspMiscellaneousFilesWorkspace, globalOptions, supportedLanguages, serverKind); _queue.RequestServerShutdown += RequestExecutionQueue_Errored; var entryPointMethod = typeof(DelegatingEntryPoint).GetMethod(nameof(DelegatingEntryPoint.EntryPointAsync)); Contract.ThrowIfNull(entryPointMethod, $"{typeof(DelegatingEntryPoint).FullName} is missing method {nameof(DelegatingEntryPoint.EntryPointAsync)}"); foreach (var metadata in _requestDispatcher.GetRegisteredMethods()) { // Instead of concretely defining methods for each LSP method, we instead dynamically construct // the generic method info from the exported handler types. This allows us to define multiple handlers for the same method // but different type parameters. This is a key functionality to support TS external access as we do not want to couple // our LSP protocol version dll to theirs. // // We also do not use the StreamJsonRpc support for JToken as the rpc method parameters because we want // StreamJsonRpc to do the deserialization to handle streaming requests using IProgress<T>. var delegatingEntryPoint = new DelegatingEntryPoint(metadata.MethodName, this); var genericEntryPointMethod = entryPointMethod.MakeGenericMethod(metadata.RequestType, metadata.ResponseType); _jsonRpc.AddLocalRpcMethod(genericEntryPointMethod, delegatingEntryPoint, new JsonRpcMethodAttribute(metadata.MethodName) { UseSingleObjectParameterDeserialization = true }); } }
internal LanguageServerTarget( AbstractLspServiceProvider lspServiceProvider, JsonRpc jsonRpc, ICapabilitiesProvider capabilitiesProvider, IAsynchronousOperationListenerProvider listenerProvider, ILspLogger logger, ImmutableArray <string> supportedLanguages, WellKnownLspServerKinds serverKind) { _capabilitiesProvider = capabilitiesProvider; _logger = logger; _jsonRpc = jsonRpc; _jsonRpc.AddLocalRpcTarget(this); _jsonRpc.Disconnected += JsonRpc_Disconnected; _listener = listenerProvider.GetListener(FeatureAttribute.LanguageServer); // Add services that require base dependencies (jsonrpc) or are more complex to create to the set manually. _lspServices = lspServiceProvider.CreateServices(serverKind, ImmutableArray.Create( CreateLspServiceInstance <ILanguageServerNotificationManager>(new LanguageServerNotificationManager(_jsonRpc)), CreateLspServiceInstance(logger), CreateLspServiceInstance <IClientCapabilitiesProvider>(this))); _queue = new RequestExecutionQueue( supportedLanguages, serverKind, _lspServices); _queue.RequestServerShutdown += RequestExecutionQueue_Errored; _requestDispatcher = _lspServices.GetRequiredService <RequestDispatcher>(); var entryPointMethod = typeof(DelegatingEntryPoint).GetMethod(nameof(DelegatingEntryPoint.EntryPointAsync)); Contract.ThrowIfNull(entryPointMethod, $"{typeof(DelegatingEntryPoint).FullName} is missing method {nameof(DelegatingEntryPoint.EntryPointAsync)}"); foreach (var metadata in _requestDispatcher.GetRegisteredMethods()) { // Instead of concretely defining methods for each LSP method, we instead dynamically construct the // generic method info from the exported handler types. This allows us to define multiple handlers for // the same method but different type parameters. This is a key functionality to support TS external // access as we do not want to couple our LSP protocol version dll to theirs. // // We also do not use the StreamJsonRpc support for JToken as the rpc method parameters because we want // StreamJsonRpc to do the deserialization to handle streaming requests using IProgress<T>. var delegatingEntryPoint = new DelegatingEntryPoint(metadata.MethodName, this); var genericEntryPointMethod = entryPointMethod.MakeGenericMethod(metadata.RequestType, metadata.ResponseType); _jsonRpc.AddLocalRpcMethod(genericEntryPointMethod, delegatingEntryPoint, new JsonRpcMethodAttribute(metadata.MethodName) { UseSingleObjectParameterDeserialization = true }); }
public ILanguageServerTarget Create( JsonRpc jsonRpc, ICapabilitiesProvider capabilitiesProvider, ILspLogger logger) { return(new LanguageServerTarget( _lspServiceProvider, jsonRpc, capabilitiesProvider, _listenerProvider, logger, ProtocolConstants.RoslynLspLanguages, WellKnownLspServerKinds.CSharpVisualBasicLspServer)); }
public MACapabilities GetCapabilitiesEx(KeyedCollection <string, ConfigParameter> configParameters) { try { Logging.SetupLogger(configParameters); ICapabilitiesProvider provider = InterfaceManager.GetProviderOrThrow <ICapabilitiesProvider>(); return(provider.GetCapabilitiesEx(configParameters)); } catch (Exception ex) { logger.Error(ex.UnwrapIfSingleAggregateException(), "Could not get capabilities"); throw; } }
public ILanguageServerTarget Create( JsonRpc jsonRpc, ICapabilitiesProvider capabilitiesProvider, ILspLogger logger) { return(new LanguageServerTarget( _lspServiceProvider, jsonRpc, capabilitiesProvider, _listenerProvider, logger, SupportedLanguages, ServerKind)); }
internal VisualStudioInProcLanguageServer( AbstractRequestDispatcherFactory requestDispatcherFactory, JsonRpc jsonRpc, ICapabilitiesProvider capabilitiesProvider, LspWorkspaceRegistrationService workspaceRegistrationService, IGlobalOptionService globalOptions, IAsynchronousOperationListenerProvider listenerProvider, ILspLogger logger, ImmutableArray <string> supportedLanguages, string?clientName, WellKnownLspServerKinds serverKind) : base(requestDispatcherFactory, jsonRpc, capabilitiesProvider, workspaceRegistrationService, lspMiscellaneousFilesWorkspace: null, globalOptions, listenerProvider, logger, supportedLanguages, clientName, serverKind) { _supportedLanguages = supportedLanguages; }
public ILanguageServerTarget Create( JsonRpc jsonRpc, ICapabilitiesProvider capabilitiesProvider, ILspLogger logger) { return(new VisualStudioInProcLanguageServer( _requestDispatcherFactory, jsonRpc, capabilitiesProvider, _lspWorkspaceRegistrationService, GlobalOptions, _listenerProvider, logger, SupportedLanguages, clientName: _diagnosticsClientName, ServerKind)); }
public ILanguageServerTarget Create( JsonRpc jsonRpc, ICapabilitiesProvider capabilitiesProvider, ILspWorkspaceRegistrationService workspaceRegistrationService, ILspLogger logger) { return(new LanguageServerTarget( _dispatcherFactory, jsonRpc, capabilitiesProvider, workspaceRegistrationService, _listenerProvider, logger, clientName: null, userVisibleServerName: UserVisibleName, telemetryServerTypeName: this.GetType().Name)); }
public ILanguageServerTarget Create( JsonRpc jsonRpc, ICapabilitiesProvider capabilitiesProvider, ILspLogger logger) { return(new LanguageServerTarget( _requestDispatcherFactory, jsonRpc, capabilitiesProvider, _lspWorkspaceRegistrationService, lspMiscellaneousFilesWorkspace: null, GlobalOptions, _listenerProvider, logger, SupportedLanguages, ServerKind)); }
public ILanguageServerTarget Create( JsonRpc jsonRpc, ICapabilitiesProvider capabilitiesProvider, ILspWorkspaceRegistrationService workspaceRegistrationService, ILspLogger logger) { return(new VisualStudioInProcLanguageServer( _requestDispatcherFactory, jsonRpc, capabilitiesProvider, workspaceRegistrationService, _listenerProvider, logger, _diagnosticService, clientName: _diagnosticsClientName, userVisibleServerName: this.Name, telemetryServerTypeName: this.GetType().Name)); }
public ILanguageServerTarget Create( JsonRpc jsonRpc, ICapabilitiesProvider capabilitiesProvider, ILspLogger logger) { var lspMiscellaneousFilesWorkspace = new LspMiscellaneousFilesWorkspace(logger); return(new LanguageServerTarget( _dispatcherFactory, jsonRpc, capabilitiesProvider, _lspWorkspaceRegistrationService, lspMiscellaneousFilesWorkspace, _globalOptions, _listenerProvider, logger, ProtocolConstants.RoslynLspLanguages, WellKnownLspServerKinds.CSharpVisualBasicLspServer)); }
public ILanguageServerTarget Create( JsonRpc jsonRpc, ICapabilitiesProvider capabilitiesProvider, ILspLogger logger) { var lspMiscellaneousFilesWorkspace = new LspMiscellaneousFilesWorkspace(logger); return(new LanguageServerTarget( _dispatcherFactory, jsonRpc, capabilitiesProvider, _lspWorkspaceRegistrationService, lspMiscellaneousFilesWorkspace, _globalOptions, _listenerProvider, logger, ProtocolConstants.RoslynLspLanguages, clientName: null, userVisibleServerName: UserVisibleName, telemetryServerTypeName: this.GetType().Name)); }