internal VisualStudioInProcLanguageServer(
            AbstractRequestDispatcherFactory requestDispatcherFactory,
            JsonRpc jsonRpc,
            ICapabilitiesProvider capabilitiesProvider,
            ILspWorkspaceRegistrationService workspaceRegistrationService,
            IAsynchronousOperationListenerProvider listenerProvider,
            ILspLogger logger,
            IDiagnosticService?diagnosticService,
            string?clientName,
            string userVisibleServerName,
            string telemetryServerTypeName) : base(requestDispatcherFactory, jsonRpc, capabilitiesProvider, workspaceRegistrationService, listenerProvider, logger, clientName, userVisibleServerName, telemetryServerTypeName)
        {
            _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;
            }
        }
Example #2
0
        public static async Task <InProcLanguageServer> CreateAsync(
            AbstractInProcLanguageClient languageClient,
            Stream inputStream,
            Stream outputStream,
            RequestDispatcher requestDispatcher,
            Workspace workspace,
            IDiagnosticService?diagnosticService,
            IAsynchronousOperationListenerProvider listenerProvider,
            ILspWorkspaceRegistrationService lspWorkspaceRegistrationService,
            VSShell.IAsyncServiceProvider?asyncServiceProvider,
            string?clientName,
            CancellationToken cancellationToken)
        {
            var jsonMessageFormatter = new JsonMessageFormatter();

            VSExtensionUtilities.AddVSExtensionConverters(jsonMessageFormatter.JsonSerializer);

            var jsonRpc        = new JsonRpc(new HeaderDelimitedMessageHandler(outputStream, inputStream, jsonMessageFormatter));
            var serverTypeName = languageClient.GetType().Name;
            var logger         = await CreateLoggerAsync(asyncServiceProvider, serverTypeName, clientName, jsonRpc, cancellationToken).ConfigureAwait(false);

            return(new InProcLanguageServer(
                       languageClient,
                       requestDispatcher,
                       workspace,
                       diagnosticService,
                       listenerProvider,
                       lspWorkspaceRegistrationService,
                       serverTypeName,
                       clientName,
                       jsonRpc,
                       logger));
        }
Example #3
0
 public static RequestContext Create(
     bool requiresLSPSolution,
     TextDocumentIdentifier?textDocument,
     string?clientName,
     ClientCapabilities clientCapabilities,
     ILspWorkspaceRegistrationService lspWorkspaceRegistrationService,
     Dictionary <Workspace, (Solution workspaceSolution, Solution lspSolution)>?solutionCache,
        internal static async Task <ILanguageServerTarget> CreateAsync(
            AbstractInProcLanguageClient languageClient,
            Stream inputStream,
            Stream outputStream,
            ILspWorkspaceRegistrationService lspWorkspaceRegistrationService,
            VSShell.IAsyncServiceProvider?asyncServiceProvider,
            string?clientName,
            CancellationToken cancellationToken)
        {
            var jsonMessageFormatter = new JsonMessageFormatter();

            VSExtensionUtilities.AddVSExtensionConverters(jsonMessageFormatter.JsonSerializer);

            var jsonRpc = new JsonRpc(new HeaderDelimitedMessageHandler(outputStream, inputStream, jsonMessageFormatter))
            {
                ExceptionStrategy = ExceptionProcessing.ISerializable,
            };

            var serverTypeName = languageClient.GetType().Name;

            var logger = await CreateLoggerAsync(asyncServiceProvider, serverTypeName, clientName, jsonRpc, cancellationToken).ConfigureAwait(false);

            var server = languageClient.Create(
                jsonRpc,
                languageClient,
                lspWorkspaceRegistrationService,
                logger ?? NoOpLspLogger.Instance);

            jsonRpc.StartListening();
            return(server);
        }
Example #5
0
        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;
        }
