Esempio n. 1
0
        public RequestExecutionQueue(
            ILspLogger logger,
            LspWorkspaceRegistrationService lspWorkspaceRegistrationService,
            LspMiscellaneousFilesWorkspace?lspMiscellaneousFilesWorkspace,
            IGlobalOptionService globalOptions,
            ImmutableArray <string> supportedLanguages,
            string serverName,
            string serverTypeName)
        {
            _logger             = logger;
            _globalOptions      = globalOptions;
            _supportedLanguages = supportedLanguages;
            _serverName         = serverName;

            _queue        = new AsyncQueue <QueueItem>();
            _cancelSource = new CancellationTokenSource();

            // Pass the language client instance type name to the telemetry logger to ensure we can
            // differentiate between the different C# LSP servers that have the same client name.
            // We also don't use the language client's name property as it is a localized user facing string
            // which is difficult to write telemetry queries for.
            _requestTelemetryLogger = new RequestTelemetryLogger(serverTypeName);

            _lspWorkspaceManager = new LspWorkspaceManager(logger, lspMiscellaneousFilesWorkspace, lspWorkspaceRegistrationService, _requestTelemetryLogger);

            // Start the queue processing
            _ = ProcessQueueAsync();
        }
Esempio n. 2
0
        internal LanguageServerTarget(
            AbstractRequestDispatcherFactory requestDispatcherFactory,
            JsonRpc jsonRpc,
            ICapabilitiesProvider capabilitiesProvider,
            LspWorkspaceRegistrationService workspaceRegistrationService,
            LspMiscellaneousFilesWorkspace?lspMiscellaneousFilesWorkspace,
            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, lspMiscellaneousFilesWorkspace, 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;
            }
        }
Esempio n. 4
0
        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
                });
            }
        }
Esempio n. 5
0
 public SemanticTokensRangeHandlerFactory(
     IGlobalOptionService globalOptions,
     IAsynchronousOperationListenerProvider asynchronousOperationListenerProvider,
     LspWorkspaceRegistrationService lspWorkspaceRegistrationService)
 {
     _globalOptions                   = globalOptions;
     _asyncListenerProvider           = asynchronousOperationListenerProvider;
     _lspWorkspaceRegistrationService = lspWorkspaceRegistrationService;
 }
Esempio n. 6
0
 public XamlInProcLanguageClientDisableUX(
     XamlRequestDispatcherFactory xamlDispatcherFactory,
     IGlobalOptionService globalOptions,
     IAsynchronousOperationListenerProvider listenerProvider,
     LspWorkspaceRegistrationService lspWorkspaceRegistrationService,
     ILspLoggerFactory lspLoggerFactory,
     IThreadingContext threadingContext)
     : base(xamlDispatcherFactory, globalOptions, listenerProvider, lspWorkspaceRegistrationService, lspLoggerFactory, threadingContext, diagnosticsClientName: null)
 {
 }
 public CSharpVisualBasicLanguageServerFactory(
     RequestDispatcherFactory dispatcherFactory,
     LspWorkspaceRegistrationService lspWorkspaceRegistrationService,
     IAsynchronousOperationListenerProvider listenerProvider,
     IGlobalOptionService globalOptions)
 {
     _dispatcherFactory = dispatcherFactory;
     _lspWorkspaceRegistrationService = lspWorkspaceRegistrationService;
     _listenerProvider = listenerProvider;
     _globalOptions    = globalOptions;
 }
 public AlwaysActivateInProcLanguageClient(
     RequestDispatcherFactory csharpVBRequestDispatcherFactory,
     IGlobalOptionService globalOptions,
     IAsynchronousOperationListenerProvider listenerProvider,
     LspWorkspaceRegistrationService lspWorkspaceRegistrationService,
     DefaultCapabilitiesProvider defaultCapabilitiesProvider,
     ILspLoggerFactory lspLoggerFactory,
     IThreadingContext threadingContext)
     : base(csharpVBRequestDispatcherFactory, globalOptions, listenerProvider, lspWorkspaceRegistrationService, lspLoggerFactory, threadingContext)
 {
     _defaultCapabilitiesProvider = defaultCapabilitiesProvider;
 }
