cspmchecker 0.2.1 → 1.0.0
raw patch · 5 files changed
+39/−23 lines, 5 filesdep ~haskelinedep ~libcspm
Dependency ranges changed: haskeline, libcspm
Files
- cspmchecker.cabal +4/−4
- src/Checker/Main.hs +15/−8
- src/Checker/Monad.hs +2/−2
- src/InteractiveChecker/Main.hs +15/−6
- src/InteractiveChecker/Monad.hs +3/−3
cspmchecker.cabal view
@@ -10,7 +10,7 @@ Build-type: Simple Cabal-version: >=1.9.2 Synopsis: A command line type checker for CSPM files.-Version: 0.2.1+Version: 1.0.0 Source-Repository head type: git@@ -21,7 +21,7 @@ type: git location: git://github.com/tomgr/libcspm.git subdir: cspmchecker- tag: release-0.2.1+ tag: release-1.0.0 Executable cspmchecker Main-is: Main.hs@@ -31,7 +31,7 @@ Build-depends: base >= 4 && < 5,- libcspm >= 0.2.1,+ libcspm, filepath >= 1.2, mtl >= 2.0, directory >= 1.0@@ -48,6 +48,6 @@ filepath >= 1.2, mtl >= 2.0, directory >= 1.0,- haskeline >= 0.6+ haskeline >= 0.7 Hs-Source-Dirs: src/InteractiveChecker
src/Checker/Main.hs view
@@ -14,6 +14,7 @@ import Data.Version (showVersion) import CSPM+import qualified CSPM.CommandLineOptions as CSPM import CSPM.PrettyPrinter import Monad import Util.Annotated@@ -44,10 +45,11 @@ fss <- mapM getFilesFromDir [dir | dir <- dirs'] return $ files'++concat fss -doFile :: FilePath -> Checker Bool-doFile fp = do+doFile :: Options -> FilePath -> Checker Bool+doFile opts fp = do liftIO $ putStr $ "Checking "++fp++"....."- res <- tryM $ do+ res <- tryM $ convertExceptionsToPanics $ do+ CSPM.setOptions (cspmOptions opts) ms <- parseFile fp rms <- CSPM.renameFile ms typeCheckFile rms@@ -70,12 +72,16 @@ data Options = Options { recursive :: Bool, help :: Bool,- printVersion :: Bool+ printVersion :: Bool,+ cspmOptions :: CSPM.Options }++defaultOptions :: Options defaultOptions = Options { recursive = False, help = False,- printVersion = False+ printVersion = False,+ cspmOptions = CSPM.defaultOptions } options :: [OptDescr (Options -> Options)]@@ -90,6 +96,7 @@ (NoArg (\o -> o { help = True })) "Display usage message" ]+ ++ CSPM.allOptions cspmOptions (\ opts x -> opts { cspmOptions = x }) header :: String header = "Usage: cspmchecker [OPTION...] files..."@@ -99,7 +106,7 @@ args <- getArgs st <- initCheckerState runChecker st $ case getOpt RequireOrder options args of- (_,_,e:es) -> liftIO $ putStr $ show $ concat (e:es) ++ usageInfo header options+ (_,_,e:es) -> liftIO $ putStr $ concat (e:es) ++ usageInfo header options (o,files, []) -> do let opts = foldl (flip id) defaultOptions o case (opts, files) of@@ -112,8 +119,8 @@ liftIO $ putStr $ usageInfo header options (Options { recursive = True }, dirs) -> do tasks <- mapM (liftIO . getFilesFromDir) dirs- countSuccesses (map doFile (concat tasks))+ countSuccesses (map (doFile opts) (concat tasks)) (_, []) -> liftIO $ putStr $ usageInfo header options (_, files) -> - countSuccesses (map doFile files)+ countSuccesses (map (doFile opts) files)
src/Checker/Monad.hs view
@@ -14,12 +14,12 @@ initCheckerState :: IO CheckerState initCheckerState = do- sess <- newCSPMSession+ sess <- newCSPMSession defaultEvaluatorOptions return $ CheckerState sess [] resetCSPM :: Checker () resetCSPM = do- sess <- liftIO $ newCSPMSession+ sess <- liftIO $ newCSPMSession defaultEvaluatorOptions modify (\st -> st { cspmSession = sess, lastWarnings = [] }) type Checker = StateT CheckerState IO
src/InteractiveChecker/Main.hs view
@@ -6,15 +6,18 @@ import Data.List import Prelude hiding (catch) import System.Console.Haskeline+import System.Environment import System.FilePath import System.IO import CSPM-import CSPM.Compiler.Processes+import CSPM.Evaluator.ProcessValues+import CSPM.Evaluator.ValuePrettyPrinter import Monad import Util.Annotated import Util.Exception import Util.Monad+import qualified Util.MonadicPrettyPrint as M import Util.Prelude import Util.PrettyPrint @@ -32,7 +35,12 @@ historyFile = Just $ joinPath [settingsDir, "interactive", "prompt_history"] }- runInputT settings interactiveLoop+ runInputT settings $ do+ args <- liftIO $ getArgs+ case args of+ [f] -> handleSourceError () (loadFileCommand f)+ _ -> return ()+ interactiveLoop interactiveLoop :: InputT IChecker () interactiveLoop = do@@ -128,7 +136,7 @@ completeExpression :: CompletionFunc IChecker completeExpression = wrapCompleter expressionBreakers $ \str -> do ns <- getBoundNames- return [s | n <- ns, let OccName s = nameOccurrence n, str `isPrefixOf` s]+ return [s | n <- ns, let s = show n, str `isPrefixOf` s] -- Commands @@ -144,7 +152,7 @@ rnExpr <- renameExpression pExpr typ <- typeOfExpression rnExpr outputStrLn $ show $ - text str <+> text "::" <+> prettyPrint typ+ text (trim str) <+> text "::" <+> prettyPrint typ return () loadFileCommand :: String -> InputT IChecker ()@@ -177,10 +185,11 @@ tcStmt <- typeCheckInteractiveStmt rnStmt dsStmt <- desugarInteractiveStmt tcStmt case (unAnnotate dsStmt) of- Bind d -> bindDeclaration d+ Bind ds -> mapM_ bindDeclaration ds Evaluate e -> do v <- evaluateExpression e- outputStrLn $ show $ prettyPrint v+ d <- M.prettyPrint v+ outputStrLn $ show $ d printProcCommand :: String -> InputT IChecker () printProcCommand str = do
src/InteractiveChecker/Monad.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-} module Monad where -import Control.Monad.State+import Control.Monad.State.Strict import System.Console.Haskeline import System.Directory import System.FilePath@@ -20,12 +20,12 @@ initICheckerState = do settingsDirectory <- getAppUserDataDirectory "cspmchecker" createDirectoryIfMissing True $ joinPath [settingsDirectory, "interactive"]- sess <- newCSPMSession+ sess <- newCSPMSession defaultEvaluatorOptions return $ ICheckerState settingsDirectory sess Nothing resetCSPM :: IChecker () resetCSPM = do- sess <- liftIO $ newCSPMSession+ sess <- liftIO $ newCSPMSession defaultEvaluatorOptions modify (\st -> st { cspmSession = sess }) type IChecker = StateT ICheckerState IO