Example #6
0
 public TypeScriptWorkspaceSymbolsHandlerShim(
     ILspWorkspaceRegistrationService workspaceRegistrationService,
     IAsynchronousOperationListenerProvider listenerProvider,
     IThreadingContext threadingContext)
     : base(listenerProvider, threadingContext)
 {
     _workspaceRegistrationService = workspaceRegistrationService;
 }
 public XamlInProcLanguageClient(
     XamlRequestDispatcherFactory xamlDispatcherFactory,
     VisualStudioWorkspace workspace,
     IDiagnosticService diagnosticService,
     IAsynchronousOperationListenerProvider listenerProvider,
     ILspWorkspaceRegistrationService lspWorkspaceRegistrationService)
     : base(xamlDispatcherFactory, workspace, diagnosticService, listenerProvider, lspWorkspaceRegistrationService, diagnosticsClientName: null)
 {
 }
 public XamlInProcLanguageClient(
     XamlLanguageServerProtocol languageServerProtocol,
     VisualStudioWorkspace workspace,
     IDiagnosticService diagnosticService,
     IAsynchronousOperationListenerProvider listenerProvider,
     ILspWorkspaceRegistrationService lspWorkspaceRegistrationService)
     : base(languageServerProtocol, workspace, diagnosticService, listenerProvider, lspWorkspaceRegistrationService, diagnosticsClientName: null)
 {
 }
 public AlwaysActivateInProcLanguageClient(
     IGlobalOptionService globalOptionService,
     LanguageServerProtocol languageServerProtocol,
     VisualStudioWorkspace workspace,
     IAsynchronousOperationListenerProvider listenerProvider,
     ILspWorkspaceRegistrationService lspWorkspaceRegistrationService)
     : base(languageServerProtocol, workspace, diagnosticService: null, listenerProvider, lspWorkspaceRegistrationService, diagnosticsClientName: null)
 {
     _globalOptionService = globalOptionService;
 }
 public AlwaysActivateInProcLanguageClient(
     IGlobalOptionService globalOptionService,
     CSharpVisualBasicRequestDispatcherFactory csharpVBRequestDispatcherFactory,
     VisualStudioWorkspace workspace,
     IAsynchronousOperationListenerProvider listenerProvider,
     ILspWorkspaceRegistrationService lspWorkspaceRegistrationService)
     : base(csharpVBRequestDispatcherFactory, workspace, diagnosticService: null, listenerProvider, lspWorkspaceRegistrationService, diagnosticsClientName: null)
 {
     _globalOptionService = globalOptionService;
 }
Example #11
0
 public XamlInProcLanguageClient(
     XamlRequestDispatcherFactory xamlDispatcherFactory,
     VisualStudioWorkspace workspace,
     IDiagnosticService diagnosticService,
     IAsynchronousOperationListenerProvider listenerProvider,
     ILspWorkspaceRegistrationService lspWorkspaceRegistrationService,
     [Import(typeof(SAsyncServiceProvider))] VSShell.IAsyncServiceProvider asyncServiceProvider,
     IThreadingContext threadingContext)
     : base(xamlDispatcherFactory, workspace, diagnosticService, listenerProvider, lspWorkspaceRegistrationService, asyncServiceProvider, threadingContext, diagnosticsClientName: null)
 {
 }
 public LiveShareInProcLanguageClient(
     CSharpVisualBasicRequestDispatcherFactory csharpVBRequestDispatcherFactory,
     VisualStudioWorkspace workspace,
     IDiagnosticService diagnosticService,
     IAsynchronousOperationListenerProvider listenerProvider,
     ILspWorkspaceRegistrationService lspWorkspaceRegistrationService,
     DefaultCapabilitiesProvider defaultCapabilitiesProvider)
     : base(csharpVBRequestDispatcherFactory, workspace, diagnosticService, listenerProvider, lspWorkspaceRegistrationService, diagnosticsClientName: null)
 {
     _defaultCapabilitiesProvider = defaultCapabilitiesProvider;
 }
 public LiveShareInProcLanguageClient(
     LanguageServerProtocol languageServerProtocol,
     VisualStudioWorkspace workspace,
     IDiagnosticService diagnosticService,
     IAsynchronousOperationListenerProvider listenerProvider,
     ILspWorkspaceRegistrationService lspWorkspaceRegistrationService,
     DefaultCapabilitiesProvider defaultCapabilitiesProvider)
     : base(languageServerProtocol, workspace, diagnosticService, listenerProvider, lspWorkspaceRegistrationService, diagnosticsClientName: null)
 {
     _defaultCapabilitiesProvider = defaultCapabilitiesProvider;
 }