Esempio n. 9
0
 public LiveShareInProcLanguageClient(
     RequestDispatcherFactory csharpVBRequestDispatcherFactory,
     IGlobalOptionService globalOptions,
     IDiagnosticService diagnosticService,
     IAsynchronousOperationListenerProvider listenerProvider,
     LspWorkspaceRegistrationService lspWorkspaceRegistrationService,
     DefaultCapabilitiesProvider defaultCapabilitiesProvider,
     ILspLoggerFactory lspLoggerFactory,
     IThreadingContext threadingContext)
     : base(csharpVBRequestDispatcherFactory, globalOptions, diagnosticService, listenerProvider, lspWorkspaceRegistrationService, lspLoggerFactory, threadingContext, diagnosticsClientName: null)
 {
     _defaultCapabilitiesProvider = defaultCapabilitiesProvider;
 }
Esempio n. 10
0
 public RazorInProcLanguageClient(
     RequestDispatcherFactory csharpVBRequestDispatcherFactory,
     IGlobalOptionService globalOptions,
     IAsynchronousOperationListenerProvider listenerProvider,
     LspWorkspaceRegistrationService lspWorkspaceRegistrationService,
     DefaultCapabilitiesProvider defaultCapabilitiesProvider,
     IThreadingContext threadingContext,
     ILspLoggerFactory lspLoggerFactory,
     [Import(AllowDefault = true)] AbstractLanguageClientMiddleLayer middleLayer)
     : base(csharpVBRequestDispatcherFactory, globalOptions, listenerProvider, lspWorkspaceRegistrationService, lspLoggerFactory, threadingContext, middleLayer)
 {
     _defaultCapabilitiesProvider = defaultCapabilitiesProvider;
 }
Esempio n. 11
0
 public VSTypeScriptInProcLanguageClient(
     [Import(AllowDefault = true)] IVSTypeScriptCapabilitiesProvider?typeScriptCapabilitiesProvider,
     VSTypeScriptRequestDispatcherFactory requestDispatcherFactory,
     IGlobalOptionService globalOptions,
     IAsynchronousOperationListenerProvider listenerProvider,
     LspWorkspaceRegistrationService lspWorkspaceRegistrationService,
     DefaultCapabilitiesProvider defaultCapabilitiesProvider,
     ILspLoggerFactory lspLoggerFactory,
     IThreadingContext threadingContext)
     : base(requestDispatcherFactory, globalOptions, listenerProvider, lspWorkspaceRegistrationService, lspLoggerFactory, threadingContext)
 {
     _typeScriptCapabilitiesProvider = typeScriptCapabilitiesProvider;
 }
 public AbstractInProcLanguageClient(
     AbstractRequestDispatcherFactory requestDispatcherFactory,
     IGlobalOptionService globalOptions,
     IAsynchronousOperationListenerProvider listenerProvider,
     LspWorkspaceRegistrationService lspWorkspaceRegistrationService,
     ILspLoggerFactory lspLoggerFactory,
     IThreadingContext threadingContext)
 {
     _requestDispatcherFactory        = requestDispatcherFactory;
     GlobalOptions                    = globalOptions;
     _listenerProvider                = listenerProvider;
     _lspWorkspaceRegistrationService = lspWorkspaceRegistrationService;
     _lspLoggerFactory                = lspLoggerFactory;
     _threadingContext                = threadingContext;
 }
Esempio n. 13
0
 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 LspWorkspaceRegistrationEventListener(LspWorkspaceRegistrationService lspWorkspaceRegistrationService)
 {
     _lspWorkspaceRegistrationService = lspWorkspaceRegistrationService;
 }
Esempio n. 15
0
 public VSTypeScriptLspWorkspaceManagerFactory(LspWorkspaceRegistrationService lspWorkspaceRegistrationService) : base(lspWorkspaceRegistrationService)
 {
 }
 public LspWorkspaceManagerFactory(LspWorkspaceRegistrationService lspWorkspaceRegistrationService)
 {
     _workspaceRegistrationService = lspWorkspaceRegistrationService;
 }
Esempio n. 17
0
 public XamlLspWorkspaceManagerFactory(LspWorkspaceRegistrationService lspWorkspaceRegistrationService) : base(lspWorkspaceRegistrationService)
 {
 }