Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 2 additions & 7 deletions Cabal-syntax/src/Distribution/Parsec.hs
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@ module Distribution.Parsec

import Data.ByteString (ByteString)
import Data.Char (digitToInt, intToDigit)
import Data.Functor (($>))
import Data.List (transpose)
import Distribution.CabalSpecVersion
import Distribution.Compat.Prelude
Expand Down Expand Up @@ -253,15 +252,11 @@ instance Parsec Bool where
parsec = P.munch1 isAlpha >>= postprocess
where
postprocess str
| str == "True" = pure True
| str == "False" = pure False
| lstr == "true" = parsecWarning PWTBoolCase caseWarning $> True
| lstr == "false" = parsecWarning PWTBoolCase caseWarning $> False
| lstr == "true" = pure True
| lstr == "false" = pure False
| otherwise = fail $ "Not a boolean: " ++ str
where
lstr = map toLower str
caseWarning =
"Boolean values are case sensitive, use 'True' or 'False'."

instance Parsec a => Parsec (Last a) where
parsec = parsecLast
Expand Down
2 changes: 0 additions & 2 deletions Cabal-syntax/src/Distribution/Parsec/Warning.hs
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,6 @@ data PWarnType
PWTOther
| -- | Invalid UTF encoding
PWTUTF
| -- | @true@ or @false@, not @True@ or @False@
PWTBoolCase
| -- | there are version with tags
PWTVersionTag
| -- | New syntax used, but no @cabal-version: >= 1.2@ specified
Expand Down
1 change: 0 additions & 1 deletion Cabal-tests/tests/ParserTests.hs
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ warningTests = testGroup "warnings triggered"
, warningTest PWTLexNBSP "nbsp.cabal"
, warningTest PWTLexTab "tab.cabal"
, warningTest PWTUTF "utf8.cabal"
, warningTest PWTBoolCase "bool.cabal"
, warningTest PWTVersionTag "versiontag.cabal"
, warningTest PWTNewSyntax "newsyntax.cabal"
, warningTest PWTOldSyntax "oldsyntax.cabal"
Expand Down
12 changes: 0 additions & 12 deletions Cabal-tests/tests/ParserTests/warnings/bool.cabal

This file was deleted.

