Skip to content

Commit 5b4258c

Browse files
authored
Remove code duplication and unify definition of 'trim' function. (#7795)
* Remove code duplication and unify definition of 'trim' function. * Attempt to refactor 'trimEnd' function. * Remove unused import. * Add @SInCE label.
1 parent cd5dd66 commit 5b4258c

File tree

10 files changed

+17
-28
lines changed

10 files changed

+17
-28
lines changed

Cabal/Cabal.cabal

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ library
9494
Distribution.Utils.LogProgress
9595
Distribution.Utils.MapAccum
9696
Distribution.Utils.MD5
97+
Distribution.Utils.String
9798
Distribution.Utils.Structured
9899
Distribution.Compat.CreatePipe
99100
Distribution.Compat.Directory
@@ -333,7 +334,6 @@ library
333334
Distribution.Compat.SnocList
334335
Distribution.GetOpt
335336
Distribution.Lex
336-
Distribution.Utils.String
337337
Distribution.Simple.Build.Macros.Z
338338
Distribution.Simple.Build.PathsModule.Z
339339
Distribution.Simple.GHC.EnvironmentParser

Cabal/src/Distribution/Compat/Prelude.hs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ module Distribution.Compat.Prelude (
6969
sort, sortBy,
7070
nub, nubBy,
7171
partition,
72+
dropWhileEnd,
7273

7374
-- * Data.List.NonEmpty
7475
NonEmpty((:|)), nonEmpty, foldl1, foldr1,
@@ -186,7 +187,7 @@ import Data.Either (partitionEithers)
186187
import Data.Function (on)
187188
import Data.Functor.Identity (Identity (..))
188189
import Data.Int (Int16, Int32, Int64, Int8)
189-
import Data.List (intercalate, intersperse, isPrefixOf, isSuffixOf, nub, nubBy, partition, sort, sortBy, unfoldr)
190+
import Data.List (dropWhileEnd, intercalate, intersperse, isPrefixOf, isSuffixOf, nub, nubBy, partition, sort, sortBy, unfoldr)
190191
import Data.List.NonEmpty (NonEmpty ((:|)), nonEmpty, head, init, last, tail)
191192
import Data.Map (Map)
192193
import Data.Maybe (catMaybes, fromMaybe, isJust, isNothing, listToMaybe, mapMaybe, maybeToList)

Cabal/src/Distribution/FieldGrammar/FieldDescrs.hs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ module Distribution.FieldGrammar.FieldDescrs (
1313
import Distribution.Compat.Prelude
1414
import Prelude ()
1515

16-
import Data.List (dropWhileEnd)
1716
import Distribution.Compat.Lens (aview, cloneLens)
17+
import Distribution.Utils.String (trim)
1818
import Distribution.Compat.Newtype
1919
import Distribution.FieldGrammar
2020
import Distribution.Pretty (Pretty (..), showFreeText)
@@ -114,8 +114,6 @@ parsecFreeText = dropDotLines <$ C.spaces <*> many C.anyChar
114114
trim' :: String -> String
115115
trim' = dropWhileEnd (`elem` (" \t" :: String))
116116

117-
trim :: String -> String
118-
trim = dropWhile isSpace . dropWhileEnd isSpace
119117

120118
class (P.Parsec a, Pretty a) => ParsecPretty a
121119
instance (P.Parsec a, Pretty a) => ParsecPretty a

Cabal/src/Distribution/FieldGrammar/Parsec.hs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,10 @@ module Distribution.FieldGrammar.Parsec (
6565
fieldLinesToStream,
6666
) where
6767

68-
import Data.List (dropWhileEnd)
6968
import Distribution.Compat.Newtype
7069
import Distribution.Compat.Prelude
7170
import Distribution.Simple.Utils (fromUTF8BS)
71+
import Distribution.Utils.String (trim)
7272
import Prelude ()
7373

7474
import qualified Data.ByteString as BS
@@ -271,8 +271,6 @@ instance FieldGrammar Parsec ParsecFieldGrammar where
271271
]
272272
-- hack: recover the order of prefixed fields
273273
reorder = map snd . sortBy (comparing fst)
274-
trim :: String -> String
275-
trim = dropWhile isSpace . dropWhileEnd isSpace
276274

277275
availableSince vs def (ParsecFG names prefixes parser) = ParsecFG names prefixes parser'
278276
where
@@ -391,9 +389,6 @@ fieldlinesToFreeText fls = intercalate "\n" (map go fls)
391389
where
392390
s = trim (fromUTF8BS bs)
393391

394-
trim :: String -> String
395-
trim = dropWhile isSpace . dropWhileEnd isSpace
396-
397392
fieldlinesToFreeText3 :: Position -> [FieldLine Position] -> String
398393
fieldlinesToFreeText3 _ [] = ""
399394
fieldlinesToFreeText3 _ [FieldLine _ bs] = fromUTF8BS bs

Cabal/src/Distribution/Simple/Configure.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ import Data.ByteString.Lazy ( ByteString )
106106
import qualified Data.ByteString as BS
107107
import qualified Data.ByteString.Lazy.Char8 as BLC8
108108
import Data.List
109-
( (\\), inits, stripPrefix, intersect, dropWhileEnd )
109+
( (\\), inits, stripPrefix, intersect)
110110
import qualified Data.Map as Map
111111
import System.Directory
112112
( canonicalizePath, createDirectoryIfMissing, doesFileExist

Cabal/src/Distribution/Simple/UHC.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ getGlobalPackageDir verbosity progdb = do
121121
let pkgdir = trimEnd output
122122
return pkgdir
123123
where
124-
trimEnd = reverse . dropWhile isSpace . reverse
124+
trimEnd = dropWhileEnd isSpace
125125

126126
getUserPackageDir :: IO FilePath
127127
getUserPackageDir = do

Cabal/src/Distribution/Utils/String.hs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@ module Distribution.Utils.String
22
( -- * Encode to/from UTF8
33
decodeStringUtf8
44
, encodeStringUtf8
5+
, trim
56
) where
67

78
import Data.Word
89
import Data.Bits
910
import Data.Char (chr,ord)
11+
import Data.List (dropWhileEnd)
12+
import GHC.Unicode (isSpace)
1013

1114
-- | Decode 'String' from UTF8-encoded octets.
1215
--
@@ -91,3 +94,7 @@ encodeStringUtf8 (c:cs)
9194
w8 = fromIntegral (ord c) :: Word8
9295
w8ShiftR :: Int -> Word8
9396
w8ShiftR = fromIntegral . shiftR (ord c)
97+
98+
-- @since 3.8.0.0
99+
trim :: String -> String
100+
trim = dropWhile isSpace . dropWhileEnd isSpace

cabal-install/src/Distribution/Client/HttpUtils.hs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import qualified Control.Exception as Exception
3232
import Distribution.Simple.Utils
3333
( die', info, warn, debug, notice
3434
, copyFileVerbose, withTempFile, IOData (..) )
35+
import Distribution.Utils.String (trim)
3536
import Distribution.Client.Utils
3637
( withTempFileName )
3738
import Distribution.Client.Version
@@ -890,12 +891,6 @@ statusParseFail verbosity uri r =
890891
die' verbosity $ "Failed to download " ++ show uri ++ " : "
891892
++ "No Status Code could be parsed from response: " ++ r
892893

893-
-- Trim
894-
trim :: String -> String
895-
trim = f . f
896-
where f = reverse . dropWhile isSpace
897-
898-
899894
------------------------------------------------------------------------------
900895
-- Multipart stuff partially taken from cgi package.
901896
--

cabal-install/src/Distribution/Client/Init/Utils.hs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import qualified Distribution.Package as P
3939
import qualified Distribution.Types.PackageName as PN
4040
import Distribution.Simple.PackageIndex (InstalledPackageIndex, moduleNameIndex)
4141
import Distribution.Simple.Setup (Flag(..))
42+
import Distribution.Utils.String (trim)
4243
import Distribution.Version
4344
import Distribution.Client.Init.Defaults
4445
import Distribution.Client.Init.Types
@@ -203,11 +204,6 @@ takeWhile' p = takeWhile p . trim
203204
dropWhile' :: (Char -> Bool) -> String -> String
204205
dropWhile' p = dropWhile p . trim
205206

206-
trim :: String -> String
207-
trim = removeLeadingSpace . reverse . removeLeadingSpace . reverse
208-
where
209-
removeLeadingSpace = dropWhile isSpace
210-
211207
-- | Check whether a potential source file is located in one of the
212208
-- source directories.
213209
isSourceFile :: Maybe [FilePath] -> SourceFileEntry -> Bool

cabal-install/src/Distribution/Client/Upload.hs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import Distribution.Client.Setup
1212
( IsCandidate(..), RepoContext(..) )
1313

1414
import Distribution.Simple.Utils (notice, warn, info, die', toUTF8BS)
15+
import Distribution.Utils.String (trim)
1516
import Distribution.Client.Config
1617

1718
import qualified Distribution.Client.BuildReports.Anonymous as BuildReport
@@ -228,7 +229,3 @@ handlePackage transport verbosity uri packageUri auth isCandidate path =
228229
formatWarnings :: String -> String
229230
formatWarnings x = "Warnings:\n" ++ (unlines . map ("- " ++) . lines) x
230231

231-
-- Trim
232-
trim :: String -> String
233-
trim = f . f
234-
where f = reverse . dropWhile isSpace

0 commit comments

Comments
 (0)