fix: broken pending request filtering in file worker and broken monad instance

This commit is contained in:
Marc Huisinga 2020-10-06 14:37:27 +02:00 committed by Sebastian Ullrich
parent e420d101f9
commit d433fe58af
2 changed files with 9 additions and 6 deletions

View file

@ -279,7 +279,14 @@ partial def mainLoop : Unit → ServerM Unit
st ← read;
msg ← readLspMessage st.hIn;
pendingRequests ← st.pendingRequestsRef.get;
pendingRequests ← monadLift $ pendingRequests.filterM (fun task => do f ← hasFinished task; pure ¬f);
let filterFinishedTasks : PendingRequestMap → RequestID → Task (Except IO.Error Unit) → IO PendingRequestMap :=
(fun acc id task => do
f ← hasFinished task;
pure $ if f then
acc.erase id
else
acc);
pendingRequests ← monadLift $ pendingRequests.foldM filterFinishedTasks pendingRequests;
st.pendingRequestsRef.set pendingRequests;
match msg with
| Message.request id method (some params) => do
@ -301,7 +308,7 @@ _ ← Lsp.readLspRequestAs i "initialize" InitializeParams;
docRequest ← Lsp.readLspRequestAs i "textDocument/didOpen" DidOpenTextDocumentParams;
doc ← openDocument o docRequest.param;
docRef ← IO.mkRef doc;
pendingRequestsRef ← IO.mkRef #[];
pendingRequestsRef ← IO.mkRef (RBMap.empty : PendingRequestMap);
runReader (mainLoop ()) (⟨i, o, docRef, pendingRequestsRef⟩ : ServerContext)
end Server

View file

@ -16,9 +16,5 @@ instance Thunk.monad : Monad Thunk :=
{ pure := @Thunk.pure,
bind := @Thunk.bind }
instance Task.monad : Monad Task :=
{ pure := @Task.pure,
bind := @Task.bind }
end Server
end Lean