From 89afb1a841c83d41ca3da72217c377932cdf5e93 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Mon, 17 Feb 2020 14:11:01 +0100 Subject: Remove two stage constuction --- editors/code/src/ctx.ts | 25 +++++++++++-------------- editors/code/src/main.ts | 11 ++++------- 2 files changed, 15 insertions(+), 21 deletions(-) (limited to 'editors') diff --git a/editors/code/src/ctx.ts b/editors/code/src/ctx.ts index 935a6f2b5..21f1025cf 100644 --- a/editors/code/src/ctx.ts +++ b/editors/code/src/ctx.ts @@ -1,6 +1,5 @@ import * as vscode from 'vscode'; import * as lc from 'vscode-languageclient'; -import { strict as assert } from "assert"; import { Config } from './config'; import { createClient } from './client'; @@ -15,23 +14,21 @@ export class Ctx { // FIXME: this actually needs syncronization of some kind (check how // vscode deals with `deactivate()` call when extension has some work scheduled // on the event loop to get a better picture of what we can do here) - client: lc.LanguageClient | null = null; + client: lc.LanguageClient; private extCtx: vscode.ExtensionContext; - constructor(extCtx: vscode.ExtensionContext) { - this.config = new Config(extCtx); - this.extCtx = extCtx; - } - - async startServer(serverPath: string) { - assert(this.client == null); - - const client = await createClient(this.config, serverPath); - - this.pushCleanup(client.start()); + static async create(config: Config, extCtx: vscode.ExtensionContext, serverPath: string): Promise { + const client = await createClient(config, serverPath); + const res = new Ctx(config, extCtx, client); + res.pushCleanup(client.start()); await client.onReady(); + return res; + } - this.client = client; + private constructor(config: Config, extCtx: vscode.ExtensionContext, client: lc.LanguageClient) { + this.config = config; + this.extCtx = extCtx; + this.client = client } get activeRustEditor(): vscode.TextEditor | undefined { diff --git a/editors/code/src/main.ts b/editors/code/src/main.ts index 947d5eb90..0ad7ef1bb 100644 --- a/editors/code/src/main.ts +++ b/editors/code/src/main.ts @@ -6,13 +6,14 @@ import { activateStatusDisplay } from './status_display'; import { Ctx } from './ctx'; import { activateHighlighting } from './highlighting'; import { ensureServerBinary } from './installation/server'; +import { Config } from './config'; let ctx: Ctx | undefined; export async function activate(context: vscode.ExtensionContext) { - ctx = new Ctx(context); + const config = new Config(context) - const serverPath = await ensureServerBinary(ctx.config.serverSource); + const serverPath = await ensureServerBinary(config.serverSource); if (serverPath == null) { throw new Error( "Rust Analyzer Language Server is not available. " + @@ -24,11 +25,7 @@ export async function activate(context: vscode.ExtensionContext) { // registers its `onDidChangeDocument` handler before us. // // This a horribly, horribly wrong way to deal with this problem. - try { - await ctx.startServer(serverPath); - } catch (e) { - vscode.window.showErrorMessage(e.message); - } + ctx = await Ctx.create(config, context, serverPath); // Commands which invokes manually via command palette, shortcut, etc. ctx.registerCommand('reload', (ctx) => { -- cgit v1.2.3