on master help sign in
Merge pull request #346 from obsidiansystems/repl-default-language

Repl use default-language

commitad3fef1e084f5b7026a213794870245d1334470c authorAli Abrar <aliabrar@gmail.com> dateFri 17 May 2019, 23:10 (7 years ago) parente32cbc62e093d8
1 file changed+15−2
lib/command/src/Obelisk/Command/Run.hs+15−2
lib/command/src/Obelisk/Command/Run.hs+15−2
@@ -10,8 +10,8 @@ import Control.Monad
1010import Control.Monad.IO.Class (liftIO)
1111import Control.Monad.Reader (MonadIO)
1212import Data.Either
13−import Data.List
14−import Data.List.NonEmpty as NE
13+import qualified Data.List as L
14+import qualified Data.List.NonEmpty as NE
1515import Data.Maybe
1616import qualified Data.Text as T
1717import Distribution.PackageDescription.Parsec (parseGenericPackageDescription)
@@ -46,6 +46,8 @@ data CabalPackageInfo = CabalPackageInfo
4646 -- ^ List of hs src dirs of the library component
4747 , _cabalPackageInfo_defaultExtensions :: [Extension]
4848 -- ^ List of globally enable extensions of the library component
49+ , _cabalPackageInfo_defaultLanguage :: Maybe Language
50+ -- ^ List of globally set languages of the library component
4951 }
5052
5153-- NOTE: `run` is not polymorphic like the rest because we use StaticPtr to invoke it.
@@ -136,6 +138,8 @@ parseCabalPackage dir = do
136138 fromMaybe (pure ".") $ NE.nonEmpty $ hsSourceDirs $ libBuildInfo lib
137139 , _cabalPackageInfo_defaultExtensions =
138140 defaultExtensions $ libBuildInfo lib
141+ , _cabalPackageInfo_defaultLanguage =
142+ defaultLanguage $ libBuildInfo lib
139143 }
140144 Left (_, errors) -> do
141145 putLog Error $ T.pack $ "Failed to parse " <> cabalFp <> ":"
@@ -165,17 +169,22 @@ withGhciScript pkgs f = do
165169 putLog Warning $ T.pack $ "Failed to find pkgs in " <> intercalate ", " pkgDirErrs
166170
167171 let extensions = packageInfos >>= _cabalPackageInfo_defaultExtensions
172+ languageFromPkgs = L.nub $ mapMaybe _cabalPackageInfo_defaultLanguage packageInfos
173+ -- NOTE when no default-language is present cabal sets Haskell98
174+ language = NE.toList $ fromMaybe (Haskell98 NE.:| []) $ NE.nonEmpty languageFromPkgs
168175 extensionsLine = if extensions == mempty
169176 then ""
170177 else ":set " <> intercalate " " ((("-X" <>) . prettyShow) <$> extensions)
171178 dotGhci = unlines $
172179 [ ":set -i" <> intercalate ":" (packageInfos >>= rootedSourceDirs)
173180 , extensionsLine
181+ , ":set " <> intercalate " " (("-X" <>) . prettyShow <$> language)
174182 , ":load Backend Frontend"
175183 , "import Obelisk.Run"
176184 , "import qualified Frontend"
177185 , "import qualified Backend"
178186 ]
187+ warnDifferentLanguages language
179188 withSystemTempDirectory "ob-ghci" $ \fp -> do
180189 let dotGhciPath = fp </> ".ghci"
181190 liftIO $ writeFile dotGhciPath dotGhci
@@ -185,6 +194,10 @@ withGhciScript pkgs f = do
185194 rootedSourceDirs pkg = NE.toList $
186195 (_cabalPackageInfo_packageRoot pkg </>) <$> _cabalPackageInfo_sourceDirs pkg
187196
197+warnDifferentLanguages :: MonadObelisk m => [Language] -> m ()
198+warnDifferentLanguages (_:_:_) = putLog Warning "Different languages detected across packages which may result in errors when loading the repl"
199+warnDifferentLanguages _ = return ()
200+
188201-- | Run ghci repl
189202runGhciRepl
190203 :: MonadObelisk m