Cabal-1.14.0: A framework for packaging Haskell software

Portability | portable
Maintainer | cabal-devel@haskell.org
Safe Haskell | None

Distribution.ParseUtils

Description

Utilities for parsing `PackageDescription` and `InstalledPackageInfo`.

The `.cabal` file format is not trivial, especially with the introduction of configurations and the section syntax that goes with that. This module has a bunch of parsing functions that is used by the `.cabal` parser and a couple others. It has the parsing framework code and also little parsers for many of the formats we get in various `.cabal` file fields, like module names, comma separated lists etc.

Synopsis

- type LineNo = Int
- data PError
  - = AmbigousParse String LineNo
  - | NoParse String LineNo
  - | TabsError LineNo
  - | FromString String (Maybe LineNo)
- data PWarning
  - = PWarning String
  - | UTFWarning LineNo String
- locatedErrorMsg :: PError -> (Maybe LineNo, String)
- syntaxError :: LineNo -> String -> ParseResult a
- warning :: String -> ParseResult ()
- runP :: LineNo -> String -> ReadP a a -> String -> ParseResult a
- runE :: LineNo -> String -> ReadE a -> String -> ParseResult a
- data ParseResult a
  - = ParseFailed PError
  - | ParseOk [PWarning] a
- catchParseError :: ParseResult a -> (PError -> ParseResult a) -> ParseResult a
- parseFail :: PError -> ParseResult a
- showPWarning :: FilePath -> PWarning -> String
- data Field
  - = F LineNo String String
  - | Section LineNo String String [Field]
  - | IfBlock LineNo String [Field] [Field]
- fName :: Field -> String
- lineNo :: Field -> LineNo
- data FieldDescr a = FieldDescr {
  - fieldName :: String
  - fieldGet :: a -> Doc
  - fieldSet :: LineNo -> String -> a -> ParseResult a
  }
- ppField :: String -> Doc -> Doc
- ppFields :: [FieldDescr a] -> a -> Doc
- readFields :: String -> ParseResult [Field]
- readFieldsFlat :: String -> ParseResult [Field]
- showFields :: [FieldDescr a] -> a -> String
- showSingleNamedField :: [FieldDescr a] -> String -> Maybe (a -> String)
- parseFields :: [FieldDescr a] -> a -> String -> ParseResult a
- parseFieldsFlat :: [FieldDescr a] -> a -> String -> ParseResult a
- parseFilePathQ :: ReadP r FilePath
- parseTokenQ :: ReadP r String
- parseTokenQ' :: ReadP r String
- parseModuleNameQ :: ReadP r ModuleName
- parseBuildTool :: ReadP r Dependency
- parsePkgconfigDependency :: ReadP r Dependency
- parseOptVersion :: ReadP r Version
- parsePackageNameQ :: ReadP r PackageName
- parseVersionRangeQ :: ReadP r VersionRange
- parseTestedWithQ :: ReadP r (CompilerFlavor, VersionRange)
- parseLicenseQ :: ReadP r License
- parseLanguageQ :: ReadP r Language
- parseExtensionQ :: ReadP r Extension
- parseSepList :: ReadP r b -> ReadP r a -> ReadP r [a]
- parseCommaList :: ReadP r a -> ReadP r [a]
- parseOptCommaList :: ReadP r a -> ReadP r [a]
- showFilePath :: FilePath -> Doc
- showToken :: String -> Doc
- showTestedWith :: (CompilerFlavor, VersionRange) -> Doc
- showFreeText :: String -> Doc
- parseFreeText :: ReadP s String
- field :: String -> (a -> Doc) -> ReadP a a -> FieldDescr a
- simpleField :: String -> (a -> Doc) -> ReadP a a -> (b -> a) -> (a -> b -> b) -> FieldDescr b
- listField :: String -> (a -> Doc) -> ReadP [a] a -> (b -> [a]) -> ([a] -> b -> b) -> FieldDescr b
- spaceListField :: String -> (a -> Doc) -> ReadP [a] a -> (b -> [a]) -> ([a] -> b -> b) -> FieldDescr b
- commaListField :: String -> (a -> Doc) -> ReadP [a] a -> (b -> [a]) -> ([a] -> b -> b) -> FieldDescr b
- optsField :: String -> CompilerFlavor -> (b -> [(CompilerFlavor, [String])]) -> ([(CompilerFlavor, [String])] -> b -> b) -> FieldDescr b
- liftField :: (b -> a) -> (a -> b -> b) -> FieldDescr a -> FieldDescr b
- boolField :: String -> (b -> Bool) -> (Bool -> b -> b) -> FieldDescr b
- parseQuoted :: ReadP r a -> ReadP r a
- type UnrecFieldParser a = (String, String) -> a -> Maybe a
- warnUnrec :: UnrecFieldParser a
- ignoreUnrec :: UnrecFieldParser a

# Documentation

type LineNo = Int

data PError

Constructors

AmbigousParse String LineNo |
NoParse String LineNo |
TabsError LineNo |
FromString String (Maybe LineNo) |

Instances

Show PError |

data PWarning

Constructors

PWarning String |
UTFWarning LineNo String |

Instances

Show PWarning |

