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