Skip to content

Commit c94287f

Browse files
committed
Allow case insensitive bools
1 parent 832789e commit c94287f

7 files changed

Lines changed: 19 additions & 61 deletions

File tree

Cabal-syntax/src/Distribution/Parsec.hs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ module Distribution.Parsec
6060

6161
import Data.ByteString (ByteString)
6262
import Data.Char (digitToInt, intToDigit)
63-
import Data.Functor (($>))
6463
import Data.List (transpose)
6564
import Distribution.CabalSpecVersion
6665
import Distribution.Compat.Prelude
@@ -253,15 +252,11 @@ instance Parsec Bool where
253252
parsec = P.munch1 isAlpha >>= postprocess
254253
where
255254
postprocess str
256-
| str == "True" = pure True
257-
| str == "False" = pure False
258-
| lstr == "true" = parsecWarning PWTBoolCase caseWarning $> True
259-
| lstr == "false" = parsecWarning PWTBoolCase caseWarning $> False
255+
| lstr == "true" = pure True
256+
| lstr == "false" = pure False
260257
| otherwise = fail $ "Not a boolean: " ++ str
261258
where
262259
lstr = map toLower str
263-
caseWarning =
264-
"Boolean values are case sensitive, use 'True' or 'False'."
265260

266261
instance Parsec a => Parsec (Last a) where
267262
parsec = parsecLast

Cabal-syntax/src/Distribution/Parsec/Warning.hs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ data PWarnType
2525
PWTOther
2626
| -- | Invalid UTF encoding
2727
PWTUTF
28-
| -- | @true@ or @false@, not @True@ or @False@
29-
PWTBoolCase
3028
| -- | there are version with tags
3129
PWTVersionTag
3230
| -- | New syntax used, but no @cabal-version: >= 1.2@ specified

Cabal-tests/tests/ParserTests.hs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ warningTests = testGroup "warnings triggered"
6868
, warningTest PWTLexNBSP "nbsp.cabal"
6969
, warningTest PWTLexTab "tab.cabal"
7070
, warningTest PWTUTF "utf8.cabal"
71-
, warningTest PWTBoolCase "bool.cabal"
7271
, warningTest PWTVersionTag "versiontag.cabal"
7372
, warningTest PWTNewSyntax "newsyntax.cabal"
7473
, warningTest PWTOldSyntax "oldsyntax.cabal"

Cabal-tests/tests/ParserTests/warnings/bool.cabal

Lines changed: 0 additions & 12 deletions
This file was deleted.

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

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,6 @@ import Distribution.Compiler
138138
import Distribution.Deprecated.ParseUtils
139139
( FieldDescr (..)
140140
, PError (..)
141-
, PWarning (..)
142141
, ParseResult (..)
143142
, liftField
144143
, lineNo
@@ -1211,24 +1210,14 @@ configFieldDescriptions src =
12111210
)
12121211
( \line str _ -> case () of
12131212
_
1214-
| str == "False" -> ParseOk [] (Flag NoOptimisation)
1215-
| str == "True" -> ParseOk [] (Flag NormalOptimisation)
12161213
| str == "0" -> ParseOk [] (Flag NoOptimisation)
12171214
| str == "1" -> ParseOk [] (Flag NormalOptimisation)
12181215
| str == "2" -> ParseOk [] (Flag MaximumOptimisation)
1219-
| lstr == "false" -> ParseOk [caseWarning] (Flag NoOptimisation)
1220-
| lstr == "true" ->
1221-
ParseOk
1222-
[caseWarning]
1223-
(Flag NormalOptimisation)
1216+
| lstr == "false" -> ParseOk [] (Flag NoOptimisation)
1217+
| lstr == "true" -> ParseOk [] (Flag NormalOptimisation)
12241218
| otherwise -> ParseFailed (NoParse name line)
12251219
where
12261220
lstr = lowercase str
1227-
caseWarning =
1228-
PWarning $
1229-
"The '"
1230-
++ name
1231-
++ "' field is case sensitive, use 'True' or 'False'."
12321221
)
12331222
, liftField configDebugInfo (\v flags -> flags{configDebugInfo = v}) $
12341223
let name = "debug-info"
@@ -1243,22 +1232,15 @@ configFieldDescriptions src =
12431232
)
12441233
( \line str _ -> case () of
12451234
_
1246-
| str == "False" -> ParseOk [] (Flag NoDebugInfo)
1247-
| str == "True" -> ParseOk [] (Flag NormalDebugInfo)
12481235
| str == "0" -> ParseOk [] (Flag NoDebugInfo)
12491236
| str == "1" -> ParseOk [] (Flag MinimalDebugInfo)
12501237
| str == "2" -> ParseOk [] (Flag NormalDebugInfo)
12511238
| str == "3" -> ParseOk [] (Flag MaximalDebugInfo)
1252-
| lstr == "false" -> ParseOk [caseWarning] (Flag NoDebugInfo)
1253-
| lstr == "true" -> ParseOk [caseWarning] (Flag NormalDebugInfo)
1239+
| lstr == "false" -> ParseOk [] (Flag NoDebugInfo)
1240+
| lstr == "true" -> ParseOk [] (Flag NormalDebugInfo)
12541241
| otherwise -> ParseFailed (NoParse name line)
12551242
where
12561243
lstr = lowercase str
1257-
caseWarning =
1258-
PWarning $
1259-
"The '"
1260-
++ name
1261-
++ "' field is case sensitive, use 'True' or 'False'."
12621244
)
12631245
]
12641246
++ toSavedConfig

cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,6 @@ import Distribution.Client.ParseUtils
156156
import Distribution.Client.ReplFlags (multiReplOption)
157157
import Distribution.Deprecated.ParseUtils
158158
( PError (..)
159-
, PWarning (..)
160159
, ParseResult (..)
161160
, commaNewLineListFieldParsec
162161
, newLineListField
@@ -1706,10 +1705,8 @@ legacyPackageConfigFieldDescrs =
17061705
)
17071706
( \line str _ -> case () of
17081707
_
1709-
| str == "False" -> ParseOk [] (Flag NoDumpBuildInfo)
1710-
| str == "True" -> ParseOk [] (Flag DumpBuildInfo)
1711-
| lstr == "false" -> ParseOk [caseWarning name] (Flag NoDumpBuildInfo)
1712-
| lstr == "true" -> ParseOk [caseWarning name] (Flag DumpBuildInfo)
1708+
| lstr == "false" -> ParseOk [] (Flag NoDumpBuildInfo)
1709+
| lstr == "true" -> ParseOk [] (Flag DumpBuildInfo)
17131710
| otherwise -> ParseFailed (NoParse name line)
17141711
where
17151712
lstr = lowercase str
@@ -1735,13 +1732,11 @@ legacyPackageConfigFieldDescrs =
17351732
)
17361733
( \line str _ -> case () of
17371734
_
1738-
| str == "False" -> ParseOk [] (Flag NoOptimisation)
1739-
| str == "True" -> ParseOk [] (Flag NormalOptimisation)
17401735
| str == "0" -> ParseOk [] (Flag NoOptimisation)
17411736
| str == "1" -> ParseOk [] (Flag NormalOptimisation)
17421737
| str == "2" -> ParseOk [] (Flag MaximumOptimisation)
1743-
| lstr == "false" -> ParseOk [caseWarning name] (Flag NoOptimisation)
1744-
| lstr == "true" -> ParseOk [caseWarning name] (Flag NormalOptimisation)
1738+
| lstr == "false" -> ParseOk [] (Flag NoOptimisation)
1739+
| lstr == "true" -> ParseOk [] (Flag NormalOptimisation)
17451740
| otherwise -> ParseFailed (NoParse name line)
17461741
where
17471742
lstr = lowercase str
@@ -1761,23 +1756,17 @@ legacyPackageConfigFieldDescrs =
17611756
)
17621757
( \line str _ -> case () of
17631758
_
1764-
| str == "False" -> ParseOk [] (Flag NoDebugInfo)
1765-
| str == "True" -> ParseOk [] (Flag NormalDebugInfo)
17661759
| str == "0" -> ParseOk [] (Flag NoDebugInfo)
17671760
| str == "1" -> ParseOk [] (Flag MinimalDebugInfo)
17681761
| str == "2" -> ParseOk [] (Flag NormalDebugInfo)
17691762
| str == "3" -> ParseOk [] (Flag MaximalDebugInfo)
1770-
| lstr == "false" -> ParseOk [caseWarning name] (Flag NoDebugInfo)
1771-
| lstr == "true" -> ParseOk [caseWarning name] (Flag NormalDebugInfo)
1763+
| lstr == "false" -> ParseOk [] (Flag NoDebugInfo)
1764+
| lstr == "true" -> ParseOk [] (Flag NormalDebugInfo)
17721765
| otherwise -> ParseFailed (NoParse name line)
17731766
where
17741767
lstr = lowercase str
17751768
)
17761769

1777-
caseWarning name =
1778-
PWarning $
1779-
"The '" ++ name ++ "' field is case sensitive, use 'True' or 'False'."
1780-
17811770
prefixTest name
17821771
| "test-" `isPrefixOf` name = name
17831772
| otherwise = "test-" ++ name

changelog.d/11828.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
synopsis: "Allow case insensitive bools"
3+
packages: [Cabal-syntax, cabal-install]
4+
prs: 11828
5+
---
6+
The `.cabal` file parser now accepts boolean values in a case‑insensitive manner (`true`, `True`, `TRUE`, `false`, etc.) without emitting a warning.
7+
Previously only `True` and `False` were treated as “standard”, and other capitalisations triggered a parse warning. That warning was introduced in 2008 as a backwards‑compatibility shim to prevent Hackage uploads that would break very old Cabal versions. Since all supported Cabal releases can now handle case‑insensitive booleans, the warning has been removed as unnecessary.

0 commit comments

Comments
 (0)