Example #14
0
 public XamlInProcLanguageClient(
     XamlRequestDispatcherFactory xamlDispatcherFactory,
     IGlobalOptionService globalOptions,
     IDiagnosticService diagnosticService,
     IAsynchronousOperationListenerProvider listenerProvider,
     ILspWorkspaceRegistrationService lspWorkspaceRegistrationService,
     ILspLoggerFactory lspLoggerFactory,
     IThreadingContext threadingContext)
     : base(xamlDispatcherFactory, globalOptions, diagnosticService, listenerProvider, lspWorkspaceRegistrationService, lspLoggerFactory, threadingContext, diagnosticsClientName: null)
 {
 }
Example #15
0
 public AlwaysActivateInProcLanguageClient(
     RequestDispatcherFactory csharpVBRequestDispatcherFactory,
     IGlobalOptionService globalOptions,
     IAsynchronousOperationListenerProvider listenerProvider,
     ILspWorkspaceRegistrationService lspWorkspaceRegistrationService,
     DefaultCapabilitiesProvider defaultCapabilitiesProvider,
     ILspLoggerFactory lspLoggerFactory,
     IThreadingContext threadingContext)
     : base(csharpVBRequestDispatcherFactory, globalOptions, diagnosticService: null, listenerProvider, lspWorkspaceRegistrationService, lspLoggerFactory, threadingContext, diagnosticsClientName: null)
 {
     _defaultCapabilitiesProvider = defaultCapabilitiesProvider;
 }
Example #16
0
 public AlwaysActivateInProcLanguageClient(
     CSharpVisualBasicRequestDispatcherFactory csharpVBRequestDispatcherFactory,
     VisualStudioWorkspace workspace,
     IAsynchronousOperationListenerProvider listenerProvider,
     ILspWorkspaceRegistrationService lspWorkspaceRegistrationService,
     DefaultCapabilitiesProvider defaultCapabilitiesProvider,
     [Import(typeof(SAsyncServiceProvider))] VSShell.IAsyncServiceProvider asyncServiceProvider,
     IThreadingContext threadingContext)
     : base(csharpVBRequestDispatcherFactory, workspace, diagnosticService: null, listenerProvider, lspWorkspaceRegistrationService, asyncServiceProvider, threadingContext, diagnosticsClientName: null)
 {
     _defaultCapabilitiesProvider = defaultCapabilitiesProvider;
 }
 public RazorInProcLanguageClient(
     RequestDispatcherFactory csharpVBRequestDispatcherFactory,
     VisualStudioWorkspace workspace,
     IDiagnosticService diagnosticService,
     IAsynchronousOperationListenerProvider listenerProvider,
     ILspWorkspaceRegistrationService lspWorkspaceRegistrationService,
     DefaultCapabilitiesProvider defaultCapabilitiesProvider,
     IThreadingContext threadingContext,
     ILspLoggerFactory lspLoggerFactory)
     : base(csharpVBRequestDispatcherFactory, workspace, diagnosticService, listenerProvider, lspWorkspaceRegistrationService, lspLoggerFactory, threadingContext, ClientName)
 {
     _defaultCapabilitiesProvider = defaultCapabilitiesProvider;
 }
Example #18
0
 public RazorInProcLanguageClient(
     IGlobalOptionService globalOptionService,
     LanguageServerProtocol languageServerProtocol,
     VisualStudioWorkspace workspace,
     IDiagnosticService diagnosticService,
     IAsynchronousOperationListenerProvider listenerProvider,
     ILspWorkspaceRegistrationService lspWorkspaceRegistrationService,
     DefaultCapabilitiesProvider defaultCapabilitiesProvider)
     : base(languageServerProtocol, workspace, diagnosticService, listenerProvider, lspWorkspaceRegistrationService, ClientName)
 {
     _globalOptionService         = globalOptionService;
     _defaultCapabilitiesProvider = defaultCapabilitiesProvider;
 }
