doctest-discover 0.1.0.8 → 0.1.0.9
raw patch · 6 files changed
+31/−19 lines, 6 filessetup-changed
Files
- Setup.hs +0/−2
- doctest-discover.cabal +1/−1
- src/Config.hs +10/−5
- src/Main.hs +3/−4
- src/Runner.hs +16/−6
- test/Doctest-Main.hs +1/−1
− Setup.hs
@@ -1,2 +0,0 @@-import Distribution.Simple-main = defaultMain
doctest-discover.cabal view
@@ -1,5 +1,5 @@ name: doctest-discover-version: 0.1.0.8+version: 0.1.0.9 synopsis: Easy way to run doctests via cabal description: doctest-discover provides an easy way to run doctests via cabal license: PublicDomain
src/Config.hs view
@@ -8,22 +8,24 @@ data Config = Config { ignore :: Maybe [String],- sourceFolders :: Maybe [String]+ sourceFolders :: Maybe [String],+ doctestOptions :: Maybe [String] } deriving (Show) instance FromJSON Config where parseJSON (Object v) = Config <$> (v .:? "ignore") <*>- (v .:? "sourceFolders")+ (v .:? "sourceFolders") <*>+ (v .:? "doctestOptions") -- | Parses config json as string to the Config type -- -- >>> config "{\"ignore\": [] }"--- Just (Config {ignore = Just [], sourceFolders = Nothing})+-- Just (Config {ignore = Just [], sourceFolders = Nothing, doctestOptions = Nothing}) -- -- >>> config "{\"ignore\": [\"Foo.hs\"] }"--- Just (Config {ignore = Just ["Foo.hs"], sourceFolders = Nothing})+-- Just (Config {ignore = Just ["Foo.hs"], sourceFolders = Nothing, doctestOptions = Nothing}) -- -- >>> config "{\"ignore\": [1,2,3] }" -- Nothing@@ -32,7 +34,10 @@ -- Nothing -- -- >>> config "{\"sourceFolders\": [\"src\"] }"--- Just (Config {ignore = Nothing, sourceFolders = Just ["src"]})+-- Just (Config {ignore = Nothing, sourceFolders = Just ["src"], doctestOptions = Nothing})+--+-- >>> config "{\"doctestOptions\": [\"--some-option\"] }"+-- Just (Config {ignore = Nothing, sourceFolders = Nothing, doctestOptions = Just ["--some-option"]}) -- config :: String -> Maybe Config config json = decode (B.pack json) :: Maybe Config
src/Main.hs view
@@ -4,6 +4,7 @@ import Control.Applicative import Control.Monad import Data.Maybe (fromMaybe)+import Data.List (sort) import Runner import Config import System.Directory@@ -16,9 +17,7 @@ (configFile : _) -> readFile configFile _ -> return "" customConfiguration <- config <$> configFileContents- let sources = case customConfiguration of- Just (Config _ (Just sourceFolders)) -> sourceFolders- _ -> ["src"]+ let sources = fromMaybe ["src"] $ customConfiguration >>= sourceFolders files <- sequence $ map getAbsDirectoryContents sources let testDriverFileContents = driver (concat files) customConfiguration writeFile dst testDriverFileContents@@ -39,4 +38,4 @@ if isDir then getAbsDirectoryContents canonicalized else return [canonicalized]- return $ concat paths'+ return $ sort $ concat paths'
src/Runner.hs view
@@ -1,8 +1,12 @@+{-# LANGUAGE+ RecordWildCards+ #-} module Runner ( driver ) where import Data.List+import Data.Maybe import Config import System.FilePath.Posix @@ -21,22 +25,28 @@ -- >>> generateConfig ["foo.hs", "bar.hs", "baz.qux"] Nothing -- ["-isrc","foo.hs","bar.hs"] ----- >>> let config = Just (Config (Just ["bar.hs"]) Nothing)+-- >>> let config = Just (Config (Just ["bar.hs"]) Nothing Nothing) -- >>> generateConfig ["foo.hs", "bar.hs", "baz.qux"] config -- ["-isrc","foo.hs"] ----- >>> let config = Just (Config Nothing (Just ["qux"]))+-- >>> let config = Just (Config Nothing (Just ["qux"]) Nothing) -- >>> generateConfig ["foo.hs", "bar.hs", "baz.qux"] config -- ["-iqux","foo.hs","bar.hs"] ----- >>> let config = Just (Config (Just ["bar.hs"]) (Just ["qux"]))+-- >>> let config = Just (Config (Just ["bar.hs"]) (Just ["qux"]) Nothing) -- >>> generateConfig ["foo.hs", "bar.hs", "baz.qux"] config -- ["-iqux","foo.hs"] --+-- >>> let config = Just (Config (Just ["bar.hs"]) (Just ["qux"]) (Just ["-some", "--doctest options"]))+-- >>> generateConfig ["foo.hs", "bar.hs", "baz.qux"] config+-- ["-iqux","foo.hs","-some","--doctest","options"]+-- generateConfig :: [FilePath] -> Maybe Config -> [String]-generateConfig files (Just (Config Nothing (Just sourceFolders))) = ((++) (map ("-i"++) sourceFolders) . notCurrentAndParent . filterHaskellSources) files-generateConfig files (Just (Config (Just ignoreList) Nothing)) = ((:) "-isrc" . filter (`notElem` ignoreList) . notCurrentAndParent . filterHaskellSources) files-generateConfig files (Just (Config (Just ignoreList) (Just sourceFolders))) = ((++) (map ("-i"++) sourceFolders) . filter (`notElem` ignoreList) . notCurrentAndParent . filterHaskellSources) files+generateConfig files (Just Config {..})+ = concat [ maybe ["-isrc"] (map ("-i" ++)) $ sourceFolders+ , nub . filter (`notElem` fromMaybe [] ignore) . notCurrentAndParent . filterHaskellSources $ files+ ]+ ++ maybe [] (concat . map words) doctestOptions generateConfig files _ = ((:) "-isrc" . notCurrentAndParent . filterHaskellSources) files -- | Filters out current and parent directories
test/Doctest-Main.hs view
@@ -1,1 +1,1 @@-{-# OPTIONS_GHC -F -pgmF doctest-discover #-}+{-# OPTIONS_GHC -F -pgmF doctest-discover -optF config.json #-}