@@ -12,8 +12,8 @@
1212-- Handles externs files for psc-ide
1313-----------------------------------------------------------------------------
1414
15−{-# LANGUAGE OverloadedStrings #-}
16−{-# LANGUAGE RecordWildCards #-}
15+{-# LANGUAGE RecordWildCards #-}
16+{-# LANGUAGE PackageImports #-}
1717
1818module Language.PureScript.Ide.Externs
1919 ( readExternFile
@@ -23,24 +23,38 @@ module Language.PureScript.Ide.Externs
2323
2424import Protolude
2525
26−import Control.Lens ((^.))
27−import Data.Aeson (decodeStrict)
28−import qualified Data.ByteString as BS
29−import qualified Data.Map as Map
26+import Control.Lens ((^.))
27+import "monad-logger" Control.Monad.Logger
28+import Data.Aeson (decodeStrict)
29+import qualified Data.ByteString as BS
30+import qualified Data.Map as Map
31+import Data.Version (showVersion)
3032import Language.PureScript.Ide.Error (PscIdeError (..))
3133import Language.PureScript.Ide.Types
3234import Language.PureScript.Ide.Util
3335
34−import qualified Language.PureScript as P
36+import qualified Language.PureScript as P
3537
36−readExternFile :: (MonadIO m, MonadError PscIdeError m) =>
38+readExternFile :: (MonadIO m, MonadError PscIdeError m, MonadLogger m) =>
3739 FilePath -> m P.ExternsFile
3840readExternFile fp = do
3941 parseResult <- liftIO (decodeStrict <$> BS.readFile fp)
4042 case parseResult of
41− Nothing -> throwError . GeneralError $ "Parsing the extern at: " <> toS fp <> " failed"
43+ Nothing ->
44+ throwError (GeneralError
45+ ("Parsing the extern at: " <> toS fp <> " failed"))
46+ Just externs
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
51+ logErrorN errMsg
52+ throwError (GeneralError errMsg)
4253 Just externs -> pure externs
4354
55+ where
56+ version = toS (showVersion P.version)
57+
4458convertExterns :: P.ExternsFile -> (Module, [(P.ModuleName, P.DeclarationRef)])
4559convertExterns ef =
4660 ((P.efModuleName ef, decls), exportDecls)