@@ -51,7 +51,6 @@ noProgressReporting = return $ ProgressReporting
5151-- | State used in 'delayedProgressReporting'
5252data State
5353 = NotStarted
54- | Completed
5554 | Stopped
5655 | Running (Async () )
5756
@@ -61,9 +60,8 @@ data Transition = Event ProgressEvent | StopProgress
6160updateState :: IO () -> Transition -> State -> IO State
6261updateState _ _ Stopped = pure Stopped
6362updateState start (Event KickStarted ) NotStarted = Running <$> async start
64- updateState start (Event KickStarted ) Completed = Running <$> async start
6563updateState start (Event KickStarted ) (Running a) = cancel a >> Running <$> async start
66- updateState _ (Event KickCompleted ) (Running a) = cancel a $> Completed
64+ updateState _ (Event KickCompleted ) (Running a) = cancel a $> NotStarted
6765updateState _ (Event KickCompleted ) st = pure st
6866updateState _ StopProgress (Running a) = cancel a $> Stopped
6967updateState _ StopProgress st = pure st
@@ -96,8 +94,10 @@ delayedProgressReporting
9694delayedProgressReporting before after lspEnv optProgressStyle = do
9795 inProgressVar <- newVar $ InProgress 0 0 mempty
9896 progressState <- newVar NotStarted
99- let progressUpdate event = modifyVar_ progressState $ updateState (mRunLspT lspEnv $ lspShakeProgress inProgressVar) (Event event)
100- progressStop = modifyVar_ progressState $ updateState (mRunLspT lspEnv $ lspShakeProgress inProgressVar) StopProgress
97+ let progressUpdate event = updateStateVar $ Event event
98+ progressStop = updateStateVar StopProgress
99+ updateStateVar = modifyVar_ progressState . updateState (mRunLspT lspEnv $ lspShakeProgress inProgressVar)
100+
101101 inProgress :: NormalizedFilePath -> Action a -> Action a
102102 inProgress = withProgressVar inProgressVar
103103 return ProgressReporting {.. }
@@ -132,12 +132,14 @@ delayedProgressReporting before after lspEnv optProgressStyle = do
132132 { _message = Nothing
133133 }
134134 }
135+ loop _ _ | optProgressStyle == NoProgress =
136+ forever $ liftIO $ threadDelay maxBound
135137 loop id prev = do
136138 InProgress {.. } <- liftIO $ readVar inProgress
139+ liftIO $ sleep after
137140 if todo == 0 then loop id 0 else do
138141 let next = 100 * fromIntegral done / fromIntegral todo
139- liftIO $ sleep after
140- when (optProgressStyle /= NoProgress && next /= prev) $
142+ when (next /= prev) $
141143 LSP. sendNotification LSP. SProgress $
142144 LSP. ProgressParams
143145 { _token = id
0 commit comments