@@ -110,6 +110,7 @@ import Development.IDE.GHC.Compat.Util (emptyUDFM, plusUDFM)
110
110
import qualified Language.LSP.Server as LSP
111
111
import qualified Language.LSP.Types as LSP
112
112
import Unsafe.Coerce
113
+ import Data.Tuple.Extra (first )
113
114
114
115
-- | Given a string buffer, return the string (after preprocessing) and the 'ParsedModule'.
115
116
parseModule
@@ -996,22 +997,36 @@ getDocsBatch
996
997
-> IO (Either ErrorMessages (Map. Map Name (Either GetDocsFailure (Maybe HsDocString , Maybe (Map. Map Int HsDocString )))))
997
998
-- ^ Return a 'Map' of 'Name's to 'Either' (no docs messages) (general doc body & arg docs)
998
999
getDocsBatch hsc_env _mod _names = do
999
- ((_warns,errs), res) <- initTc hsc_env HsSrcFile False _mod fakeSpan $ Map. fromList <$> traverse findNameInfo _names
1000
+ ((_warns,errs), res) <- initTc hsc_env HsSrcFile False _mod fakeSpan $ Map. fromList <$> traverse findNameInfo undefined
1000
1001
pure $ maybeToEither errs res
1001
1002
where
1002
- findNameInfo :: Name -> IOEnv (Env TcGblEnv TcLclEnv ) (Name , Either GetDocsFailure (Maybe HsDocString , Maybe (Map. Map Int HsDocString )))
1003
- findNameInfo name =
1004
- case nameModule_maybe name of
1005
- Nothing -> return (name, Left $ NameHasNoModule name)
1006
- Just mod -> do
1003
+ namesGroupedByModule :: [(Maybe Module , [Name ])]
1004
+ namesGroupedByModule =
1005
+ groupSort $ fmap (first nameModule_maybe . dupe) _names
1006
+
1007
+ fun :: [(Maybe Module , [Name ])] -> undefined
1008
+ fun a = undefined
1009
+
1010
+
1011
+ loadModuleInterfaceOnce :: Module -> TcRn ModIface
1012
+ loadModuleInterfaceOnce =
1013
+ loadModuleInterface " getModuleInterface"
1014
+
1015
+ loadedInterfaces :: [(Maybe (TcRn ModIface ), [Name ])]
1016
+ loadedInterfaces =
1017
+ fmap (first (fmap loadModuleInterfaceOnce)) namesGroupedByModule
1018
+
1019
+ -- 2021-11-18: NOTE: This code initially was taken from: https://hackage.haskell.org/package/ghc-9.2.1/docs/src/GHC.Runtime.Eval.html#getDocs
1020
+ findNameInfo :: Maybe Module -> Name -> IOEnv (Env TcGblEnv TcLclEnv ) (Name , Either GetDocsFailure (Maybe HsDocString , Maybe (Map. Map Int HsDocString )))
1021
+ findNameInfo Nothing name = return (name, Left $ NameHasNoModule name)
1022
+ findNameInfo (Just mod ) name = do
1007
1023
ModIface
1008
1024
{ mi_doc_hdr = mb_doc_hdr
1009
1025
, mi_decl_docs = DeclDocMap dmap
1010
1026
, mi_arg_docs = ArgDocMap amap
1011
1027
}
1012
1028
<- loadModuleInterface " getModuleInterface" mod
1013
1029
pure . (name,) $
1014
- -- 2021-11-17: NOTE: one does not simply check into Mordor (not 1 mode)
1015
1030
if isNothing mb_doc_hdr && Map. null dmap && Map. null amap
1016
1031
then Left $ NoDocsInIface mod $ isCompiled name
1017
1032
else Right (Map. lookup name dmap, Map. lookup name amap)
0 commit comments