locatedErrorMsg :: PError -> (Maybe LineNo, String)

syntaxError :: LineNo -> String -> ParseResult a

warning :: String -> ParseResult ()

runP :: LineNo -> String -> ReadP a a -> String -> ParseResult a

runE :: LineNo -> String -> ReadE a -> String -> ParseResult a

data ParseResult a

Constructors

ParseFailed PError |
ParseOk [PWarning] a |

Instances

Monad ParseResult |
Show a => Show (ParseResult a) |

catchParseError :: ParseResult a -> (PError -> ParseResult a) -> ParseResult a

parseFail :: PError -> ParseResult a

showPWarning :: FilePath -> PWarning -> String

data Field

Constructors

F LineNo String String | A regular `property: value` field

Section LineNo String String [Field]

A section with a name and possible parameter. The syntactic structure is:

       sectionname arg {
         field*
       }

IfBlock LineNo String [Field] [Field]

A conditional block with an optional else branch:

      if condition {
        field*
      } else {
        field*
      }

Instances

Eq Field |
Show Field |

fName :: Field -> String

lineNo :: Field -> LineNo

data FieldDescr a

Field descriptor. The parameter `a` parameterizes over where the field's value is stored in.

Constructors

FieldDescr |

Fields

fieldName :: String
fieldGet :: a -> Doc
fieldSet :: LineNo -> String -> a -> ParseResult a

  `fieldSet n str x` Parses the field value from the given input string `str` and stores the result in `x` if the parse was successful. Otherwise, reports an error on line number `n`.

ppField :: String -> Doc -> Doc

ppFields :: [FieldDescr a] -> a -> Doc

readFields :: String -> ParseResult [Field]

readFieldsFlat :: String -> ParseResult [Field]

showFields :: [FieldDescr a] -> a -> String

showSingleNamedField :: [FieldDescr a] -> String -> Maybe (a -> String)

parseFields :: [FieldDescr a] -> a -> String -> ParseResult a

parseFieldsFlat :: [FieldDescr a] -> a -> String -> ParseResult a

parseFilePathQ :: ReadP r FilePath

parseTokenQ :: ReadP r String

parseTokenQ' :: ReadP r String

parseModuleNameQ :: ReadP r ModuleName

parse a module name

parseBuildTool :: ReadP r Dependency

parsePkgconfigDependency :: ReadP r Dependency

parseOptVersion :: ReadP r Version

parsePackageNameQ :: ReadP r PackageName

parseVersionRangeQ :: ReadP r VersionRange

parseTestedWithQ :: ReadP r (CompilerFlavor, VersionRange)

parseLicenseQ :: ReadP r License

parseLanguageQ :: ReadP r Language

parseExtensionQ :: ReadP r Extension

parseSepList

Arguments

:: ReadP r b |
-> ReadP r a | The parser for the stuff between commas
-> ReadP r [a] |

parseCommaList

Arguments

:: ReadP r a | The parser for the stuff between commas
-> ReadP r [a] |

parseOptCommaList

Arguments

:: ReadP r a | The parser for the stuff between commas
-> ReadP r [a] |

showFilePath :: FilePath -> Doc

showToken :: String -> Doc

showTestedWith :: (CompilerFlavor, VersionRange) -> Doc

showFreeText :: String -> Doc

Pretty-print free-format text, ensuring that it is vertically aligned, and with blank lines replaced by dots for correct re-parsing.

parseFreeText :: ReadP s String

field :: String -> (a -> Doc) -> ReadP a a -> FieldDescr a

simpleField :: String -> (a -> Doc) -> ReadP a a -> (b -> a) -> (a -> b -> b) -> FieldDescr b

listField :: String -> (a -> Doc) -> ReadP [a] a -> (b -> [a]) -> ([a] -> b -> b) -> FieldDescr b

spaceListField :: String -> (a -> Doc) -> ReadP [a] a -> (b -> [a]) -> ([a] -> b -> b) -> FieldDescr b

commaListField :: String -> (a -> Doc) -> ReadP [a] a -> (b -> [a]) -> ([a] -> b -> b) -> FieldDescr b

optsField :: String -> CompilerFlavor -> (b -> [(CompilerFlavor, [String])]) -> ([(CompilerFlavor, [String])] -> b -> b) -> FieldDescr b

liftField :: (b -> a) -> (a -> b -> b) -> FieldDescr a -> FieldDescr b

boolField :: String -> (b -> Bool) -> (Bool -> b -> b) -> FieldDescr b

parseQuoted :: ReadP r a -> ReadP r a

type UnrecFieldParser a = (String, String) -> a -> Maybe a

The type of a function which, given a name-value pair of an unrecognized field, and the current structure being built, decides whether to incorporate the unrecognized field (by returning Just x, where x is a possibly modified version of the structure being built), or not (by returning Nothing).

warnUnrec :: UnrecFieldParser a

A default unrecognized field parser which simply returns Nothing, i.e. ignores all unrecognized fields, so warnings will be generated.

ignoreUnrec :: UnrecFieldParser a

A default unrecognized field parser which silently (i.e. no warnings will be generated) ignores unrecognized fields, by returning the structure being built unmodified.