Example #19
0
 public AbstractInProcLanguageClient(
     AbstractRequestHandlerProvider requestHandlerProvider,
     VisualStudioWorkspace workspace,
     IDiagnosticService?diagnosticService,
     IAsynchronousOperationListenerProvider listenerProvider,
     ILspWorkspaceRegistrationService lspWorkspaceRegistrationService,
     string?diagnosticsClientName)
 {
     _requestHandlerProvider = requestHandlerProvider;
     Workspace          = workspace;
     _diagnosticService = diagnosticService;
     _listenerProvider  = listenerProvider;
     _lspWorkspaceRegistrationService = lspWorkspaceRegistrationService;
     _diagnosticsClientName           = diagnosticsClientName;
 }
 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,
     ILspWorkspaceRegistrationService workspaceRegistrationService,
     ILspLogger logger)
 {
     return(new VisualStudioInProcLanguageServer(
                _requestDispatcherFactory,
                jsonRpc,
                capabilitiesProvider,
                workspaceRegistrationService,
                _listenerProvider,
                logger,
                _diagnosticService,
                clientName: _diagnosticsClientName,
                userVisibleServerName: this.Name,
                telemetryServerTypeName: this.GetType().Name));
 }
        public InProcLanguageServer(
            AbstractInProcLanguageClient languageClient,
            Stream inputStream,
            Stream outputStream,
            AbstractRequestHandlerProvider requestHandlerProvider,
            Workspace workspace,
            IDiagnosticService?diagnosticService,
            IAsynchronousOperationListenerProvider listenerProvider,
            ILspWorkspaceRegistrationService lspWorkspaceRegistrationService,
            string?clientName)
        {
            _languageClient         = languageClient;
            _requestHandlerProvider = requestHandlerProvider;
            _workspace = workspace;

            var jsonMessageFormatter = new JsonMessageFormatter();

            jsonMessageFormatter.JsonSerializer.Converters.Add(new VSExtensionConverter <TextDocumentIdentifier, VSTextDocumentIdentifier>());
            jsonMessageFormatter.JsonSerializer.Converters.Add(new VSExtensionConverter <ClientCapabilities, VSClientCapabilities>());

            _jsonRpc = new JsonRpc(new HeaderDelimitedMessageHandler(outputStream, inputStream, jsonMessageFormatter));
            _jsonRpc.AddLocalRpcTarget(this);
            _jsonRpc.StartListening();

            _diagnosticService = diagnosticService;
            _listener          = listenerProvider.GetListener(FeatureAttribute.LanguageServer);
            _clientName        = clientName;

            _queue = new RequestExecutionQueue(lspWorkspaceRegistrationService, languageClient.Name, _languageClient.GetType().Name);
            _queue.RequestServerShutdown += RequestExecutionQueue_Errored;

            // 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),
                ProcessDiagnosticUpdatedBatchAsync,
                EqualityComparer <DocumentId> .Default,
                _listener,
                _queue.CancellationToken);

            if (_diagnosticService != null)
            {
                _diagnosticService.DiagnosticsUpdated += DiagnosticService_DiagnosticsUpdated;
            }
        }
 public AbstractInProcLanguageClient(
     AbstractRequestDispatcherFactory requestDispatcherFactory,
     VisualStudioWorkspace workspace,
     IDiagnosticService?diagnosticService,
     IAsynchronousOperationListenerProvider listenerProvider,
     ILspWorkspaceRegistrationService lspWorkspaceRegistrationService,
     VSShell.IAsyncServiceProvider asyncServiceProvider,
     IThreadingContext threadingContext,
     string?diagnosticsClientName)
 {
     _requestDispatcherFactory = requestDispatcherFactory;
     Workspace          = workspace;
     _diagnosticService = diagnosticService;
     _listenerProvider  = listenerProvider;
     _lspWorkspaceRegistrationService = lspWorkspaceRegistrationService;
     _diagnosticsClientName           = diagnosticsClientName;
     _asyncServiceProvider            = asyncServiceProvider;
     _threadingContext = threadingContext;
 }
