Skip to content

Commit 612c86b

Browse files
committed
Compute completions on kick
This is not only for faster completions. It's also needed to have semi-fresh completions after editing. This is specially important for the first completion request of a file - without this change there are no completions available at all
1 parent b26c499 commit 612c86b

File tree

3 files changed

+31
-26
lines changed

3 files changed

+31
-26
lines changed

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

+13-8
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,19 @@ module Development.IDE.Core.OfInterest(
2020
import Control.Concurrent.Strict
2121
import Control.Monad
2222
import Control.Monad.IO.Class
23-
import Data.HashMap.Strict (HashMap)
24-
import qualified Data.HashMap.Strict as HashMap
25-
import qualified Data.Text as T
23+
import Data.HashMap.Strict (HashMap)
24+
import qualified Data.HashMap.Strict as HashMap
25+
import qualified Data.Text as T
2626
import Development.IDE.Graph
2727

28-
import Control.Concurrent.STM.Stats (atomically,
29-
modifyTVar')
30-
import qualified Data.ByteString as BS
31-
import Data.Maybe (catMaybes)
28+
import Control.Concurrent.STM.Stats (atomically,
29+
modifyTVar')
30+
import qualified Data.ByteString as BS
31+
import Data.Maybe (catMaybes)
3232
import Development.IDE.Core.ProgressReporting
3333
import Development.IDE.Core.RuleTypes
3434
import Development.IDE.Core.Shake
35+
import Development.IDE.Plugin.Completions.Types
3536
import Development.IDE.Types.Exports
3637
import Development.IDE.Types.Location
3738
import Development.IDE.Types.Logger
@@ -113,7 +114,11 @@ kick = do
113114
liftIO $ progressUpdate progress KickStarted
114115

115116
-- Update the exports map
116-
results <- uses GenerateCore files <* uses GetHieAst files
117+
results <- uses GenerateCore files
118+
<* uses GetHieAst files
119+
-- needed to have non local completions on the first edit
120+
-- when the first edit breaks the module header
121+
<* uses NonLocalCompletions files
117122
let mguts = catMaybes results
118123
void $ liftIO $ atomically $ modifyTVar' exportsMap (updateExportsMapMg mguts)
119124

ghcide/src/Development/IDE/Plugin/Completions.hs

-18
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33

44
module Development.IDE.Plugin.Completions
55
( descriptor
6-
, LocalCompletions(..)
7-
, NonLocalCompletions(..)
86
) where
97

108
import Control.Concurrent.Async (concurrently)
@@ -29,7 +27,6 @@ import Development.IDE.GHC.ExactPrint (Annotated (annsA)
2927
astA)
3028
import Development.IDE.GHC.Util (prettyPrint)
3129
import Development.IDE.Graph
32-
import Development.IDE.Graph.Classes
3330
import Development.IDE.Plugin.CodeAction (newImport,
3431
newImportToEdit)
3532
import Development.IDE.Plugin.CodeAction.ExactPrint
@@ -41,7 +38,6 @@ import Development.IDE.Types.HscEnvEq (HscEnvEq (envPack
4138
import qualified Development.IDE.Types.KnownTargets as KT
4239
import Development.IDE.Types.Location
4340
import GHC.Exts (fromList, toList)
44-
import GHC.Generics
4541
import Ide.Plugin.Config (Config)
4642
import Ide.Types
4743
import qualified Language.LSP.Server as LSP
@@ -98,20 +94,6 @@ dropListFromImportDecl iDecl = let
9894
f x = x
9995
in f <$> iDecl
10096

101-
-- | Produce completions info for a file
102-
type instance RuleResult LocalCompletions = CachedCompletions
103-
type instance RuleResult NonLocalCompletions = CachedCompletions
104-
105-
data LocalCompletions = LocalCompletions
106-
deriving (Eq, Show, Typeable, Generic)
107-
instance Hashable LocalCompletions
108-
instance NFData LocalCompletions
109-
110-
data NonLocalCompletions = NonLocalCompletions
111-
deriving (Eq, Show, Typeable, Generic)
112-
instance Hashable NonLocalCompletions
113-
instance NFData NonLocalCompletions
114-
11597
-- | Generate code actions.
11698
getCompletionsLSP
11799
:: IdeState

ghcide/src/Development/IDE/Plugin/Completions/Types.hs

+18
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
{-# LANGUAGE DerivingStrategies #-}
33
{-# LANGUAGE GADTs #-}
44
{-# LANGUAGE OverloadedLabels #-}
5+
{-# LANGUAGE TypeFamilies #-}
56
module Development.IDE.Plugin.Completions.Types (
67
module Development.IDE.Plugin.Completions.Types
78
) where
@@ -11,8 +12,11 @@ import qualified Data.Map as Map
1112
import qualified Data.Text as T
1213

1314
import Data.Aeson (FromJSON, ToJSON)
15+
import Data.Hashable (Hashable)
1416
import Data.Text (Text)
17+
import Data.Typeable (Typeable)
1518
import Development.IDE.GHC.Compat
19+
import Development.IDE.Graph (RuleResult)
1620
import Development.IDE.Spans.Common
1721
import GHC.Generics (Generic)
1822
import Ide.Plugin.Config (Config)
@@ -23,6 +27,20 @@ import Ide.Types (PluginId)
2327
import Language.LSP.Server (MonadLsp)
2428
import Language.LSP.Types (CompletionItemKind (..), Uri)
2529

30+
-- | Produce completions info for a file
31+
type instance RuleResult LocalCompletions = CachedCompletions
32+
type instance RuleResult NonLocalCompletions = CachedCompletions
33+
34+
data LocalCompletions = LocalCompletions
35+
deriving (Eq, Show, Typeable, Generic)
36+
instance Hashable LocalCompletions
37+
instance NFData LocalCompletions
38+
39+
data NonLocalCompletions = NonLocalCompletions
40+
deriving (Eq, Show, Typeable, Generic)
41+
instance Hashable NonLocalCompletions
42+
instance NFData NonLocalCompletions
43+
2644
-- From haskell-ide-engine/src/Haskell/Ide/Engine/LSP/Completions.hs
2745

2846
data Backtick = Surrounded | LeftSide

0 commit comments

Comments
 (0)