From dba1955a2bff78fc48b07f7a4b19dd91e78eb758 Mon Sep 17 00:00:00 2001 From: Jan Mas Rovira Date: Fri, 10 Feb 2023 13:52:42 +0100 Subject: [PATCH 1/2] fix ToJSON instance --- app/Commands/Init.hs | 13 ++++++------ src/Juvix/Compiler/Pipeline/Package.hs | 21 ++++++++++--------- .../Compiler/Pipeline/Package/Dependency.hs | 1 + 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/app/Commands/Init.hs b/app/Commands/Init.hs index effece4552..0033fe69fa 100644 --- a/app/Commands/Init.hs +++ b/app/Commands/Init.hs @@ -39,16 +39,17 @@ checkNotInProject = say "You are already in a Juvix project" embed exitFailure -getPackage :: forall r. (Members '[Embed IO] r) => Sem r Package +getPackage :: forall r. Members '[Embed IO] r => Sem r Package getPackage = do tproj <- getProjName - say "Tell me the version of your project [leave empty for 0.0.0]" + say "Write the version of your project [leave empty for 0.0.0]" + root <- getCurrentDir + let pkg = defaultPackage root (rootBuildDir root) tversion :: SemVer <- getVersion return - Package + pkg { _packageName = tproj, - _packageVersion = Ideal tversion, - _packageDependencies = mempty + _packageVersion = Ideal tversion } getProjName :: forall r. (Members '[Embed IO] r) => Sem r Text @@ -59,7 +60,7 @@ getProjName = do Nothing -> mempty Just d' -> " [leave empty for '" <> d' <> "']" say - ( "Tell me the name of your project" + ( "Write the name of your project" <> defMsg <> " (lower case letters, numbers and dashes are allowed): " ) diff --git a/src/Juvix/Compiler/Pipeline/Package.hs b/src/Juvix/Compiler/Pipeline/Package.hs index 94f092560b..542185a7c5 100644 --- a/src/Juvix/Compiler/Pipeline/Package.hs +++ b/src/Juvix/Compiler/Pipeline/Package.hs @@ -14,7 +14,7 @@ module Juvix.Compiler.Pipeline.Package ) where -import Data.Aeson (genericToEncoding) +import Data.Aeson (genericToEncoding, genericToJSON) import Data.Aeson.BetterErrors import Data.Aeson.TH import Data.Kind qualified as GHC @@ -61,15 +61,16 @@ deriving stock instance Show RawPackage deriving stock instance Show Package +rawPackageOptions :: Options +rawPackageOptions = + defaultOptions + { fieldLabelModifier = over Lens._head toLower . dropPrefix "_package", + rejectUnknownFields = True + } + instance ToJSON RawPackage where - toEncoding = genericToEncoding options - where - options :: Options - options = - defaultOptions - { fieldLabelModifier = over Lens._head toLower . dropPrefix "_package", - rejectUnknownFields = True - } + toJSON = genericToJSON rawPackageOptions + toEncoding = genericToEncoding rawPackageOptions -- | TODO: is it a good idea to return the empty package if it fails to parse? instance FromJSON RawPackage where @@ -93,7 +94,7 @@ rawDefaultPackage = -- | Has the implicit stdlib dependency defaultPackage :: Path Abs Dir -> Path Abs Dir -> Package -defaultPackage r buildDir = fromRight impossible . run . runError @Text . processPackage r buildDir $ rawDefaultPackage +defaultPackage root buildDir = fromRight impossible . run . runError @Text . processPackage root buildDir $ rawDefaultPackage -- | Has no dependencies emptyPackage :: Package diff --git a/src/Juvix/Compiler/Pipeline/Package/Dependency.hs b/src/Juvix/Compiler/Pipeline/Package/Dependency.hs index 3164c79aac..b22b2d139c 100644 --- a/src/Juvix/Compiler/Pipeline/Package/Dependency.hs +++ b/src/Juvix/Compiler/Pipeline/Package/Dependency.hs @@ -38,6 +38,7 @@ deriving stock instance Show RawDependency deriving stock instance Show Dependency instance ToJSON RawDependency where + toJSON (Dependency p) = toJSON (fromSomeDir p) toEncoding (Dependency p) = toEncoding (fromSomeDir p) instance FromJSON RawDependency where From 973df12f296c228edccf29ce76a6a53cca9fca10 Mon Sep 17 00:00:00 2001 From: Jan Mas Rovira Date: Fri, 10 Feb 2023 17:24:11 +0100 Subject: [PATCH 2/2] add smoke --- tests/smoke/Commands/init.smoke.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 tests/smoke/Commands/init.smoke.yaml diff --git a/tests/smoke/Commands/init.smoke.yaml b/tests/smoke/Commands/init.smoke.yaml new file mode 100644 index 0000000000..06c7d9156b --- /dev/null +++ b/tests/smoke/Commands/init.smoke.yaml @@ -0,0 +1,19 @@ +working-directory: ./../../../tests/ + +tests: + - name: init + command: + shell: + - bash + script: | + mkdir tmp + cd tmp + juvix init + cat juvix.yaml + cd .. + rm -rf tmp + stdout: + contains: + "name: tmp" + stdin: "\n\n" + exit-status: 0