git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
[psc-ide] log version mismatches when reading externs files
commit7cb2c29da84bb37963a7394369af7ee3eb5690d9 authorChristoph Hegemann <christoph.hegemann1337@gmail.com> dateTue 6 Dec 2016, 14:40 (10 years ago) parenta9c525c
6 files changed+37−19
psc-ide-server/Main.hs+5−4 psc-ide-server/README.md+3−1 src/Language/PureScript/Ide/Externs.hs+23−9 src/Language/PureScript/Ide/Logging.hs+1 src/Language/PureScript/Ide/Types.hs+3−4 src/Language/PureScript/Ide/Watcher.hs+2−1
psc-ide-server/Main.hs+5−4
@@ -74,7 +74,7 @@ data Options = Options
7474
7575main :: IO ()
7676main = do
77− opts'@(Options dir globs outputPath port noWatch debug logLevel) <- Opts.execParser opts
77+ opts'@(Options dir globs outputPath port noWatch polling debug logLevel) <- Opts.execParser opts
7878 when debug (putText "Parsed Options:" *> print opts')
7979 maybe (pure ()) setCurrentDirectory dir
8080 ideState <- newTVarIO emptyIdeState
@@ -106,14 +106,15 @@ main = do
106106 <*> Opts.switch (Opts.long "debug")
107107 <*> (parseLogLevel <$> Opts.strOption
108108 (Opts.long "log-level"
109− <> Opts.value ""
110− <> Opts.help "One of \"debug\", \"perf\" or \"all\""))
109+ `mappend` Opts.value ""
110+ `mappend` Opts.help "One of \"debug\", \"perf\", \"all\" or \"none\""))
111111 opts = Opts.info (version <*> Opts.helper <*> parser) mempty
112112 parseLogLevel s = case s of
113113 "debug" -> LogDebug
114114 "perf" -> LogPerf
115115 "all" -> LogAll
116− _ -> LogNone
116+ "none" -> LogNone
117+ _ -> LogDefault
117118 version = Opts.abortOption
118119 (InfoMsg (showVersion Paths.version))
119120 (Opts.long "version" `mappend` Opts.help "Show the version number")
psc-ide-server/README.md+3−1
@@ -22,9 +22,11 @@ It supports the following options:
2222- `--output-directory`: Specify where to look for compiled output inside your
2323 project directory. Defaults to `output/`, relative to either the current
2424 directory or the directory specified by `-d`.
25−- `--debug`: Enables some logging meant for debugging
25+<<<<<<< HEAD
2626- `--polling`: Uses polling instead of file system events to watch the externs
2727 files. This flag is reversed on Windows and polling is the default.
28+- `--debug`: DEPRECATED: use --log-level="debug"
29+- `--log-level`: Can be set to one of "all", "none", "debug" and "perf"
2830- `--no-watch`: Disables the filewatcher
2931- `--version`: Output psc-ide version
3032
src/Language/PureScript/Ide/Externs.hs+23−9
@@ -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)
src/Language/PureScript/Ide/Logging.hs+1
@@ -19,6 +19,7 @@ runLogger logLevel' =
1919 runStdoutLoggingT . filterLogger (\_ logLevel ->
2020 case logLevel' of
2121 LogAll -> True
22+ LogDefault -> not (logLevel == LevelOther "perf" || logLevel == LevelDebug)
2223 LogNone -> False
2324 LogDebug -> not (logLevel == LevelOther "perf")
2425 LogPerf -> logLevel == LevelOther "perf")
src/Language/PureScript/Ide/Types.hs+3−4
@@ -12,9 +12,8 @@
1212-- Type definitions for psc-ide
1313-----------------------------------------------------------------------------
1414
15−{-# LANGUAGE DeriveFoldable #-}
16−{-# LANGUAGE OverloadedStrings #-}
17−{-# LANGUAGE TemplateHaskell #-}
15+{-# LANGUAGE DeriveFoldable #-}
16+{-# LANGUAGE TemplateHaskell #-}
1817
1918module Language.PureScript.Ide.Types where
2019
@@ -111,7 +110,7 @@ newtype AstData a = AstData (Map P.ModuleName (DefinitionSites a, TypeAnnotation
111110 -- annotations found in a module
112111 deriving (Show, Eq, Ord, Functor, Foldable)
113112
114−data IdeLogLevel = LogDebug | LogPerf | LogAll | LogNone
113+data IdeLogLevel = LogDebug | LogPerf | LogAll | LogDefault | LogNone
115114 deriving (Show, Eq)
116115
117116data Configuration =
src/Language/PureScript/Ide/Watcher.hs+2−1
@@ -22,6 +22,7 @@ import Control.Concurrent.STM
2222import Language.PureScript.Ide.Externs
2323import Language.PureScript.Ide.State
2424import Language.PureScript.Ide.Types
25+import Language.PureScript.Ide.Util
2526import System.FilePath
2627import System.FSNotify
2728
@@ -31,7 +32,7 @@ reloadFile :: TVar IdeState -> Event -> IO ()
3132reloadFile _ Removed{} = pure ()
3233reloadFile ref ev = do
3334 let fp = eventPath ev
34− ef' <- runExceptT (readExternFile fp)
35+ ef' <- runLogger LogDefault (runExceptT (readExternFile fp))
3536 case ef' of
3637 Left _ -> pure ()
3738 Right ef -> do