git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
[psc-ide] log version mismatches when reading externs files
7cb2c29Christoph Hegemann
psc-ide-server/Main.hs+5−4
@@ -74,7 +74,7 @@ data Options = Options
74
74
75main :: IO ()
75main :: IO ()
76main = do
76main = 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
78 when debug (putText "Parsed Options:" *> print opts')
78 when debug (putText "Parsed Options:" *> print opts')
79 maybe (pure ()) setCurrentDirectory dir
79 maybe (pure ()) setCurrentDirectory dir
80 ideState <- newTVarIO emptyIdeState
80 ideState <- newTVarIO emptyIdeState
@@ -106,14 +106,15 @@ main = do
106 <*> Opts.switch (Opts.long "debug")
106 <*> Opts.switch (Opts.long "debug")
107 <*> (parseLogLevel <$> Opts.strOption
107 <*> (parseLogLevel <$> Opts.strOption
108 (Opts.long "log-level"
108 (Opts.long "log-level"
109− <> Opts.value ""
109+ `mappend` Opts.value ""
110− <> Opts.help "One of \"debug\", \"perf\" or \"all\""))
110+ `mappend` Opts.help "One of \"debug\", \"perf\", \"all\" or \"none\""))
111 opts = Opts.info (version <*> Opts.helper <*> parser) mempty
111 opts = Opts.info (version <*> Opts.helper <*> parser) mempty
112 parseLogLevel s = case s of
112 parseLogLevel s = case s of
113 "debug" -> LogDebug
113 "debug" -> LogDebug
114 "perf" -> LogPerf
114 "perf" -> LogPerf
115 "all" -> LogAll
115 "all" -> LogAll
116− _ -> LogNone
116+ "none" -> LogNone
117+ _ -> LogDefault
117 version = Opts.abortOption
118 version = Opts.abortOption
118 (InfoMsg (showVersion Paths.version))
119 (InfoMsg (showVersion Paths.version))
119 (Opts.long "version" `mappend` Opts.help "Show the version number")
120 (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:
22- `--output-directory`: Specify where to look for compiled output inside your
22- `--output-directory`: Specify where to look for compiled output inside your
23 project directory. Defaults to `output/`, relative to either the current
23 project directory. Defaults to `output/`, relative to either the current
24 directory or the directory specified by `-d`.
24 directory or the directory specified by `-d`.
25−- `--debug`: Enables some logging meant for debugging
25+<<<<<<< HEAD
26- `--polling`: Uses polling instead of file system events to watch the externs
26- `--polling`: Uses polling instead of file system events to watch the externs
27 files. This flag is reversed on Windows and polling is the default.
27 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"
28- `--no-watch`: Disables the filewatcher
30- `--no-watch`: Disables the filewatcher
29- `--version`: Output psc-ide version
31- `--version`: Output psc-ide version
30
32
src/Language/PureScript/Ide/Externs.hs+23−9
@@ -12,8 +12,8 @@
12-- Handles externs files for psc-ide
12-- Handles externs files for psc-ide
13-----------------------------------------------------------------------------
13-----------------------------------------------------------------------------
14
14
15−{-# LANGUAGE OverloadedStrings #-}
15+{-# LANGUAGE RecordWildCards #-}
16−{-# LANGUAGE RecordWildCards #-}
16+{-# LANGUAGE PackageImports #-}
17
17
18module Language.PureScript.Ide.Externs
18module Language.PureScript.Ide.Externs
19 ( readExternFile
19 ( readExternFile
@@ -23,24 +23,38 @@ module Language.PureScript.Ide.Externs
23
23
24import Protolude
24import Protolude
25
25
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
33
35
34−import qualified Language.PureScript as P
36+import qualified Language.PureScript as P
35
37
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
43+ Nothing ->
44+ throwError (GeneralError
41− Nothing -> throwError . GeneralError $ "Parsing the extern at: " <> toS fp <> " failed"
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)
42 Just externs -> pure externs
53 Just externs -> pure externs
43
54
55+ where
56+ version = toS (showVersion P.version)
57+
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)
src/Language/PureScript/Ide/Logging.hs+1
@@ -19,6 +19,7 @@ runLogger logLevel' =
19 runStdoutLoggingT . filterLogger (\_ logLevel ->
19 runStdoutLoggingT . filterLogger (\_ logLevel ->
20 case logLevel' of
20 case logLevel' of
21 LogAll -> True
21 LogAll -> True
22+ LogDefault -> not (logLevel == LevelOther "perf" || logLevel == LevelDebug)
22 LogNone -> False
23 LogNone -> False
23 LogDebug -> not (logLevel == LevelOther "perf")
24 LogDebug -> not (logLevel == LevelOther "perf")
24 LogPerf -> logLevel == LevelOther "perf")
25 LogPerf -> logLevel == LevelOther "perf")
src/Language/PureScript/Ide/Types.hs+3−4
@@ -12,9 +12,8 @@
12-- Type definitions for psc-ide
12-- Type definitions for psc-ide
13-----------------------------------------------------------------------------
13-----------------------------------------------------------------------------
14
14
15−{-# LANGUAGE DeriveFoldable #-}
15+{-# LANGUAGE DeriveFoldable #-}
16−{-# LANGUAGE OverloadedStrings #-}
17−{-# LANGUAGE TemplateHaskell #-}
16+{-# LANGUAGE TemplateHaskell #-}
18
17
19module Language.PureScript.Ide.Types where
18module Language.PureScript.Ide.Types where
20
19
@@ -111,7 +110,7 @@ newtype AstData a = AstData (Map P.ModuleName (DefinitionSites a, TypeAnnotation
111 -- annotations found in a module
110 -- annotations found in a module
112 deriving (Show, Eq, Ord, Functor, Foldable)
111 deriving (Show, Eq, Ord, Functor, Foldable)
113
112
114−data IdeLogLevel = LogDebug | LogPerf | LogAll | LogNone
113+data IdeLogLevel = LogDebug | LogPerf | LogAll | LogDefault | LogNone
115 deriving (Show, Eq)
114 deriving (Show, Eq)
116
115
117data Configuration =
116data Configuration =
src/Language/PureScript/Ide/Watcher.hs+2−1
@@ -22,6 +22,7 @@ import Control.Concurrent.STM
22import Language.PureScript.Ide.Externs
22import Language.PureScript.Ide.Externs
23import Language.PureScript.Ide.State
23import Language.PureScript.Ide.State
24import Language.PureScript.Ide.Types
24import Language.PureScript.Ide.Types
25+import Language.PureScript.Ide.Util
25import System.FilePath
26import System.FilePath
26import System.FSNotify
27import System.FSNotify
27
28
@@ -31,7 +32,7 @@ reloadFile :: TVar IdeState -> Event -> IO ()
31reloadFile _ Removed{} = pure ()
32reloadFile _ Removed{} = pure ()
32reloadFile ref ev = do
33reloadFile ref ev = do
33 let fp = eventPath ev
34 let fp = eventPath ev
34− ef' <- runExceptT (readExternFile fp)
35+ ef' <- runLogger LogDefault (runExceptT (readExternFile fp))
35 case ef' of
36 case ef' of
36 Left _ -> pure ()
37 Left _ -> pure ()
37 Right ef -> do
38 Right ef -> do