198 lines
7.6 KiB
OCaml
198 lines
7.6 KiB
OCaml
|
|
(**************************************************************************)
|
||
|
|
(* *)
|
||
|
|
(* Copyright 2012-2020 OCamlPro *)
|
||
|
|
(* Copyright 2012 INRIA *)
|
||
|
|
(* *)
|
||
|
|
(* All rights reserved. This file is distributed under the terms of the *)
|
||
|
|
(* GNU Lesser General Public License version 2.1, with the special *)
|
||
|
|
(* exception on linking described in the file LICENSE. *)
|
||
|
|
(* *)
|
||
|
|
(**************************************************************************)
|
||
|
|
|
||
|
|
(** Functions for converting parsed opam files back to strings *)
|
||
|
|
|
||
|
|
|
||
|
|
(** [OpamPrinter] transitional module with full position types *)
|
||
|
|
module FullPos : sig
|
||
|
|
|
||
|
|
open OpamParserTypes.FullPos
|
||
|
|
|
||
|
|
(** {2 Printers for the [value] and [opamfile] formats} *)
|
||
|
|
|
||
|
|
val relop_kind: [< relop_kind ] -> string
|
||
|
|
(** Converts {!OpamParserTypes.FullPos.relop_kind} to its string representation
|
||
|
|
([=], [!=], ..., [~]). *)
|
||
|
|
|
||
|
|
val logop_kind: [< logop_kind ] -> string
|
||
|
|
(** Converts {!OpamParserTypes.FullPos.logop_kind} to its string representation
|
||
|
|
([&] and [|]). *)
|
||
|
|
|
||
|
|
val pfxop_kind: [< pfxop_kind ] -> string
|
||
|
|
(** Converts {!OpamParserTypes.FullPos.logop_kind} to its string representation
|
||
|
|
([&] and [|]). *)
|
||
|
|
|
||
|
|
val env_update_op_kind: env_update_op_kind -> string
|
||
|
|
(** Converts {!OpamParserTypes.FullPos.env_update_op_kind} to its string representation
|
||
|
|
([=], [+=], ..., [=:]). *)
|
||
|
|
|
||
|
|
|
||
|
|
val relop: relop -> string
|
||
|
|
(** Converts {!OpamParserTypes.FullPos.relop} to its string representation
|
||
|
|
([=], [!=], ..., [~]). *)
|
||
|
|
|
||
|
|
val logop: logop -> string
|
||
|
|
(** Converts {!OpamParserTypes.FullPos.logop} to its string representation
|
||
|
|
([&] and [|]). *)
|
||
|
|
|
||
|
|
val pfxop: pfxop -> string
|
||
|
|
(** Converts {!OpamParserTypes.FullPos.pfxop} to its string representation
|
||
|
|
([!] and [?]). *)
|
||
|
|
|
||
|
|
val env_update_op: env_update_op -> string
|
||
|
|
(** Converts {!OpamParserTypes.FullPos.env_update_op} to its string representation
|
||
|
|
([=], [+=], ..., [=:]). *)
|
||
|
|
|
||
|
|
|
||
|
|
val value : value -> string
|
||
|
|
(** Converts {!value} to a string {b always using LF-encoding of newlines}. *)
|
||
|
|
|
||
|
|
val value_list: value list with_pos -> string
|
||
|
|
(** Converts a list of {!value}s to a string {b always using LF-encoding of
|
||
|
|
newlines}. *)
|
||
|
|
|
||
|
|
val items: opamfile_item list -> string
|
||
|
|
(** Converts a list of opam field/sections to a string.
|
||
|
|
|
||
|
|
@raise Invalid_argument if ["opam-version"] is greater than "2.0"
|
||
|
|
and not solely the first item. *)
|
||
|
|
|
||
|
|
val opamfile: opamfile -> string
|
||
|
|
(** Converts an {!opamfile} to a string.
|
||
|
|
|
||
|
|
@raise Invalid_argument if ["opam-version"] is greater than "2.0"
|
||
|
|
and not solely the first item. *)
|
||
|
|
|
||
|
|
val format_opamfile: Format.formatter -> opamfile -> unit
|
||
|
|
(** Writes an {!opamfile} to a [Format.formatter]. The function ensures that all
|
||
|
|
newlines are sent using [Format]'s break instructions (and so ultimately are
|
||
|
|
processed with the [out_newline] function of the formatter) but it is the
|
||
|
|
responsibility of the caller to ensure that the formatter is configured for
|
||
|
|
the required output, if necessary.
|
||
|
|
|
||
|
|
@raise Invalid_argument if ["opam-version"] is greater than "2.0"
|
||
|
|
and not solely the first item. *)
|
||
|
|
|
||
|
|
(** {2 Normalised output for opam syntax files} *)
|
||
|
|
|
||
|
|
(** opam normalised file format, for signatures.
|
||
|
|
|
||
|
|
- each top-level field on a single line
|
||
|
|
- newlines are LF-encoded (including on Windows)
|
||
|
|
- file ends with a newline
|
||
|
|
- spaces only after [fieldname:], between elements in lists, before braced
|
||
|
|
options, between operators and their operands
|
||
|
|
- fields are sorted lexicographically by field name
|
||
|
|
(using [String.compare])
|
||
|
|
- newlines in strings turned to ['\n'], backslashes and double quotes
|
||
|
|
escaped
|
||
|
|
- no comments (they don't appear in the internal file format anyway)
|
||
|
|
- fields containing an empty list, or a singleton list containing an empty
|
||
|
|
list, are not printed at all
|
||
|
|
*)
|
||
|
|
module Normalise : sig
|
||
|
|
val escape_string : string -> string
|
||
|
|
val value : value -> string
|
||
|
|
val item : opamfile_item -> string
|
||
|
|
val item_order : opamfile_item -> opamfile_item -> int
|
||
|
|
val items : opamfile_item list -> string
|
||
|
|
val opamfile : opamfile -> string
|
||
|
|
end
|
||
|
|
|
||
|
|
(** {2 Format-preserving reprinter} *)
|
||
|
|
|
||
|
|
module Preserved : sig
|
||
|
|
|
||
|
|
val items: string -> opamfile_item list -> opamfile_item list -> string
|
||
|
|
(** [items str orig_its its] converts [its] to string, while attempting to
|
||
|
|
preserve the layout and comments of the original [str] for unmodified
|
||
|
|
elements. The function assumes that [str] parses to the items
|
||
|
|
[orig_its].
|
||
|
|
|
||
|
|
@raise Invalid_argument if ["opam-version"] is greater than "2.0"
|
||
|
|
and not solely the first item in either list. *)
|
||
|
|
|
||
|
|
val opamfile: ?format_from:file_name -> opamfile -> string
|
||
|
|
(** [opamfile f] converts [f] to string, respecting the layout and comments in
|
||
|
|
the corresponding on-disk file for unmodified items. [format_from] can be
|
||
|
|
specified instead of using the filename specified in [f].
|
||
|
|
|
||
|
|
@raise Invalid_argument if ["opam-version"] is greater than "2.0"
|
||
|
|
and not solely the first item in the list. Note that
|
||
|
|
any errors in the file raise {!OpamLexer.Error} as
|
||
|
|
normal. *)
|
||
|
|
end
|
||
|
|
|
||
|
|
(** {2 Random utility functions} *)
|
||
|
|
|
||
|
|
val value_equals: value -> value -> bool
|
||
|
|
(** Compares structurally, without considering file positions *)
|
||
|
|
|
||
|
|
val opamfile_item_equals: opamfile_item -> opamfile_item -> bool
|
||
|
|
(** Compares structurally, without considering file positions *)
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
open OpamParserTypes
|
||
|
|
|
||
|
|
val relop: [< relop ] -> string
|
||
|
|
[@@ocaml.deprecated "Use OpamPrinter.FullPos.relop instead."]
|
||
|
|
|
||
|
|
val logop: [< logop ] -> string
|
||
|
|
[@@ocaml.deprecated "Use OpamPrinter.FullPos.logop instead."]
|
||
|
|
|
||
|
|
val pfxop: [< pfxop ] -> string
|
||
|
|
[@@ocaml.deprecated "Use OpamPrinter.FullPos.pfxop instead."]
|
||
|
|
|
||
|
|
val env_update_op: env_update_op -> string
|
||
|
|
[@@ocaml.deprecated "Use OpamPrinter.FullPos.env_update_op instead."]
|
||
|
|
|
||
|
|
val value : value -> string
|
||
|
|
[@@ocaml.deprecated "Use OpamPrinter.FullPos.value instead."]
|
||
|
|
|
||
|
|
val value_list: value list -> string
|
||
|
|
[@@ocaml.deprecated "Use OpamPrinter.FullPos.value_list instead."]
|
||
|
|
|
||
|
|
val items: opamfile_item list -> string
|
||
|
|
[@@ocaml.deprecated "Use OpamPrinter.FullPos.items instead."]
|
||
|
|
|
||
|
|
val opamfile: opamfile -> string
|
||
|
|
[@@ocaml.deprecated "Use OpamPrinter.FullPos.opamfile instead."]
|
||
|
|
|
||
|
|
val format_opamfile: Format.formatter -> opamfile -> unit
|
||
|
|
[@@ocaml.deprecated "Use OpamPrinter.FullPos.format_opamfile instead."]
|
||
|
|
|
||
|
|
module Normalise : sig
|
||
|
|
val escape_string : string -> string
|
||
|
|
val value : value -> string
|
||
|
|
val item : opamfile_item -> string
|
||
|
|
val item_order : opamfile_item -> opamfile_item -> int
|
||
|
|
val items : opamfile_item list -> string
|
||
|
|
val opamfile : opamfile -> string
|
||
|
|
end
|
||
|
|
[@@ocaml.deprecated "Use OpamPrinter.FullPos.Normalise instead."]
|
||
|
|
|
||
|
|
module Preserved : sig
|
||
|
|
val items: string -> opamfile_item list -> opamfile_item list -> string
|
||
|
|
|
||
|
|
val opamfile: ?format_from:file_name -> opamfile -> string
|
||
|
|
end
|
||
|
|
[@@ocaml.deprecated "Use OpamPrinter.FullPos.Preserved instead."]
|
||
|
|
|
||
|
|
|
||
|
|
val value_equals: value -> value -> bool
|
||
|
|
[@@ocaml.deprecated "Use OpamPrinter.FullPos.value_equals instead."]
|
||
|
|
|
||
|
|
val opamfile_item_equals: opamfile_item -> opamfile_item -> bool
|
||
|
|
[@@ocaml.deprecated "Use OpamPrinter.FullPos.opamfile_item_equals instead."]
|
||
|
|
|