@@ -9,6 +9,7 @@ module Development.IDE.Plugin.Completions
9
9
) where
10
10
11
11
import Control.Concurrent.Async (concurrently )
12
+ import Control.Concurrent.Extra
12
13
import Control.Monad.Extra
13
14
import Control.Monad.IO.Class
14
15
import Control.Monad.Trans.Maybe
@@ -30,7 +31,7 @@ import Development.IDE.GHC.ExactPrint (Annotated (annsA)
30
31
import Development.IDE.GHC.Util (prettyPrint )
31
32
import Development.IDE.Graph
32
33
import Development.IDE.Graph.Classes
33
- import Development.IDE.Import.FindImports
34
+ import Development.IDE.Import.FindImports
34
35
import Development.IDE.Plugin.CodeAction (newImport ,
35
36
newImportToEdit )
36
37
import Development.IDE.Plugin.CodeAction.ExactPrint
@@ -138,15 +139,19 @@ getCompletionsLSP ide plId
138
139
nonLocalCompls <- useWithStaleFast NonLocalCompletions npath
139
140
pm <- useWithStaleFast GetParsedModule npath
140
141
binds <- fromMaybe (mempty , zeroMapping) <$> useWithStaleFast GetBindings npath
141
- exportsMapIO <- fmap (envPackageExports . fst ) <$> useWithStaleFast GhcSession npath
142
- exportsMap <- mapM liftIO exportsMapIO
143
- locatedImports <- fromMaybe (mempty , zeroMapping) <$> useWithStaleFast GetLocatedImports npath
144
- localModuleExports <- liftIO $ buildLocalModuleExports ide locatedImports
145
- let moduleExports = maybe Map. empty getModuleExportsMap exportsMap
146
- exportsCompItems = foldMap (map (fromIdentInfo uri) . Set. toList) . Map. elems . getExportsMap <$> exportsMap
147
- exportsCompls = mempty {anyQualCompls = fromMaybe [] exportsCompItems}
142
+
143
+ -- set up the exports map including both package and project-level identifiers
144
+ packageExportsMapIO <- fmap (envPackageExports . fst ) <$> useWithStaleFast GhcSession npath
145
+ packageExportsMap <- mapM liftIO packageExportsMapIO
146
+ projectExportsMap <- liftIO $ readVar (exportsMap $ shakeExtras ide)
147
+ let exportsMap = fromMaybe mempty packageExportsMap <> projectExportsMap
148
+
149
+ let moduleExports = getModuleExportsMap exportsMap
150
+ exportsCompItems = foldMap (map (fromIdentInfo uri) . Set. toList) . Map. elems . getExportsMap $ exportsMap
151
+ exportsCompls = mempty {anyQualCompls = exportsCompItems}
148
152
let compls = (fst <$> localCompls) <> (fst <$> nonLocalCompls) <> Just exportsCompls
149
- pure (opts, fmap (,pm,binds) compls, Map. unionWith (<>) localModuleExports moduleExports)
153
+
154
+ pure (opts, fmap (,pm,binds) compls, moduleExports)
150
155
case compls of
151
156
Just (cci', parsedMod, bindMap) -> do
152
157
pfix <- VFS. getCompletionPrefix position cnts
@@ -163,14 +168,6 @@ getCompletionsLSP ide plId
163
168
_ -> return (InL $ List [] )
164
169
165
170
----------------------------------------------------------------------------------------------------
166
-
167
- buildLocalModuleExports :: IdeState -> ([(Located ModuleName , Maybe ArtifactsLocation )], PositionMapping ) -> IO (Map. HashMap T. Text (Set. HashSet IdentInfo ))
168
- buildLocalModuleExports ide inMap = do
169
- let artifactLoctions = mapMaybe snd (fst inMap)
170
- let afp = map artifactFilePath artifactLoctions
171
- let queries = map (useWithStaleFast GetModIface ) afp
172
- files <- liftIO $ mapM (runIdeAction " Completion" (shakeExtras ide)) queries
173
- pure (buildModuleExportMapFrom $ map (hirModIface . fst ) $ catMaybes files)
174
171
175
172
extendImportCommand :: PluginCommand IdeState
176
173
extendImportCommand =
0 commit comments