Example #24
0
 public AbstractInProcLanguageClient(
     AbstractRequestDispatcherFactory requestDispatcherFactory,
     IGlobalOptionService globalOptions,
     IDiagnosticService?diagnosticService,
     IAsynchronousOperationListenerProvider listenerProvider,
     ILspWorkspaceRegistrationService lspWorkspaceRegistrationService,
     ILspLoggerFactory lspLoggerFactory,
     IThreadingContext threadingContext,
     string?diagnosticsClientName)
 {
     _requestDispatcherFactory        = requestDispatcherFactory;
     GlobalOptions                    = globalOptions;
     _diagnosticService               = diagnosticService;
     _listenerProvider                = listenerProvider;
     _lspWorkspaceRegistrationService = lspWorkspaceRegistrationService;
     _diagnosticsClientName           = diagnosticsClientName;
     _lspLoggerFactory                = lspLoggerFactory;
     _threadingContext                = threadingContext;
 }
Example #25
0
        private InProcLanguageServer(
            AbstractInProcLanguageClient languageClient,
            RequestDispatcher requestDispatcher,
            Workspace workspace,
            IDiagnosticService?diagnosticService,
            IAsynchronousOperationListenerProvider listenerProvider,
            ILspWorkspaceRegistrationService lspWorkspaceRegistrationService,
            string serverTypeName,
            string?clientName,
            JsonRpc jsonRpc,
            LogHubLspLogger?logger)
        {
            _languageClient    = languageClient;
            _requestDispatcher = requestDispatcher;
            _workspace         = workspace;
            _logger            = logger;

            _jsonRpc = jsonRpc;
            _jsonRpc.AddLocalRpcTarget(this);
            _jsonRpc.StartListening();

            _diagnosticService = diagnosticService;
            _listener          = listenerProvider.GetListener(FeatureAttribute.LanguageServer);
            _clientName        = clientName;

            _queue = new RequestExecutionQueue(logger ?? NoOpLspLogger.Instance, lspWorkspaceRegistrationService, languageClient.Name, serverTypeName);
            _queue.RequestServerShutdown += RequestExecutionQueue_Errored;

            // 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),
                ProcessDiagnosticUpdatedBatchAsync,
                EqualityComparer <DocumentId> .Default,
                _listener,
                _queue.CancellationToken);

            if (_diagnosticService != null)
            {
                _diagnosticService.DiagnosticsUpdated += DiagnosticService_DiagnosticsUpdated;
            }
        }
Example #26
0
 public TypeScriptCompletionResolverHandlerShim(ILspWorkspaceRegistrationService workspaceRegistrationService)
     : base(completionListCache: new CompletionListCache())
 {
     _workspaceRegistrationService = workspaceRegistrationService;
 }
Example #27
0
 public TypeScriptCompletionHandlerShim(ILspWorkspaceRegistrationService workspaceRegistrationService)
     : base(completionProviders: Array.Empty <Lazy <CompletionProvider, CompletionProviderMetadata> >(), new CompletionListCache())
 {
     _workspaceRegistrationService = workspaceRegistrationService;
 }
Example #28
0
        public static LSP.RequestContext CreateRequestContext <TRequest, TResponse>(this IRequestHandler <TRequest, TResponse> requestHandler, TRequest request, ILspWorkspaceRegistrationService workspaceRegistrationService, ClientCapabilities clientCapabilities, string?clientName = null)
        {
            var textDocument = requestHandler.GetTextDocumentIdentifier(request);

            return(LSP.RequestContext.Create(requiresLSPSolution: true, textDocument, clientName, NoOpLspLogger.Instance, clientCapabilities, workspaceRegistrationService, null, null, out _));
        }
Example #29
0
 public TypeScriptSignatureHelpHandlerShim([ImportMany] IEnumerable <Lazy <ISignatureHelpProvider, OrderableLanguageMetadata> > allProviders,
                                           ILspWorkspaceRegistrationService workspaceRegistrationService) : base(allProviders)
 {
     _workspaceRegistrationService = workspaceRegistrationService;
 }
Example #30
0
 public TypeScriptFindImplementationsHandlerShim(ILspWorkspaceRegistrationService workspaceRegistrationService, IThreadingContext threadingContext)
 {
     _threadingContext             = threadingContext;
     _workspaceRegistrationService = workspaceRegistrationService;
 }