예제 #1
0
        public WorkspaceManager(
            OmniSharp.Extensions.LanguageServer.Server.ILanguageServer languageServer,
            ILogger <WorkspaceManager> logger,
            IServiceProvider serviceProvider,
            ProjectManager projectManager)
        {
            TaskScheduler.UnobservedTaskException += (s, e) =>
            {
                logger.LogWarning(e.Exception, "Unobserved exception thrown.");
            };

            _languageServer  = languageServer;
            _logger          = logger;
            _serviceProvider = serviceProvider;
            _projectManager  = projectManager;

            var textProvider = (TextDocumentScriptTextProvider)_serviceProvider.GetService <IScriptTextProvider>();

            textProvider.OnDidOpenTextDocument += async(s, e) =>
            {
                var filePath = e.TextDocument.Uri.ToFilePath();

                if (Path.GetExtension(filePath).CaseInsensitiveEquals(".psc") && _projectManager.Projects.Count() == 0)
                {
                    await UpdateProjects(UpdateProjectsOptions.ReloadProjects);
                }

                await _projectManager.PublishDiagnosticsForFilePath(filePath);
            };

            _languageServer.AddHandlers(textProvider);
        }
예제 #2
0
        public async Task InitializedAsync(ILanguageServer languageServer)
        {
            if (languageServer is null)
            {
                throw new ArgumentNullException(nameof(languageServer));
            }

            // Initialized request, this occurs once the server and client have agreed on what sort of features they both support. It only happens once.

            var workspaceDirectory = ResolveWorkspaceDirectory(languageServer.ClientSettings);

            foreach (var fileChangeDetector in _fileChangeDetectors)
            {
                // We create a dummy cancellation token for now. Have an issue to pass through the cancellation token in the O# lib: https://github.com/OmniSharp/csharp-language-server-protocol/issues/200
                var cancellationToken = CancellationToken.None;
                await fileChangeDetector.StartAsync(workspaceDirectory, cancellationToken);
            }

            lock (_disposeLock)
            {
                if (_disposed)
                {
                    // Got disposed while starting our file change detectors. We need to re-stop our change detectors.
                    Stop();
                }
            }
        }
 public TextDocumentSynchronizationEndpoint(
     ILanguageServer router,
     WorkspaceSnapshotManager snapshotManager,
     ForegroundThreadManager threadManager)
 {
     _router          = router ?? throw new ArgumentNullException(nameof(router));
     _snapshotManager = snapshotManager;
     _threadManager   = threadManager;
 }
예제 #4
0
        public DefaultWorkspaceDirectoryPathResolver(ILanguageServer languageServer)
        {
            if (languageServer is null)
            {
                throw new ArgumentNullException(nameof(languageServer));
            }

            _languageServer = languageServer;
        }
예제 #5
0
        public CompletionHandler(ILanguageServer server, BufferManager bufferManager)
        {
            _server        = server;
            _bufferManager = bufferManager;
            _mocks         = new ConcurrentDictionary <Type, Structure>();
            _bindings      = new ConcurrentDictionary <string, Type>();

            Console.Error.WriteLine("CompletionHandler: " + this.GetHashCode());

            InitializeMockObjects();
            InitializeBindings();
        }
예제 #6
0
        public ProjectProgramOptionsProvider(
            string projectFlagsFileName,
            OmniSharp.Extensions.LanguageServer.Server.ILanguageServer languageServer,
            IXmlProjectLocator projectLocator,
            IXmlProjectLoader projectLoader,
            CreationKitProgramOptionsProvider ambientOptionsProvider,
            ILogger <ProjectProgramOptionsProvider> logger)
        {
            _projectFlagsFileName   = projectFlagsFileName;
            _languageServer         = languageServer;
            _projectLocator         = projectLocator;
            _projectLoader          = projectLoader;
            _ambientOptionsProvider = ambientOptionsProvider;

            _logger = logger;
        }
예제 #7
0
 public DocumentChangeHandler(ILanguageServer server, BufferManager bufferManager)
 {
     _server        = server;
     _bufferManager = bufferManager;
     Console.Error.WriteLine("DocumentChangeHandler: " + this.GetHashCode());
 }
 public void SetLanguageServer(ILanguageServer server)
 {
     _server = server;
 }
예제 #9
0
 public DocumentCloseHandler(ILanguageServer server)
 {
     _server = server;
     Console.Error.WriteLine("DocumentCloseHandler: " + this.GetHashCode());
 }