@@ -12,7 +12,7 @@ module Distribution.Server.Util.ParseSpecVer
1212
1313import Distribution.Server.Prelude
1414
15- import Data.ByteString (ByteString )
15+ import Data.ByteString (StrictByteString )
1616import qualified Data.ByteString as BS
1717import qualified Data.ByteString.Char8 as BC8
1818import qualified Data.ByteString.Lazy as BSL
@@ -47,10 +47,10 @@ import Distribution.PackageDescription.Parsec ( runParseResult, parseG
4747-- @.cabal@ files are accepted which support the heuristic parsing.
4848--
4949-- If no valid version field can be found, @Nothing@ is returned.
50- parseSpecVer :: ByteString -> Maybe CabalSpecVersion
50+ parseSpecVer :: StrictByteString -> Maybe CabalSpecVersion
5151parseSpecVer = findCabVer
5252
53- parseSpecVerLazy :: BSL. ByteString -> Maybe CabalSpecVersion
53+ parseSpecVerLazy :: BSL. LazyByteString -> Maybe CabalSpecVersion
5454parseSpecVerLazy = parseSpecVer . BSL. toStrict
5555
5656versionToCabalSpecVersion :: Version -> Maybe CabalSpecVersion
@@ -59,11 +59,11 @@ versionToCabalSpecVersion = cabalSpecFromVersionDigits . versionNumbers
5959isWS :: Word8 -> Bool
6060isWS = (`elem` [0x20 ,0x09 ])
6161
62- eatWS :: ByteString -> ByteString
62+ eatWS :: StrictByteString -> StrictByteString
6363eatWS = BS. dropWhile isWS
6464
6565-- | Try to heuristically locate & parse a 'cabal-version' field
66- findCabVer :: ByteString -> Maybe CabalSpecVersion
66+ findCabVer :: StrictByteString -> Maybe CabalSpecVersion
6767findCabVer raw = msum [ versionToCabalSpecVersion =<< decodeVer y | (_,_,y) <- findCabVers raw ]
6868
6969-- | Return list of @cabal-version@ candidates as 3-tuples of
@@ -81,7 +81,7 @@ findCabVer raw = msum [ versionToCabalSpecVersion =<< decodeVer y | (_,_,y) <- f
8181--
8282-- NB: Later occurrences of @cabal-version@ override earlier ones. In
8383-- future @cabal-versions@ it will be disallowed.
84- findCabVers :: ByteString -> [(ByteString , Int ,[ ByteString ])]
84+ findCabVers :: StrictByteString -> [(StrictByteString , Int , [ StrictByteString ])]
8585findCabVers buf0 = mapMaybe go ixs
8686 where
8787 go i
@@ -105,7 +105,7 @@ findCabVers buf0 = mapMaybe go ixs
105105 map getInd l'
106106
107107 -- split off indentation for single line
108- getInd :: ByteString -> (Int ,ByteString )
108+ getInd :: StrictByteString -> (Int , StrictByteString )
109109 getInd x = case BS. span isWS x of (i,r) -> (BS. length i,r)
110110
111111 isNonComment = not . BS. isPrefixOf " --"
@@ -114,11 +114,11 @@ findCabVers buf0 = mapMaybe go ixs
114114 ixs = strCaseStrAll buf0 " cabal-version"
115115
116116-- | Lookup-table mapping "x.y.z" strings to 'Version'
117- verDictV :: Map. HashMap ByteString Version
117+ verDictV :: Map. HashMap StrictByteString Version
118118verDictV = Map. fromList [ (BC8. pack (prettyShow v), v) | v <- knownVers ]
119119
120120-- | Lookup-table mapping ">=x.y.z" strings to 'Version'
121- verDictRg :: Map. HashMap ByteString Version
121+ verDictRg :: Map. HashMap StrictByteString Version
122122verDictRg = Map. fromList [ (" >=" <> BC8. pack (prettyShow v), v) | v <- knownVers ]
123123
124124-- | List of cabal-version values contained in Hackage's package index as of 2017-07
@@ -224,7 +224,7 @@ knownVers = map mkVersion
224224 ]
225225
226226-- | Fast decoder
227- decodeVer :: [ByteString ] -> Maybe Version
227+ decodeVer :: [StrictByteString ] -> Maybe Version
228228decodeVer ws = case ws of
229229 [" >=" ,v] -> Map. lookup v verDictV -- most common case
230230 [v] -> Map. lookup v verDictRg <|> -- most common case
@@ -233,7 +233,7 @@ decodeVer ws = case ws of
233233 _ -> decodeVerFallback (mconcat ws)
234234
235235-- | Fallback parser for when lookup-table based parsing fails
236- decodeVerFallback :: ByteString -> Maybe Version
236+ decodeVerFallback :: StrictByteString -> Maybe Version
237237decodeVerFallback v0 = simpleParse v <|> parseSpecVR
238238 where
239239 parseSpecVR = do
@@ -250,7 +250,7 @@ foreign import ccall unsafe "string.h strcasestr" c_strcasestr :: Ptr CChar -> P
250250-- | Find indices (in reverse order) of all non-overlapping
251251-- case-insensitive occurrences of s2 in s1
252252{-# NOINLINE strCaseStrAll #-}
253- strCaseStrAll :: ByteString -> ByteString -> [Int ]
253+ strCaseStrAll :: StrictByteString -> StrictByteString -> [Int ]
254254strCaseStrAll s1 s2
255255 | BS. null s1 || BS. null s2 = []
256256 | BS. elem 0 s1 || BS. elem 0 s2 = undefined
@@ -286,7 +286,7 @@ scanSpecVersionLazy bs = do
286286-- * Starting with cabal-version:2.2 'scanSpecVersionLazy' must succeed
287287--
288288-- 'True' is returned in the first element if sanity checks passes.
289- parseGenericPackageDescriptionChecked :: BSL. ByteString -> (Bool , [PWarning ], Either (Maybe Version , [PError ]) GenericPackageDescription )
289+ parseGenericPackageDescriptionChecked :: BSL. LazyByteString -> (Bool , [PWarning ], Either (Maybe Version , [PError ]) GenericPackageDescription )
290290parseGenericPackageDescriptionChecked bs = case parseGenericPackageDescription' bs of
291291 (warns, Left pe) -> (False , warns, Left $ fmap toList pe)
292292 (warns, Right gpd) -> (isOk (specVersion (packageDescription gpd)), warns, Right gpd)
0 commit comments