@@ -12,8 +12,8 @@
12-- Handles externs files for psc-ide
12-- Handles externs files for psc-ide
13-----------------------------------------------------------------------------
13-----------------------------------------------------------------------------
15−{-# LANGUAGE OverloadedStrings #-}
15+{-# LANGUAGE RecordWildCards #-}
16−{-# LANGUAGE RecordWildCards #-}
16+{-# LANGUAGE PackageImports #-}
18module Language.PureScript.Ide.Externs
18module Language.PureScript.Ide.Externs
19 ( readExternFile
19 ( readExternFile
@@ -23,24 +23,38 @@ module Language.PureScript.Ide.Externs
24import Protolude
24import Protolude
26−import Control.Lens ((^.))
26+import Control.Lens ((^.))
27+import "monad-logger" Control.Monad.Logger
27−import Data.Aeson (decodeStrict)
28+import Data.Aeson (decodeStrict)
28−import qualified Data.ByteString as BS
29+import qualified Data.ByteString as BS
29−import qualified Data.Map as Map
30+import qualified Data.Map as Map
31+import Data.Version (showVersion)
30import Language.PureScript.Ide.Error (PscIdeError (..))
32import Language.PureScript.Ide.Error (PscIdeError (..))
31import Language.PureScript.Ide.Types
33import Language.PureScript.Ide.Types
32import Language.PureScript.Ide.Util
34import Language.PureScript.Ide.Util
34−import qualified Language.PureScript as P
36+import qualified Language.PureScript as P
36−readExternFile :: (MonadIO m, MonadError PscIdeError m) =>
38+readExternFile :: (MonadIO m, MonadError PscIdeError m, MonadLogger m) =>
37 FilePath -> m P.ExternsFile
39 FilePath -> m P.ExternsFile
38readExternFile fp = do
40readExternFile fp = do
39 parseResult <- liftIO (decodeStrict <$> BS.readFile fp)
41 parseResult <- liftIO (decodeStrict <$> BS.readFile fp)
40 case parseResult of
42 case parseResult of
44+ throwError (GeneralError
41− Nothing -> throwError . GeneralError $ "Parsing the extern at: " <> toS fp <> " failed"
45+ ("Parsing the extern at: " <> toS fp <> " failed"))
47+ | P.efVersion externs /= version -> do
48+ let errMsg = "Version mismatch for the externs at: " <> toS fp
49+ <> " Expected: " <> version
50+ <> " Found: " <> P.efVersion externs
52+ throwError (GeneralError errMsg)
42 Just externs -> pure externs
53 Just externs -> pure externs
56+ version = toS (showVersion P.version)
44convertExterns :: P.ExternsFile -> (Module, [(P.ModuleName, P.DeclarationRef)])
58convertExterns :: P.ExternsFile -> (Module, [(P.ModuleName, P.DeclarationRef)])
45convertExterns ef =
59convertExterns ef =
46 ((P.efModuleName ef, decls), exportDecls)
60 ((P.efModuleName ef, decls), exportDecls)