Skip to content

Commit 5f3c065

Browse files
committed
Handle progress messages sequentially
1 parent 007164d commit 5f3c065

File tree

3 files changed

+11
-9
lines changed

3 files changed

+11
-9
lines changed

handler/builder.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ func (handler *InoHandler) rebuildEnvironmentLoop() {
9595
}()
9696

9797
handler.dataMux.Lock()
98-
handler.initializeWorkbench(nil)
98+
handler.initializeWorkbench(context.Background(), nil)
9999
handler.dataMux.Unlock()
100100
done <- true
101101
close(done)

handler/handler.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ func (handler *InoHandler) HandleMessageFromIDE(ctx context.Context, conn *jsonr
178178
defer handler.dataMux.Unlock()
179179

180180
log.Printf("LS --- initializing workbench (running)")
181-
handler.initializeWorkbench(p)
181+
handler.initializeWorkbench(ctx, p)
182182

183183
// clangd should be running now...
184184
handler.clangdStarted.Broadcast()
@@ -410,8 +410,6 @@ func (handler *InoHandler) HandleMessageFromIDE(ctx context.Context, conn *jsonr
410410
err = handler.ClangdConn.Notify(ctx, req.Method, params)
411411
} else {
412412
log.Printf(prefix + "sent to Clang")
413-
ctx, cancel := context.WithTimeout(ctx, 800*time.Millisecond)
414-
defer cancel()
415413
result, err = lsp.SendRequest(ctx, handler.ClangdConn, req.Method, params)
416414
}
417415
if err == nil && handler.buildSketchSymbolsLoad {
@@ -450,7 +448,7 @@ func (handler *InoHandler) exit() {
450448
os.Exit(1)
451449
}
452450

453-
func (handler *InoHandler) initializeWorkbench(params *lsp.InitializeParams) error {
451+
func (handler *InoHandler) initializeWorkbench(ctx context.Context, params *lsp.InitializeParams) error {
454452
currCppTextVersion := 0
455453
if params != nil {
456454
log.Printf(" --> initialize(%s)\n", params.RootURI)
@@ -495,8 +493,6 @@ func (handler *InoHandler) initializeWorkbench(params *lsp.InitializeParams) err
495493
},
496494
}
497495

498-
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
499-
defer cancel()
500496
if err := handler.ClangdConn.Notify(ctx, "textDocument/didChange", syncEvent); err != nil {
501497
log.Println(" error reinitilizing clangd:", err)
502498
return err
@@ -513,7 +509,7 @@ func (handler *InoHandler) initializeWorkbench(params *lsp.InitializeParams) err
513509
}
514510

515511
clangdStream := jsonrpc2.NewBufferedStream(clangdStdio, jsonrpc2.VSCodeObjectCodec{})
516-
clangdHandler := jsonrpc2.AsyncHandler(jsonrpc2.HandlerWithError(handler.FromClangd))
512+
clangdHandler := AsyncHandler{jsonrpc2.HandlerWithError(handler.FromClangd)}
517513
handler.ClangdConn = jsonrpc2.NewConn(context.Background(), clangdStream, clangdHandler)
518514

519515
// Send initialization command to clangd

handler/syncer.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,11 @@ type AsyncHandler struct {
1313

1414
// Handle handles a request or notification
1515
func (ah AsyncHandler) Handle(ctx context.Context, conn *jsonrpc2.Conn, req *jsonrpc2.Request) {
16-
go ah.handler.Handle(ctx, conn, req)
16+
switch req.Method {
17+
case // Request that should not be parallelized
18+
"$/progress":
19+
ah.handler.Handle(ctx, conn, req)
20+
default: // By default process all requests in parallel
21+
go ah.handler.Handle(ctx, conn, req)
22+
}
1723
}

0 commit comments

Comments
 (0)