@@ -311,7 +311,7 @@ lspShakeProgress getLspId sendMsg prog = do
311311 sendMsg $ LSP.ReqWorkDoneProgressCreate $ LSP.fmServerWorkDoneProgressCreateRequest
312312 lspId $ LSP.WorkDoneProgressCreateParams
313313 { _token = u }
314− bracket_ (start u) (stop u) (loop u)
314+ bracket_ (start u) (stop u) (loop u Nothing)
315315 where
316316 start id = sendMsg $ LSP.NotWorkDoneProgressBegin $ LSP.fmServerWorkDoneProgressBeginNotification
317317 LSP.ProgressParams
@@ -331,20 +331,23 @@ lspShakeProgress getLspId sendMsg prog = do
331331 }
332332 }
333333 sample = 0.1
334− loop id = forever $ do
334+ loop id prev = do
335335 sleep sample
336336 p <- prog
337337 let done = countSkipped p + countBuilt p
338338 let todo = done + countUnknown p + countTodo p
339− sendMsg $ LSP.NotWorkDoneProgressReport $ LSP.fmServerWorkDoneProgressReportNotification
340− LSP.ProgressParams
341− { _token = id
342− , _value = LSP.WorkDoneProgressReportParams
343− { _cancellable = Nothing
344− , _message = Just $ T.pack $ show done <> "/" <> show todo
345− , _percentage = Nothing
346− }
347− }
339+ let next = Just $ T.pack $ show done <> "/" <> show todo
340+ when (next /= prev) $
341+ sendMsg $ LSP.NotWorkDoneProgressReport $ LSP.fmServerWorkDoneProgressReportNotification
342+ LSP.ProgressParams
343+ { _token = id
344+ , _value = LSP.WorkDoneProgressReportParams
345+ { _cancellable = Nothing
346+ , _message = next
347+ , _percentage = Nothing
348+ }
349+ }
350+ loop id next
348351
349352shakeProfile :: IdeState -> FilePath -> IO ()
350353shakeProfile IdeState{..} = shakeProfileDatabase shakeDb