@@ -9,6 +9,7 @@ module Development.IDE.Plugin.Completions
99 ) where
1010
1111import Control.Concurrent.Async (concurrently )
12+ import Control.Concurrent.Extra
1213import Control.Monad.Extra
1314import Control.Monad.IO.Class
1415import Control.Monad.Trans.Maybe
@@ -30,7 +31,7 @@ import Development.IDE.GHC.ExactPrint (Annotated (annsA)
3031import Development.IDE.GHC.Util (prettyPrint )
3132import Development.IDE.Graph
3233import Development.IDE.Graph.Classes
33- import Development.IDE.Import.FindImports
34+ import Development.IDE.Import.FindImports
3435import Development.IDE.Plugin.CodeAction (newImport ,
3536 newImportToEdit )
3637import Development.IDE.Plugin.CodeAction.ExactPrint
@@ -138,15 +139,19 @@ getCompletionsLSP ide plId
138139 nonLocalCompls <- useWithStaleFast NonLocalCompletions npath
139140 pm <- useWithStaleFast GetParsedModule npath
140141 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}
148152 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)
150155 case compls of
151156 Just (cci', parsedMod, bindMap) -> do
152157 pfix <- VFS. getCompletionPrefix position cnts
@@ -163,14 +168,6 @@ getCompletionsLSP ide plId
163168 _ -> return (InL $ List [] )
164169
165170----------------------------------------------------------------------------------------------------
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)
174171
175172extendImportCommand :: PluginCommand IdeState
176173extendImportCommand =
0 commit comments