diff --git a/src/Stack/Ghci.hs b/src/Stack/Ghci.hs index 4d899cd3d1..33d6b3e8af 100644 --- a/src/Stack/Ghci.hs +++ b/src/Stack/Ghci.hs @@ -47,7 +47,6 @@ import Stack.Types.Compiler import Stack.Types.Config import Stack.Types.NamedComponent import Stack.Types.Package -import Stack.Types.PackageName import Stack.Types.Runner import System.IO (putStrLn) import System.IO.Temp (getCanonicalTemporaryDirectory) diff --git a/src/Stack/Package.hs b/src/Stack/Package.hs index d2573cebba..51dc24d4a2 100644 --- a/src/Stack/Package.hs +++ b/src/Stack/Package.hs @@ -77,7 +77,6 @@ import Stack.Types.Config import Stack.Types.GhcPkgId import Stack.Types.NamedComponent import Stack.Types.Package -import Stack.Types.PackageName import Stack.Types.Runner import Stack.Types.Version import qualified System.Directory as D diff --git a/src/Stack/PackageDump.hs b/src/Stack/PackageDump.hs index 7273fbe4e9..59529557e4 100644 --- a/src/Stack/PackageDump.hs +++ b/src/Stack/PackageDump.hs @@ -45,8 +45,6 @@ import Stack.GhcPkg import Stack.Types.Compiler import Stack.Types.GhcPkgId import Stack.Types.PackageDump -import Stack.Types.PackageName -import Stack.Types.Version import System.Directory (getDirectoryContents, doesFileExist) import System.Process (readProcess) -- FIXME confirm that this is correct import RIO.Process hiding (readProcess) diff --git a/src/Stack/Script.hs b/src/Stack/Script.hs index 1d12c66373..f7f374c8e5 100644 --- a/src/Stack/Script.hs +++ b/src/Stack/Script.hs @@ -24,7 +24,6 @@ import Stack.Runners import Stack.Types.BuildPlan import Stack.Types.Compiler import Stack.Types.Config -import Stack.Types.PackageName import System.FilePath (dropExtension, replaceExtension) import RIO.Process import qualified RIO.Text as T diff --git a/src/Stack/Setup.hs b/src/Stack/Setup.hs index 707f998e53..abd4ef364a 100644 --- a/src/Stack/Setup.hs +++ b/src/Stack/Setup.hs @@ -88,7 +88,6 @@ import Stack.Types.Compiler import Stack.Types.CompilerBuild import Stack.Types.Config import Stack.Types.Docker -import Stack.Types.PackageName import Stack.Types.Runner import Stack.Types.Version import qualified System.Directory as D diff --git a/src/Stack/Setup/Installed.hs b/src/Stack/Setup/Installed.hs index 72d4f8606f..e6be31a45e 100644 --- a/src/Stack/Setup/Installed.hs +++ b/src/Stack/Setup/Installed.hs @@ -37,7 +37,6 @@ import Path import Path.IO import Stack.Types.Compiler import Stack.Types.Config -import Stack.Types.Version import RIO.Process data Tool diff --git a/src/Stack/Types/PackageName.hs b/src/Stack/Types/PackageName.hs index 8dadb647d8..1ee8e729fc 100644 --- a/src/Stack/Types/PackageName.hs +++ b/src/Stack/Types/PackageName.hs @@ -10,45 +10,12 @@ -- | Names for packages. module Stack.Types.PackageName - (parsePackageNameThrowing - ,parsePackageNameFromFilePath - ,packageNameArgument) - where + ( packageNameArgument + ) where import Stack.Prelude -import qualified Data.Text as T import qualified Options.Applicative as O -import Path - --- | A parse fail. -data PackageNameParseFail - = PackageNameParseFail Text - | CabalFileNameParseFail FilePath - | CabalFileNameInvalidPackageName FilePath - deriving (Typeable) -instance Exception PackageNameParseFail -instance Show PackageNameParseFail where - show (PackageNameParseFail bs) = "Invalid package name: " ++ show bs - show (CabalFileNameParseFail fp) = "Invalid file path for cabal file, must have a .cabal extension: " ++ fp - show (CabalFileNameInvalidPackageName fp) = "cabal file names must use valid package names followed by a .cabal extension, the following is invalid: " ++ fp - --- | Parse a package name from a 'String'. -parsePackageNameThrowing :: MonadThrow m => String -> m PackageName -parsePackageNameThrowing str = - case parsePackageName str of - Nothing -> throwM $ PackageNameParseFail $ T.pack str - Just pn -> pure pn --- | Parse a package name from a file path. -parsePackageNameFromFilePath :: MonadThrow m => Path a File -> m PackageName -parsePackageNameFromFilePath fp = do - base <- clean $ toFilePath $ filename fp - case parsePackageName base of - Nothing -> throwM $ CabalFileNameInvalidPackageName $ toFilePath fp - Just x -> return x - where clean = liftM reverse . strip . reverse - strip ('l':'a':'b':'a':'c':'.':xs) = return xs - strip _ = throwM (CabalFileNameParseFail (toFilePath fp)) -- | An argument which accepts a template name of the format -- @foo.hsfiles@. diff --git a/src/Stack/Types/Version.hs b/src/Stack/Types/Version.hs index 9bc4f285a1..6a28be1674 100644 --- a/src/Stack/Types/Version.hs +++ b/src/Stack/Types/Version.hs @@ -15,7 +15,6 @@ module Stack.Types.Version ,Cabal.VersionRange -- TODO in the future should have a newtype wrapper ,IntersectingVersionRange(..) ,VersionCheck(..) - ,parseVersionThrowing ,versionRangeText ,withinRange ,Stack.Types.Version.intersectVersionRanges @@ -40,13 +39,6 @@ import Distribution.Version (Version, versionNumbers, withinRange) import qualified Paths_stack as Meta import Text.PrettyPrint (render) --- | A parse fail. -newtype VersionParseFail = VersionParseFail Text - deriving (Typeable) -instance Exception VersionParseFail -instance Show VersionParseFail where - show (VersionParseFail bs) = "Invalid version: " ++ show bs - -- | A Package upgrade; Latest or a specific version. data UpgradeTo = Specific Version | Latest deriving (Show) @@ -62,13 +54,6 @@ instance Monoid IntersectingVersionRange where mempty = IntersectingVersionRange Cabal.anyVersion mappend = (<>) --- | Convenient way to parse a package version from a 'String'. -parseVersionThrowing :: MonadThrow m => String -> m Version -parseVersionThrowing str = - case parseVersion str of - Nothing -> throwM $ VersionParseFail $ T.pack str - Just v -> pure v - -- | Display a version range versionRangeText :: Cabal.VersionRange -> Text versionRangeText = T.pack . render . disp diff --git a/src/test/Stack/NixSpec.hs b/src/test/Stack/NixSpec.hs index 3d71cd0dbf..0256609c5e 100644 --- a/src/test/Stack/NixSpec.hs +++ b/src/test/Stack/NixSpec.hs @@ -15,7 +15,6 @@ import Stack.Prelude import Stack.Types.Config import Stack.Types.Nix import Stack.Types.Runner -import Stack.Types.Version import System.Directory import System.Environment import Test.Hspec diff --git a/subs/pantry/src/Pantry.hs b/subs/pantry/src/Pantry.hs index ddfe730f9a..9093762c10 100644 --- a/subs/pantry/src/Pantry.hs +++ b/subs/pantry/src/Pantry.hs @@ -88,8 +88,11 @@ module Pantry -- ** Cabal values , parsePackageIdentifier , parsePackageName + , parsePackageNameThrowing + , parsePackageNameFromFilePath , parseFlagName , parseVersion + , parseVersionThrowing -- * Stackage snapshots , ltsSnapshotLocation diff --git a/subs/pantry/src/Pantry/Types.hs b/subs/pantry/src/Pantry/Types.hs index 17f7805c66..27759407d7 100644 --- a/subs/pantry/src/Pantry/Types.hs +++ b/subs/pantry/src/Pantry/Types.hs @@ -48,8 +48,11 @@ module Pantry.Types , RepoType (..) , parsePackageIdentifier , parsePackageName + , parsePackageNameThrowing + , parsePackageNameFromFilePath , parseFlagName , parseVersion + , parseVersionThrowing , packageIdentifierString , packageNameString , flagNameString @@ -1002,12 +1005,56 @@ parsePackageIdentifier str = parsePackageName :: String -> Maybe PackageName parsePackageName = Distribution.Text.simpleParse +-- | A package name parse fail. +data PackageNameParseFail + = PackageNameParseFail Text + | CabalFileNameParseFail FilePath + | CabalFileNameInvalidPackageName FilePath + deriving (Typeable) +instance Exception PackageNameParseFail +instance Show PackageNameParseFail where + show (PackageNameParseFail bs) = "Invalid package name: " ++ show bs + show (CabalFileNameParseFail fp) = "Invalid file path for cabal file, must have a .cabal extension: " ++ fp + show (CabalFileNameInvalidPackageName fp) = "cabal file names must use valid package names followed by a .cabal extension, the following is invalid: " ++ fp + +-- | Parse a package name from a 'String'. +parsePackageNameThrowing :: MonadThrow m => String -> m PackageName +parsePackageNameThrowing str = + case parsePackageName str of + Nothing -> throwM $ PackageNameParseFail $ T.pack str + Just pn -> pure pn + +-- | Parse a package name from a file path. +parsePackageNameFromFilePath :: MonadThrow m => Path a File -> m PackageName +parsePackageNameFromFilePath fp = do + base <- clean $ toFilePath $ filename fp + case parsePackageName base of + Nothing -> throwM $ CabalFileNameInvalidPackageName $ toFilePath fp + Just x -> return x + where clean = liftM reverse . strip . reverse + strip ('l':'a':'b':'a':'c':'.':xs) = return xs + strip _ = throwM (CabalFileNameParseFail (toFilePath fp)) + -- | Parse a version from a 'String'. -- -- @since 0.1.0.0 parseVersion :: String -> Maybe Version parseVersion = Distribution.Text.simpleParse +-- | A parse fail. +newtype VersionParseFail = VersionParseFail Text + deriving (Typeable) +instance Exception VersionParseFail +instance Show VersionParseFail where + show (VersionParseFail bs) = "Invalid version: " ++ show bs + +-- | Convenient way to parse a package version from a 'String'. +parseVersionThrowing :: MonadThrow m => String -> m Version +parseVersionThrowing str = + case parseVersion str of + Nothing -> throwM $ VersionParseFail $ T.pack str + Just v -> pure v + -- | Parse a version range from a 'String'. -- -- @since 0.1.0.0