Skip to content

Commit 045a6e3

Browse files
authored
Fix progress counting (#1789)
1 parent 9308ff4 commit 045a6e3

File tree

4 files changed

+44
-4
lines changed

4 files changed

+44
-4
lines changed

ghcide/ghcide.cabal

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,8 @@ test-suite ghcide-tests
365365
tasty-hunit,
366366
tasty-quickcheck,
367367
tasty-rerun,
368-
text
368+
text,
369+
unordered-containers,
369370
if (impl(ghc >= 8.6))
370371
build-depends:
371372
record-dot-preprocessor,
@@ -379,6 +380,7 @@ test-suite ghcide-tests
379380
Development.IDE.Test.Runfiles
380381
Experiments
381382
Experiments.Types
383+
Progress
382384
default-extensions:
383385
BangPatterns
384386
DeriveFunctor

ghcide/src/Development/IDE/Core/ProgressReporting.hs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ module Development.IDE.Core.ProgressReporting
77
-- utilities, reexported for use in Core.Shake
88
, mRunLspT
99
, mRunLspTCallback
10+
-- for tests
11+
, recordProgress
12+
, InProgress(..)
1013
)
1114
where
1215

@@ -18,7 +21,6 @@ import Control.Monad.Trans.Class (lift)
1821
import Data.Foldable (for_)
1922
import Data.Functor (($>))
2023
import qualified Data.HashMap.Strict as HMap
21-
import Data.Maybe (isJust)
2224
import qualified Data.Text as T
2325
import Data.Unique
2426
import Development.IDE.GHC.Orphans ()
@@ -76,8 +78,14 @@ data InProgress = InProgress
7678
recordProgress :: NormalizedFilePath -> (Int -> Int) -> InProgress -> InProgress
7779
recordProgress file shift InProgress{..} = case HMap.alterF alter file current of
7880
((prev, new), m') ->
79-
let todo' = if isJust prev then todo else todo + 1
80-
done' = if new == 0 then done+1 else done
81+
let (done',todo') =
82+
case (prev,new) of
83+
(Nothing,0) -> (done+1, todo+1)
84+
(Nothing,_) -> (done, todo+1)
85+
(Just 0, 0) -> (done , todo)
86+
(Just 0, _) -> (done-1, todo)
87+
(Just _, 0) -> (done+1, todo)
88+
(Just _, _) -> (done , todo)
8189
in InProgress todo' done' m'
8290
where
8391
alter x = let x' = maybe (shift 0) shift x in ((x,x'), Just x')

ghcide/test/exe/Main.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ import qualified Language.LSP.Types as LSP
101101
import Data.IORef.Extra (atomicModifyIORef_)
102102
import qualified Development.IDE.Plugin.HLS.GhcIde as Ghcide
103103
import Text.Regex.TDFA ((=~))
104+
import qualified Progress
104105

105106
waitForProgressBegin :: Session ()
106107
waitForProgressBegin = skipManyTill anyMessage $ satisfyMaybe $ \case
@@ -5463,6 +5464,7 @@ unitTests = do
54635464
actualOrder <- liftIO $ readIORef orderRef
54645465

54655466
liftIO $ actualOrder @?= reverse [(1::Int)..20]
5467+
, Progress.tests
54665468
]
54675469

54685470
testIde :: IDE.Arguments -> Session () -> IO ()

ghcide/test/exe/Progress.hs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
module Progress (tests) where
2+
3+
import Development.IDE.Core.ProgressReporting
4+
import Test.Tasty
5+
import Test.Tasty.HUnit
6+
import qualified Data.HashMap.Strict as Map
7+
8+
tests :: TestTree
9+
tests = testGroup "Progress"
10+
[ reportProgressTests
11+
]
12+
13+
reportProgressTests :: TestTree
14+
reportProgressTests = testGroup "recordProgress"
15+
[ test "addNew" addNew
16+
, test "increase" increase
17+
, test "decrease" decrease
18+
, test "done" done
19+
]
20+
where
21+
p0 = InProgress 0 0 mempty
22+
addNew = recordProgress "A" succ p0
23+
increase = recordProgress "A" succ addNew
24+
decrease = recordProgress "A" succ increase
25+
done = recordProgress "A" pred decrease
26+
model InProgress{..} =
27+
(done, todo) @?= (length (filter (==0) (Map.elems current)), Map.size current)
28+
test name p = testCase name $ model p

0 commit comments

Comments
 (0)