Skip to content

Commit

Permalink
[minor] Format: factorize check_geometry to avoid invariant duplication
Browse files Browse the repository at this point in the history
  • Loading branch information
gasche committed Jan 14, 2020
1 parent c41b282 commit bc574f5
Showing 1 changed file with 27 additions and 15 deletions.
42 changes: 27 additions & 15 deletions stdlib/format.ml
Expand Up @@ -815,32 +815,44 @@ let pp_set_margin state n =
(** Geometry functions and types *)
type geometry = { max_indent:int; margin: int}

let validate_geometry {margin; max_indent} =
if max_indent < 2 then
Error "max_indent < 2"
else if margin <= max_indent then
Error "margin <= max_indent"
else Ok ()

let check_geometry geometry =
geometry.max_indent > 1
&& geometry.margin > geometry.max_indent
match validate_geometry geometry with
| Ok () -> true
| Error _ -> false

let pp_get_margin state () = state.pp_margin

let pp_set_geometry state ~max_indent ~margin =
if max_indent < 2 then
raise (Invalid_argument "Format.pp_set_geometry: max_indent < 2");
if margin <= max_indent then
raise (Invalid_argument "Format.pp_set_geometry: margin <= max_indent");
let pp_set_full_geometry state {margin; max_indent} =
pp_set_margin state margin;
pp_set_max_indent state max_indent
pp_set_max_indent state max_indent;
()

let pp_set_geometry state ~max_indent ~margin =
let geometry = { max_indent; margin } in
match validate_geometry geometry with
| Error msg ->
raise (Invalid_argument ("Format.pp_set_geometry: " ^ msg))
| Ok () ->
pp_set_full_geometry state geometry

let pp_safe_set_geometry state ~max_indent ~margin =
if check_geometry {max_indent;margin} then
pp_set_geometry state ~max_indent ~margin
else
()
let geometry = { max_indent; margin } in
match validate_geometry geometry with
| Error _msg ->
()
| Ok () ->
pp_set_full_geometry state geometry

let pp_get_geometry state () =
{ margin = pp_get_margin state (); max_indent = pp_get_max_indent state () }

let pp_set_full_geometry state {margin; max_indent} =
pp_set_geometry state ~max_indent ~margin

let pp_update_geometry state update =
let geometry = pp_get_geometry state () in
pp_set_full_geometry state (update geometry)
Expand Down

0 comments on commit bc574f5

Please sign in to comment.