@@ -28,6 +28,7 @@ module Development.IDE.Core.Rules(
2828 getParsedModuleWithComments ,
2929 getClientConfigAction ,
3030 usePropertyAction ,
31+ getHieFile ,
3132 -- * Rules
3233 CompiledLinkables (.. ),
3334 getParsedModuleRule ,
@@ -55,6 +56,7 @@ module Development.IDE.Core.Rules(
5556 getParsedModuleDefinition ,
5657 typeCheckRuleDefinition ,
5758 getRebuildCount ,
59+ getSourceFileSource ,
5860 GhcSessionDepsConfig (.. ),
5961 Log (.. ),
6062 DisplayTHWarning (.. ),
@@ -96,6 +98,7 @@ import qualified Data.Text as T
9698import qualified Data.Text.Encoding as T
9799import Data.Time (UTCTime (.. ))
98100import Data.Tuple.Extra
101+ import Data.Typeable (cast )
99102import Development.IDE.Core.Compile
100103import Development.IDE.Core.FileExists hiding (LogShake , Log )
101104import Development.IDE.Core.FileStore (getFileContents ,
@@ -1232,3 +1235,15 @@ mainRule recorder RulesConfig{..} = do
12321235 persistentDocMapRule
12331236 persistentImportMapRule
12341237 getLinkableRule recorder
1238+
1239+ -- | Get HieFile for haskell file on NormalizedFilePath
1240+ getHieFile :: NormalizedFilePath -> Action (Maybe HieFile )
1241+ getHieFile nfp = runMaybeT $ do
1242+ HAR {hieAst} <- MaybeT $ use GetHieAst nfp
1243+ tmr <- MaybeT $ use TypeCheck nfp
1244+ ghc <- MaybeT $ use GhcSession nfp
1245+ msr <- MaybeT $ use GetModSummaryWithoutTimestamps nfp
1246+ source <- lift $ getSourceFileSource nfp
1247+ let exports = tcg_exports $ tmrTypechecked tmr
1248+ typedAst <- MaybeT $ pure $ cast hieAst
1249+ liftIO $ runHsc (hscEnv ghc) $ mkHieFile' (msrModSummary msr) exports typedAst source
0 commit comments