package opam-format
Install
Dune Dependency
Authors
-
David Allsopp
-
VVincent Bernardoff <vb@luminar.eu.org>
-
RRaja Boujbel <raja.boujbel@ocamlpro.com>
-
KKate Deplaix <kit-ty-kate@outlook.com>
-
RRoberto Di Cosmo <roberto@dicosmo.org>
-
TThomas Gazagnaire <thomas@gazagnaire.org>
-
LLouis Gesbert <louis.gesbert@ocamlpro.com>
-
FFabrice Le Fessant <Fabrice.Le_fessant@inria.fr>
-
AAnil Madhavapeddy <anil@recoil.org>
-
GGuillem Rieu <guillem.rieu@ocamlpro.com>
-
RRalf Treinen <ralf.treinen@pps.jussieu.fr>
-
FFrederic Tuong <tuong@users.gforge.inria.fr>
Maintainers
Sources
md5=3a99d6d8c0394185f168fa0f085f6bb9
sha512=596d7b28f0cf9613dc7637aaeac45cc45f411a13286fea1cc81aeb0630c4f8a6dc2095d50db73229a255a3da3d9a08fe0993355a7fc64d3b16fd712789ff5f6e
doc/opam-format/OpamPp/index.html
Module OpamPp
Source
Generic bidirectional transformation toolbox for parsing/printing
Parsing positions and error reporting helpers
Format error reporting: position and message
All the following parsing function raise Bad_format
in case the input does not have the right format.
Raise Bad_format
.
val bad_version :
OpamVersion.t option ->
?pos:OpamParserTypes.FullPos.pos ->
('a, unit, string, 'b) format4 ->
'a
Raise Bad_version
.
Adds a position to a Bad_format exception if it doesn't have one yet
Parser/printers
type ('a, 'b) t = private {
parse : pos:OpamParserTypes.FullPos.pos -> 'a -> 'b;
print : 'b -> 'a;
ppname : string;
name_constr : string -> string;
}
The type of bidirectional parsers from 'a
to 'b
. We abuse the terms and describe going from 'a
to 'b
as "parsing", and going from 'b
to 'a
as "printing". Parsing is generally error-prone, while printing is not expected to fail, so the handling isn't really symmetrical.
parse (print x)
should always be the identity, while no guarantee is given regarding print (parse x)
val pp :
?name:string ->
?name_constr:(string -> string) ->
(pos:OpamParserTypes.FullPos.pos -> 'a -> 'b) ->
('b -> 'a) ->
('a, 'b) t
Base constructor for Pp.t, from a parser function and a printer function. name_constr
is used to construct the resulting name when on the left of a pipe. Names are for tracing errors.
Constructor of Pp.t from a name and a pair
Base call for parsing with a pp
Error handling
Raises an exception handled by parser calls
Various pp constructors
val check :
?name:string ->
?raise:
('a ->
?pos:OpamParserTypes.FullPos.pos ->
(string -> 'a, unit, string, 'a) format4 ->
string ->
'a) ->
?errmsg:string ->
('a -> bool) ->
('a, 'a) t
Identity pp, unless the check fails. The check is turned into an assertion when printing. If no errmsg
is given, raises Unexpected
, otherwise call raise
with the given errmsg
. By default raise
raises Bad_format
.
val map_pair :
?name:string ->
?posf1:('a -> OpamParserTypes.FullPos.pos) ->
?posf2:('b -> OpamParserTypes.FullPos.pos) ->
('a, 'c) t ->
('b, 'd) t ->
('a * 'b, 'c * 'd) t
Builds a pp of pairs by passing the second term along
Builds a pp of pairs by passing the first term along
val map_list :
?name:string ->
?posf:('a -> OpamParserTypes.FullPos.pos) ->
('a, 'b) t ->
('a list, 'b list) t
Use for the rightmost element to close a ^+
sequence, e.g. pp1 ^+ pp2 ^+ last -| pp3
Generates a string pp from a module with of/to string functions
Parses to None on the empty list. Often combined with singleton (opt (singleton _)
)
fallback p1 p2
is p1
, except that parsing is allowed to fail and will in that case try to parse through p2
. Can be useful for backwards compatibility, but use with care
Combinators to parse to a record from a list of (field name, field setter, field getter)
Used to parse a single field of a record: 'a
on the left is the accumulator, or value of the record parsed so far. (in lens terms, get
would be the print operation that extracts the field for the record, while set
would be the parse operation that takes the input and record, and updates a given field in the record)
val ppacc :
?cleanup:(pos:OpamParserTypes.FullPos.pos -> 'acc -> 'a -> 'a) ->
('a -> 'acc -> 'acc) ->
('acc -> 'a) ->
('value, 'a) t ->
('acc, 'value) field_parser
Make a field parser from setter, getter and base pp. cleanup
is an optional sanitisation function that is called on parsed elements before calling the setter.
val ppacc_opt :
?cleanup:(pos:OpamParserTypes.FullPos.pos -> 'acc -> 'a -> 'a) ->
('a -> 'acc -> 'acc) ->
('acc -> 'a option) ->
('value, 'a) t ->
('acc, 'value) field_parser
Same as ppacc
, but when the field may be unset in the record, i.e. the getter returns an option
A field parser that ignores its argument
val embed :
('a -> 'acc -> 'acc) ->
('acc -> 'a) ->
('a, 'value) field_parser ->
('acc, 'value) field_parser