public static AppState TryCreateWorkspace( TextDocumentManager documentManager, Uri rootFolder, EventHandler <WorkspaceProgressEventArgs> progressHandler, TestContext?testContext = null, DScriptSettings settings = null) { documentManager = documentManager ?? new TextDocumentManager(new PathTable()); // Need to clear event handlers to detach old instances like IncrementalWorkspaceProvider from the new events. documentManager.ClearEventHandlers(); var pathTable = documentManager.PathTable; // Check if we need to prepopulate the document manager // with some documents (for testing) if (testContext.HasValue) { foreach (var document in testContext.Value.PrePopulatedDocuments) { documentManager.Add(AbsolutePath.Create(pathTable, document.Uri), document); } } // Bootstrap the DScript frontend to parse/type-check the workspace given a build config var loggingContext = new LoggingContext("LanguageServer"); var fileSystem = new PassThroughFileSystem(pathTable); var engineContext = EngineContext.CreateNew( cancellationToken: System.Threading.CancellationToken.None, pathTable: pathTable, fileSystem: fileSystem); var engineAbstraction = new LanguageServiceEngineAbstraction(documentManager, pathTable, engineContext.FileSystem); var frontEndContext = engineContext.ToFrontEndContext(loggingContext); var rootFolderAsAbsolutePath = rootFolder.ToAbsolutePath(pathTable); if (!WorkspaceBuilder.TryBuildWorkspaceForIde( frontEndContext: frontEndContext, engineContext: engineContext, frontEndEngineAbstraction: engineAbstraction, rootFolder: rootFolderAsAbsolutePath, progressHandler: progressHandler, workspace: out var workspace, skipNuget: settings?.SkipNuget ?? false, // Do not skip nuget by default. controller: out var controller)) { // The workspace builder fails when the workspace contains any errors // however, we bail out only if the workspace is null, which happens only // when the config could not be parsed if (workspace == null || controller == null) { return(null); } } var incrementalWorkspaceProvider = new IncrementalWorkspaceProvider(controller, pathTable, workspace, documentManager, testContext); return(new AppState(engineAbstraction, documentManager, pathTable, incrementalWorkspaceProvider, workspace)); }
private void UpdateSettings(DScriptSettings settings) { if (settings.DebugOnStart) { Debugger.Launch(); } ((JsonRpcWithException)m_mainRpcChannel).FailFastOnException = settings.FailFastOnError; m_settings = settings; }