on master help sign in
Dar building cleanup (#2357)

* reorganizing dar building

commit08a6332ea7dd4a2374283f69ccad14c08bc1ed8f authorRobin Krom <robin@digitalasset.com> dateWed 31 Jul 2019, 18:34 (7 years ago) parentfbe192a
1 file changed+35−9
src/Development/IDE/Core/Rules.hs+35−9
src/Development/IDE/Core/Rules.hs+35−9
@@ -22,8 +22,8 @@ module Development.IDE.Core.Rules(
2222 getDefinition,
2323 getDependencies,
2424 getParsedModule,
25− getTcModuleResults,
26− fileFromParsedModule
25+ fileFromParsedModule,
26+ writeIfacesAndHie,
2727 ) where
2828
2929import Control.Monad.Except
@@ -56,6 +56,9 @@ import HscTypes
5656import qualified Development.IDE.Spans.AtPoint as AtPoint
5757import Development.IDE.Core.Service
5858import Development.IDE.Core.Shake
59+import System.Directory
60+import System.FilePath
61+import MkIface
5962
6063-- | This is useful for rules to convert rules that can only produce errors or
6164-- a result into the more general IdeResult type that supports producing
@@ -120,15 +123,38 @@ getDefinition file pos = fmap join $ runMaybeT $ do
120123getParsedModule :: NormalizedFilePath -> Action (Maybe ParsedModule)
121124getParsedModule file = use GetParsedModule file
122125
123−-- | Get typechecked module results of a file and all it's transitive dependencies.
124−getTcModuleResults :: NormalizedFilePath -> Action (Maybe ([TcModuleResult], HscEnv))
125−getTcModuleResults file =
126+-- | Write interface files and hie files to the location specified by the given options.
127+writeIfacesAndHie ::
128+ NormalizedFilePath -> NormalizedFilePath -> Action (Maybe [NormalizedFilePath])
129+writeIfacesAndHie ifDir main =
126130 runMaybeT $ do
127− files <- transitiveModuleDeps <$> useE GetDependencies file
128− tms <- usesE TypeCheck (file : files)
131+ files <- transitiveModuleDeps <$> useE GetDependencies main
132+ tcms <- usesE TypeCheck (main : files)
129133 session <- lift $ useNoFile_ GhcSession
130− pure (tms, session)
131−
134+ liftIO $ concat <$> mapM (writeTcm session) tcms
135+ where
136+ writeTcm session tcm =
137+ do
138+ let fp =
139+ fromNormalizedFilePath ifDir </>
140+ (ms_hspp_file $
141+ pm_mod_summary $ tm_parsed_module $ tmrModule tcm)
142+ createDirectoryIfMissing True (takeDirectory fp)
143+ let ifaceFp = replaceExtension fp ".hi"
144+ let hieFp = replaceExtension fp ".hie"
145+ writeIfaceFile
146+ (hsc_dflags session)
147+ ifaceFp
148+ (hm_iface $ tmrModInfo tcm)
149+ hieFile <-
150+ liftIO $
151+ runHsc session $
152+ mkHieFile
153+ (pm_mod_summary $ tm_parsed_module $ tmrModule tcm)
154+ (fst $ tm_internals_ $ tmrModule tcm)
155+ (fromJust $ tm_renamed_source $ tmrModule tcm)
156+ writeHieFile hieFp hieFile
157+ pure [toNormalizedFilePath ifaceFp, toNormalizedFilePath hieFp]
132158
133159------------------------------------------------------------
134160-- Rules