11import * as vscode from 'vscode' ;
22import * as lc from 'vscode-languageclient' ;
3- import { strict as assert } from "assert" ;
43
54import { Config } from './config' ;
65import { createClient } from './client' ;
@@ -15,23 +14,21 @@ export class Ctx {
1514 // FIXME: this actually needs syncronization of some kind (check how
1615 // vscode deals with `deactivate()` call when extension has some work scheduled
1716 // on the event loop to get a better picture of what we can do here)
18- client : lc . LanguageClient | null = null ;
17+ client : lc . LanguageClient ;
1918 private extCtx : vscode . ExtensionContext ;
2019
21- constructor ( extCtx : vscode . ExtensionContext ) {
22- this . config = new Config ( extCtx ) ;
23- this . extCtx = extCtx ;
24- }
25-
26- async startServer ( serverPath : string ) {
27- assert ( this . client == null ) ;
28-
29- const client = await createClient ( this . config , serverPath ) ;
30-
31- this . pushCleanup ( client . start ( ) ) ;
20+ static async create ( config : Config , extCtx : vscode . ExtensionContext , serverPath : string ) : Promise < Ctx > {
21+ const client = await createClient ( config , serverPath ) ;
22+ const res = new Ctx ( config , extCtx , client ) ;
23+ res . pushCleanup ( client . start ( ) ) ;
3224 await client . onReady ( ) ;
25+ return res ;
26+ }
3327
34- this . client = client ;
28+ private constructor ( config : Config , extCtx : vscode . ExtensionContext , client : lc . LanguageClient ) {
29+ this . config = config ;
30+ this . extCtx = extCtx ;
31+ this . client = client
3532 }
3633
3734 get activeRustEditor ( ) : vscode . TextEditor | undefined {
0 commit comments