From a4efc7bba70d8aedc1c394b93df36322b505a469 Mon Sep 17 00:00:00 2001 From: Sam Blackshear Date: Mon, 6 Feb 2017 15:26:31 -0800 Subject: [PATCH] [cleanup] Simplify PrettyPrintable.Make functors Summary: Being forced to separately define `pp_element`/`pp_key` is uneccessary and makes it more cumbersome to create a set/map from an existing module that already defines `pp`. Reviewed By: jeremydubreil Differential Revision: D4517308 fbshipit-source-id: 9b17c9c --- infer/src/IR/Annot.re | 2 +- infer/src/IR/CallSite.ml | 2 +- infer/src/IR/Pvar.re | 2 +- infer/src/base/PrettyPrintable.ml | 24 +++++++------------ infer/src/base/PrettyPrintable.mli | 18 +++++--------- .../src/bufferoverrun/bufferOverrunDomain.ml | 13 ++++------ infer/src/checkers/BoundedCallTree.ml | 6 +---- infer/src/checkers/Passthrough.ml | 2 +- infer/src/checkers/SimpleChecker.ml | 2 +- infer/src/checkers/Sink.ml | 2 +- infer/src/checkers/SiofTrace.ml | 4 ++-- infer/src/checkers/Source.ml | 4 ++-- infer/src/checkers/ThreadSafetyDomain.ml | 8 ++----- infer/src/checkers/accessPath.ml | 10 +++----- infer/src/checkers/accessPathDomains.ml | 6 +---- infer/src/checkers/var.ml | 4 ++-- infer/src/unit/TraceTests.ml | 2 +- 17 files changed, 39 insertions(+), 72 deletions(-) diff --git a/infer/src/IR/Annot.re b/infer/src/IR/Annot.re index 6f0bc7e72..6351fb440 100644 --- a/infer/src/IR/Annot.re +++ b/infer/src/IR/Annot.re @@ -32,7 +32,7 @@ let pp fmt annotation => F.fprintf fmt "@@%s" annotation.class_name; let module Map = PrettyPrintable.MakePPMap { type nonrec t = t; let compare = compare; - let pp_key = pp; + let pp = pp; }; let module Item = { diff --git a/infer/src/IR/CallSite.ml b/infer/src/IR/CallSite.ml index 6c8ff699c..208d6eca0 100644 --- a/infer/src/IR/CallSite.ml +++ b/infer/src/IR/CallSite.ml @@ -38,5 +38,5 @@ let pp fmt t = module Set = PrettyPrintable.MakePPSet(struct type nonrec t = t let compare = compare - let pp_element = pp + let pp = pp end) diff --git a/infer/src/IR/Pvar.re b/infer/src/IR/Pvar.re index b1d15ae36..c96334b85 100644 --- a/infer/src/IR/Pvar.re +++ b/infer/src/IR/Pvar.re @@ -364,5 +364,5 @@ let module Set = PrettyPrintable.MakePPCompareSet { type nonrec t = t; let compare = compare; let compare_pp = compare_alpha; - let pp_element = pp Pp.text; + let pp = pp Pp.text; }; diff --git a/infer/src/base/PrettyPrintable.ml b/infer/src/base/PrettyPrintable.ml index 54385e8b8..4d6f903a2 100644 --- a/infer/src/base/PrettyPrintable.ml +++ b/infer/src/base/PrettyPrintable.ml @@ -13,16 +13,10 @@ module F = Format (** Wrappers for making pretty-printable modules *) -module type SetOrderedType = sig +module type PrintableOrderedType = sig include Caml.Set.OrderedType - val pp_element : F.formatter -> t -> unit -end - -module type MapOrderedType = sig - include Caml.Map.OrderedType - - val pp_key : F.formatter -> t -> unit + val pp : F.formatter -> t -> unit end module type PPSet = sig @@ -45,32 +39,32 @@ let pp_collection ~pp_item fmt c = F.pp_print_list ~pp_sep pp_item fmt c in F.fprintf fmt "{ %a }" pp_collection c -module MakePPSet (Ord : SetOrderedType) = struct +module MakePPSet (Ord : PrintableOrderedType) = struct include Caml.Set.Make(Ord) - let pp_element = Ord.pp_element + let pp_element = Ord.pp let pp fmt s = pp_collection ~pp_item:pp_element fmt (elements s) end module MakePPCompareSet - (Ord : sig include SetOrderedType val compare_pp : t -> t -> int end) = struct + (Ord : sig include PrintableOrderedType val compare_pp : t -> t -> int end) = struct include Caml.Set.Make(Ord) - let pp_element = Ord.pp_element + let pp_element = Ord.pp let pp fmt s = let elements_alpha = IList.sort Ord.compare_pp (elements s) in pp_collection ~pp_item:pp_element fmt elements_alpha end -module MakePPMap (Ord : MapOrderedType) = struct +module MakePPMap (Ord : PrintableOrderedType) = struct include Caml.Map.Make(Ord) - let pp_key = Ord.pp_key + let pp_key = Ord.pp let pp ~pp_value fmt m = - let pp_item fmt (k, v) = F.fprintf fmt "%a -> %a" Ord.pp_key k pp_value v in + let pp_item fmt (k, v) = F.fprintf fmt "%a -> %a" Ord.pp k pp_value v in pp_collection ~pp_item fmt (bindings m) end diff --git a/infer/src/base/PrettyPrintable.mli b/infer/src/base/PrettyPrintable.mli index 9a3d78f2f..2e3bae4a1 100644 --- a/infer/src/base/PrettyPrintable.mli +++ b/infer/src/base/PrettyPrintable.mli @@ -15,16 +15,10 @@ module F = Format val pp_collection : pp_item:(F.formatter -> 'a -> unit) -> F.formatter -> 'a list -> unit -module type SetOrderedType = sig - type t - val compare : t -> t -> int - val pp_element : F.formatter -> t -> unit -end +module type PrintableOrderedType = sig + include Caml.Set.OrderedType -module type MapOrderedType = sig - type t - val compare : t -> t -> int - val pp_key : F.formatter -> t -> unit + val pp : F.formatter -> t -> unit end module type PPSet = sig @@ -39,14 +33,14 @@ module type PPMap = sig val pp : pp_value:(F.formatter -> 'a -> unit) -> F.formatter -> 'a t -> unit end -module MakePPSet (Ord : SetOrderedType) : (PPSet with type elt = Ord.t) +module MakePPSet (Ord : PrintableOrderedType) : (PPSet with type elt = Ord.t) (** Use a comparison function to determine the order of the elements printed *) module MakePPCompareSet (Ord : sig - include SetOrderedType + include PrintableOrderedType val compare_pp : t -> t -> int end) : (PPSet with type elt = Ord.t) -module MakePPMap (Ord : MapOrderedType) : (PPMap with type key = Ord.t) +module MakePPMap (Ord : PrintableOrderedType) : (PPMap with type key = Ord.t) diff --git a/infer/src/bufferoverrun/bufferOverrunDomain.ml b/infer/src/bufferoverrun/bufferOverrunDomain.ml index db0f436cc..ce06cd398 100644 --- a/infer/src/bufferoverrun/bufferOverrunDomain.ml +++ b/infer/src/bufferoverrun/bufferOverrunDomain.ml @@ -65,9 +65,6 @@ let pp : F.formatter -> t -> unit Itv.pp c.idx Itv.pp c.size pp_location c pname (string_of_location loc) | Intra _ -> F.fprintf fmt "%a < %a at %a" Itv.pp c.idx Itv.pp c.size pp_location c -let pp_element : F.formatter -> t -> unit - = pp - let get_location : t -> Location.t = fun c -> c.loc @@ -391,8 +388,7 @@ module Stack = struct module PPMap = struct - module Ord = struct include Loc let pp_key = pp end - include PrettyPrintable.MakePPMap (Ord) + include PrettyPrintable.MakePPMap (Loc) let pp_collection : pp_item:(F.formatter -> 'a -> unit) -> F.formatter -> 'a list -> unit @@ -404,7 +400,7 @@ struct : pp_value:(F.formatter -> 'a -> unit) -> F.formatter -> 'a t -> unit = fun ~pp_value fmt m -> let pp_item fmt (k, v) = - F.fprintf fmt "%a -> %a" Ord.pp_key k pp_value v + F.fprintf fmt "%a -> %a" Loc.pp k pp_value v in F.fprintf fmt "@[{ "; pp_collection ~pp_item fmt (bindings m); @@ -446,8 +442,7 @@ module Heap = struct module PPMap = struct - module Ord = struct include Loc let pp_key = pp end - include PrettyPrintable.MakePPMap (Ord) + include PrettyPrintable.MakePPMap (Loc) let pp_collection : pp_item:(F.formatter -> 'a -> unit) -> F.formatter -> 'a list -> unit @@ -458,7 +453,7 @@ struct let pp : pp_value:(F.formatter -> 'a -> unit) -> F.formatter -> 'a t -> unit = fun ~pp_value fmt m -> let pp_item fmt (k, v) = - F.fprintf fmt "%a -> %a" Ord.pp_key k pp_value v + F.fprintf fmt "%a -> %a" Loc.pp k pp_value v in F.fprintf fmt "@[{ "; pp_collection ~pp_item fmt (bindings m); diff --git a/infer/src/checkers/BoundedCallTree.ml b/infer/src/checkers/BoundedCallTree.ml index 38fff5a19..ca9084f24 100644 --- a/infer/src/checkers/BoundedCallTree.ml +++ b/infer/src/checkers/BoundedCallTree.ml @@ -14,11 +14,7 @@ module L = Logging (** find transitive procedure calls for each procedure *) -module ProcnameSet = PrettyPrintable.MakePPSet(struct - type t = Procname.t - let compare = Procname.compare - let pp_element = Procname.pp - end) +module ProcnameSet = PrettyPrintable.MakePPSet(Procname) module Domain = AbstractDomain.FiniteSet(ProcnameSet) diff --git a/infer/src/checkers/Passthrough.ml b/infer/src/checkers/Passthrough.ml index a8b002d67..a44a7647d 100644 --- a/infer/src/checkers/Passthrough.ml +++ b/infer/src/checkers/Passthrough.ml @@ -31,5 +31,5 @@ let pp fmt s = module Set = PrettyPrintable.MakePPSet(struct type nonrec t = t let compare = compare - let pp_element = pp + let pp = pp end) diff --git a/infer/src/checkers/SimpleChecker.ml b/infer/src/checkers/SimpleChecker.ml index d8dc8c797..8269bb1f2 100644 --- a/infer/src/checkers/SimpleChecker.ml +++ b/infer/src/checkers/SimpleChecker.ml @@ -50,7 +50,7 @@ module Make (Spec : Spec) : S = struct struct type t = Spec.astate let compare = Spec.compare - let pp_element _ _ = () + let pp _ _ = () end) ) diff --git a/infer/src/checkers/Sink.ml b/infer/src/checkers/Sink.ml index 7b9bce51a..32d38b60d 100644 --- a/infer/src/checkers/Sink.ml +++ b/infer/src/checkers/Sink.ml @@ -86,6 +86,6 @@ module Make (Kind : Kind) = struct module Set = PrettyPrintable.MakePPSet(struct type nonrec t = t let compare = compare - let pp_element = pp + let pp = pp end) end diff --git a/infer/src/checkers/SiofTrace.ml b/infer/src/checkers/SiofTrace.ml index 553802080..7d6beee0e 100644 --- a/infer/src/checkers/SiofTrace.ml +++ b/infer/src/checkers/SiofTrace.ml @@ -18,7 +18,7 @@ module GlobalsAccesses = PrettyPrintable.MakePPSet (struct let compare (v1, l1) (v2, l2) = (* compare by loc first to present reports in the right order *) [%compare : (Location.t * Pvar.t)] (l1, v1) (l2, v2) - let pp_element fmt (v, _) = + let pp fmt (v, _) = F.fprintf fmt "%a" Mangled.pp (Pvar.get_name v); match Pvar.get_source_file v with | Some fname -> F.fprintf fmt "%a" SourceFile.pp fname @@ -54,7 +54,7 @@ module TraceElem = struct (* type nonrec t = t [@@deriving compare]; *) type nonrec t = t let compare = compare - let pp_element = pp + let pp = pp end) end diff --git a/infer/src/checkers/Source.ml b/infer/src/checkers/Source.ml index 7652a5240..c05cb727a 100644 --- a/infer/src/checkers/Source.ml +++ b/infer/src/checkers/Source.ml @@ -99,7 +99,7 @@ module Make (Kind : Kind) = struct module Set = PrettyPrintable.MakePPSet(struct type nonrec t = t let compare = compare - let pp_element = pp + let pp = pp end) end @@ -133,7 +133,7 @@ module Dummy = struct module Set = PrettyPrintable.MakePPSet(struct type nonrec t = t let compare = compare - let pp_element = pp + let pp = pp end) let with_callsite t _ = t diff --git a/infer/src/checkers/ThreadSafetyDomain.ml b/infer/src/checkers/ThreadSafetyDomain.ml index 5fe4e89c3..9cf71f0ca 100644 --- a/infer/src/checkers/ThreadSafetyDomain.ml +++ b/infer/src/checkers/ThreadSafetyDomain.ml @@ -35,7 +35,7 @@ module TraceElem = struct module Set = PrettyPrintable.MakePPSet (struct type nonrec t = t let compare = compare - let pp_element = pp + let pp = pp end) end @@ -47,11 +47,7 @@ module LocksDomain = AbstractDomain.BooleanAnd module PathDomain = SinkTrace.Make(TraceElem) -module IntMap = PrettyPrintable.MakePPMap(struct - type t = int - let compare = Int.compare - let pp_key fmt = F.fprintf fmt "%d" - end) +module IntMap = PrettyPrintable.MakePPMap(Int) module ConditionalWritesDomain = AbstractDomain.Map (IntMap) (PathDomain) diff --git a/infer/src/checkers/accessPath.ml b/infer/src/checkers/accessPath.ml index 19c7746ab..de83de8bd 100644 --- a/infer/src/checkers/accessPath.ml +++ b/infer/src/checkers/accessPath.ml @@ -151,17 +151,13 @@ let pp fmt = function module BaseMap = PrettyPrintable.MakePPMap(struct type t = base let compare = compare_base - let pp_key = pp_base + let pp = pp_base end) module AccessMap = PrettyPrintable.MakePPMap(struct type t = access let compare = compare_access - let pp_key = pp_access + let pp = pp_access end) -module RawSet = PrettyPrintable.MakePPSet(struct - type t = Raw.t - let compare = Raw.compare - let pp_element = Raw.pp - end) +module RawSet = PrettyPrintable.MakePPSet(Raw) diff --git a/infer/src/checkers/accessPathDomains.ml b/infer/src/checkers/accessPathDomains.ml index 9d9b925b9..589021a6e 100644 --- a/infer/src/checkers/accessPathDomains.ml +++ b/infer/src/checkers/accessPathDomains.ml @@ -12,11 +12,7 @@ open! IStd module F = Format module Set = struct - module APSet = PrettyPrintable.MakePPSet (struct - type t = AccessPath.t - let compare = AccessPath.compare - let pp_element = AccessPath.pp - end) + module APSet = PrettyPrintable.MakePPSet (AccessPath) (** TODO (12086310): best-case behavior of some operations can be improved by adding "abstracted" bool recording whether an abstracted access path has been introduced *) diff --git a/infer/src/checkers/var.ml b/infer/src/checkers/var.ml index 418ec31da..8e1685db1 100644 --- a/infer/src/checkers/var.ml +++ b/infer/src/checkers/var.ml @@ -39,12 +39,12 @@ let pp fmt = function module Map = PrettyPrintable.MakePPMap(struct type nonrec t = t let compare = compare - let pp_key = pp + let pp = pp end) module Set = PrettyPrintable.MakePPCompareSet(struct type nonrec t = t let compare = compare let compare_pp = compare_alpha - let pp_element = pp + let pp = pp end) diff --git a/infer/src/unit/TraceTests.ml b/infer/src/unit/TraceTests.ml index fd3330d80..64e898ca8 100644 --- a/infer/src/unit/TraceTests.ml +++ b/infer/src/unit/TraceTests.ml @@ -43,7 +43,7 @@ module MockTraceElem = struct module Set = PrettyPrintable.MakePPSet(struct type nonrec t = t let compare = compare - let pp_element = pp + let pp = pp end) let with_callsite t _ = t