26 changes: 4 additions & 22 deletions cabal-install/src/Distribution/Client/Config.hs
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,6 @@ import Distribution.Compiler
import Distribution.Deprecated.ParseUtils
( FieldDescr (..)
, PError (..)
, PWarning (..)
, ParseResult (..)
, liftField
, lineNo
Expand Down Expand Up @@ -1211,24 +1210,14 @@ configFieldDescriptions src =
)
( \line str _ -> case () of
_
| str == "False" -> ParseOk [] (Flag NoOptimisation)
| str == "True" -> ParseOk [] (Flag NormalOptimisation)
| str == "0" -> ParseOk [] (Flag NoOptimisation)
| str == "1" -> ParseOk [] (Flag NormalOptimisation)
| str == "2" -> ParseOk [] (Flag MaximumOptimisation)
| lstr == "false" -> ParseOk [caseWarning] (Flag NoOptimisation)
| lstr == "true" ->
ParseOk
[caseWarning]
(Flag NormalOptimisation)
| lstr == "false" -> ParseOk [] (Flag NoOptimisation)
| lstr == "true" -> ParseOk [] (Flag NormalOptimisation)
| otherwise -> ParseFailed (NoParse name line)
where
lstr = lowercase str
caseWarning =
PWarning $
"The '"
++ name
++ "' field is case sensitive, use 'True' or 'False'."
)
, liftField configDebugInfo (\v flags -> flags{configDebugInfo = v}) $
let name = "debug-info"
Expand All @@ -1243,22 +1232,15 @@ configFieldDescriptions src =
)
( \line str _ -> case () of
_
| str == "False" -> ParseOk [] (Flag NoDebugInfo)
| str == "True" -> ParseOk [] (Flag NormalDebugInfo)
| str == "0" -> ParseOk [] (Flag NoDebugInfo)
| str == "1" -> ParseOk [] (Flag MinimalDebugInfo)
| str == "2" -> ParseOk [] (Flag NormalDebugInfo)
| str == "3" -> ParseOk [] (Flag MaximalDebugInfo)
| lstr == "false" -> ParseOk [caseWarning] (Flag NoDebugInfo)
| lstr == "true" -> ParseOk [caseWarning] (Flag NormalDebugInfo)
| lstr == "false" -> ParseOk [] (Flag NoDebugInfo)
| lstr == "true" -> ParseOk [] (Flag NormalDebugInfo)
| otherwise -> ParseFailed (NoParse name line)
where
lstr = lowercase str
caseWarning =
PWarning $
"The '"
++ name
++ "' field is case sensitive, use 'True' or 'False'."
)
]
++ toSavedConfig
Expand Down
23 changes: 6 additions & 17 deletions cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,6 @@ import Distribution.Client.ParseUtils
import Distribution.Client.ReplFlags (multiReplOption)
import Distribution.Deprecated.ParseUtils
( PError (..)
, PWarning (..)
, ParseResult (..)
, commaNewLineListFieldParsec
, newLineListField
Expand Down Expand Up @@ -1706,10 +1705,8 @@ legacyPackageConfigFieldDescrs =
)
( \line str _ -> case () of
_
| str == "False" -> ParseOk [] (Flag NoDumpBuildInfo)
| str == "True" -> ParseOk [] (Flag DumpBuildInfo)
| lstr == "false" -> ParseOk [caseWarning name] (Flag NoDumpBuildInfo)
| lstr == "true" -> ParseOk [caseWarning name] (Flag DumpBuildInfo)
| lstr == "false" -> ParseOk [] (Flag NoDumpBuildInfo)
| lstr == "true" -> ParseOk [] (Flag DumpBuildInfo)
| otherwise -> ParseFailed (NoParse name line)
where
lstr = lowercase str
Expand All @@ -1735,13 +1732,11 @@ legacyPackageConfigFieldDescrs =
)
( \line str _ -> case () of
_
| str == "False" -> ParseOk [] (Flag NoOptimisation)
| str == "True" -> ParseOk [] (Flag NormalOptimisation)
| str == "0" -> ParseOk [] (Flag NoOptimisation)
| str == "1" -> ParseOk [] (Flag NormalOptimisation)
| str == "2" -> ParseOk [] (Flag MaximumOptimisation)
| lstr == "false" -> ParseOk [caseWarning name] (Flag NoOptimisation)
| lstr == "true" -> ParseOk [caseWarning name] (Flag NormalOptimisation)
| lstr == "false" -> ParseOk [] (Flag NoOptimisation)
| lstr == "true" -> ParseOk [] (Flag NormalOptimisation)
| otherwise -> ParseFailed (NoParse name line)
where
lstr = lowercase str
Expand All @@ -1761,23 +1756,17 @@ legacyPackageConfigFieldDescrs =
)
( \line str _ -> case () of
_
| str == "False" -> ParseOk [] (Flag NoDebugInfo)
| str == "True" -> ParseOk [] (Flag NormalDebugInfo)
| str == "0" -> ParseOk [] (Flag NoDebugInfo)
| str == "1" -> ParseOk [] (Flag MinimalDebugInfo)
| str == "2" -> ParseOk [] (Flag NormalDebugInfo)
| str == "3" -> ParseOk [] (Flag MaximalDebugInfo)
| lstr == "false" -> ParseOk [caseWarning name] (Flag NoDebugInfo)
| lstr == "true" -> ParseOk [caseWarning name] (Flag NormalDebugInfo)
| lstr == "false" -> ParseOk [] (Flag NoDebugInfo)
| lstr == "true" -> ParseOk [] (Flag NormalDebugInfo)
| otherwise -> ParseFailed (NoParse name line)
where
lstr = lowercase str
)

caseWarning name =
PWarning $
"The '" ++ name ++ "' field is case sensitive, use 'True' or 'False'."

prefixTest name
| "test-" `isPrefixOf` name = name
| otherwise = "test-" ++ name
Expand Down
7 changes: 7 additions & 0 deletions changelog.d/11828.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
synopsis: "Allow case insensitive bools"
packages: [Cabal-syntax, cabal-install]
prs: 11828
---
The `.cabal` file parser now accepts boolean values in a case‑insensitive manner (`true`, `True`, `TRUE`, `false`, etc.) without emitting a warning.
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.
Loading