json-autotype 1.1.0 → 1.1.1
raw patch · 6 files changed
+49/−24 lines, 6 filesdep ~aesonPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: aeson
API changes (from Hackage documentation)
Files
- CommonCLI.hs +10/−0
- GenerateJSONParser.hs +8/−10
- GenerateTestJSON.hs +7/−6
- changelog.md +3/−0
- json-autotype.cabal +17/−7
- test/TestExamples.hs +4/−1
CommonCLI.hs view
@@ -1,17 +1,21 @@ module CommonCLI(TypeOpts(..), unflag, tyOptParser) where + import Data.Monoid ((<>)) import Options.Applicative import System.Process (system) import qualified System.Environment (lookupEnv) import System.Exit (ExitCode) +import Data.Aeson.AutoType.CodeGen (Lang(..))+ data TypeOpts = TyOptions { autounify :: Bool , toplevel :: String , debug :: Bool , test :: Bool , suggest :: Bool+ , lang :: Lang } unflag :: Mod FlagFields Bool -> Parser Bool@@ -26,4 +30,10 @@ <*> switch (long "debug" <> help "Set this flag to see more debugging info" ) <*> unflag (long "no-test" <> help "Do not run generated parser afterwards" ) <*> unflag (long "no-suggest" <> help "Do not suggest candidates for unification" )+ <*> langOpts+++langOpts :: Parser Lang+langOpts = flag Haskell Haskell (long "haskell")+ <|> flag Haskell Elm (long "elm")
GenerateJSONParser.hs view
@@ -42,7 +42,6 @@ , typecheck :: Bool , yaml :: Bool , preprocessor :: Bool- , lang :: Lang , filenames :: [FilePath] } @@ -58,13 +57,8 @@ <*> switch (short 'p' <> long "preprocessor" <> help "Work as GHC preprocessor (and skip preprocessor pragma)")- <*> langOpts <*> some (argument str (metavar "FILES...")) -langOpts :: Parser Lang-langOpts = flag Haskell Haskell (long "haskell")- <|> flag Haskell Elm (long "elm")- -- | Report an error to error output. report :: Text -> IO () report = Text.hPutStrLn stderr@@ -122,7 +116,11 @@ -- | Take a set of JSON input filenames, Haskell output filename, and generate module parsing these JSON files. generateHaskellFromJSONs :: Options -> [FilePath] -> FilePath -> IO ()-generateHaskellFromJSONs opts@Options { tyOpts=TyOptions { toplevel } } inputFilenames outputFilename = do+generateHaskellFromJSONs opts@Options { tyOpts=TyOptions { toplevel+ , lang+ , test }+ }+ inputFilenames outputFilename = do -- Read type from each file (filenames, typeForEachFile,@@ -151,9 +149,9 @@ else splitted myTrace $ "UNIFIED:\n" ++ pretty unified -- We start by writing module header- writeModule (lang opts) outputFilename toplevelName unified- when (test $ tyOpts opts) $- exitWith =<< runModule (lang opts) (outputFilename:passedTypeCheck)+ writeModule lang outputFilename toplevelName unified+ when test $+ exitWith =<< runModule lang (outputFilename:passedTypeCheck) where -- | Works like @Debug.trace@ when the --debug flag is enabled, and does nothing otherwise. myTrace :: String -> IO ()
GenerateTestJSON.hs view
@@ -32,13 +32,14 @@ import Text.PrettyPrint.GenericPretty (pretty) import Test.QuickCheck -import Data.Aeson.AutoType.Pretty-import Data.Aeson.AutoType.Type+import Data.Aeson.AutoType.CodeGen(writeModule, runModule, Lang(..)) import Data.Aeson.AutoType.Extract import Data.Aeson.AutoType.Format-import Data.Aeson.AutoType.CodeGen-import Data.Aeson.AutoType.Util+import Data.Aeson.AutoType.Pretty+import Data.Aeson.AutoType.Split import Data.Aeson.AutoType.Test+import Data.Aeson.AutoType.Type+import Data.Aeson.AutoType.Util import Options.Applicative import CommonCLI@@ -170,10 +171,10 @@ else splitted myTrace $ "UNIFIED:\n" ++ pretty unified -- We start by writing module header- writeHaskellModule outputFilename toplevelName unified+ writeModule lang outputFilename toplevelName unified if test then do- r <- (==ExitSuccess) <$> runModule (lang opts) [outputFilename, inputFilename]+ r <- (==ExitSuccess) <$> runModule lang [outputFilename, inputFilename] when r $ mapM_ removeFile [inputFilename, outputFilename] return r else
changelog.md view
@@ -1,5 +1,8 @@ Changelog =========+ 1.1.1 Mar 2018+ * Fixed test builds (for Haskell).+ 1.1.0 Mar 2018 * Partial support Elm code generation.
json-autotype.cabal view
@@ -1,6 +1,6 @@ -- Build information for the package. name: json-autotype-version: 1.1.0+version: 1.1.1 synopsis: Automatic type declaration for JSON input data description: Generates datatype declarations with Aeson's "FromJSON" instances from a set of example ".json" files.@@ -70,7 +70,7 @@ Data.Aeson.AutoType.CodeGen.ElmFormat build-depends: base >=4.3 && <4.12, GenericPretty >=1.2 && <1.3,- aeson >=0.7 && <1.3,+ aeson >=0.7 && <1.4, containers >=0.3 && <0.6, filepath >=1.3 && <1.5, hashable >=1.2 && <1.3,@@ -114,7 +114,7 @@ RecordWildCards build-depends: base >=4.3 && <4.12, GenericPretty >=1.2 && <1.3,- aeson >=0.7 && <1.3,+ aeson >=0.7 && <1.4, bytestring >=0.9 && <0.11, containers >=0.3 && <0.6, filepath >=1.3 && <1.5,@@ -156,9 +156,11 @@ RecordWildCards build-depends: base >=4.3 && <4.12, GenericPretty >=1.2 && <1.3,- aeson >=0.7 && <1.3,+ aeson >=0.7 && <1.4, containers >=0.3 && <0.6, hashable >=1.2 && <1.3,+ lens >=4.1 && <4.17,+ mtl >=2.1 && <2.3, pretty >=1.1 && <1.3, scientific >=0.3 && <0.5, smallcheck >=1.0 && <1.2,@@ -174,11 +176,17 @@ type: exitcode-stdio-1.0 main-is: test/TestExamples.hs other-modules: Data.Aeson.AutoType.Util+ Data.Aeson.AutoType.CodeGen+ Data.Aeson.AutoType.CodeGen.Elm+ Data.Aeson.AutoType.CodeGen.ElmFormat+ Data.Aeson.AutoType.CodeGen.Haskell+ Data.Aeson.AutoType.CodeGen.HaskellFormat Data.Aeson.AutoType.Extract Data.Aeson.AutoType.Format+ Data.Aeson.AutoType.Pretty+ Data.Aeson.AutoType.Split Data.Aeson.AutoType.Test Data.Aeson.AutoType.Type- Data.Aeson.AutoType.Pretty CommonCLI other-extensions: TemplateHaskell, ScopedTypeVariables,@@ -190,11 +198,13 @@ RecordWildCards build-depends: base >=4.3 && <4.12, GenericPretty >=1.2 && <1.3,- aeson >=0.7 && <1.3,+ aeson >=0.7 && <1.4, containers >=0.3 && <0.6, directory >=1.1 && <1.4, filepath >=1.3 && <1.5, hashable >=1.2 && <1.3,+ lens >=4.1 && <4.17,+ mtl >=2.1 && <2.3, optparse-applicative >=0.11 && <1.0, pretty >=1.1 && <1.3, process >=1.1 && <1.7,@@ -235,7 +245,7 @@ RecordWildCards build-depends: base >=4.3 && <4.12, GenericPretty >=1.2 && <1.3,- aeson >=0.7 && <1.3,+ aeson >=0.7 && <1.4, bytestring >=0.9 && <0.11, containers >=0.3 && <0.6, directory >=1.1 && <1.4,
test/TestExamples.hs view
@@ -8,8 +8,11 @@ import System.Directory(doesDirectoryExist, getDirectoryContents) import System.FilePath((</>), (<.>), takeBaseName, replaceFileName) import System.Exit(ExitCode(..))+import Data.Aeson.AutoType.CodeGen(runModule, Lang(Haskell)) -import CommonCLI+--import CommonCLI++runghc = runModule Haskell -- | <http://book.realworldhaskell.org/read/io-case-study-a-library-for-searching-the-filesystem.html> getRecursiveContents :: FilePath -> IO [FilePath]