package merlin-lib
Merlin's libraries
Install
Dune Dependency
Authors
Maintainers
Sources
merlin-5.5-503.tbz
sha256=67da3b34f2fea07678267309f61da4a2c6f08298de0dc59655b8d30fd8269af1
sha512=1fb3b5180d36aa82b82a319e15b743b802b6888f0dc67645baafdb4e18dfc23a7b90064ec9bc42f7424061cf8cde7f8839178d8a8537bf4596759f3ff4891873
doc/src/merlin-lib.kernel/phase_cache.ml.html
Source file phase_cache.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
let { Logger.log } = Logger.for_section "Phase cache" module type S = sig type t type output val f : t -> output val title : string module Fingerprint : sig type input type t val make : input -> (t, string) result val equal : t -> t -> bool end with type input := t end module With_cache (Phase : S) = struct type t = { output : Phase.output; cache_was_hit : bool } type cache = { fingerprint : Phase.Fingerprint.t; output : Phase.output } let cache = ref None let apply ?(cache_disabling = None) ?(force_invalidation = false) input = let title = Phase.title in match cache_disabling with | Some reason -> log ~title "Cache is disabled: %s" reason; cache := None; let output = Phase.f input in { output; cache_was_hit = false } | None -> ( let new_fingerprint = Phase.Fingerprint.make input in match (!cache, new_fingerprint) with | None, Ok new_fingerprint -> log ~title "Cache wasn't populated\n"; let output = Phase.f input in cache := Some { fingerprint = new_fingerprint; output }; { output; cache_was_hit = false } | Some { fingerprint; output }, Ok new_fingerprint -> if (not force_invalidation) && Phase.Fingerprint.equal fingerprint new_fingerprint then ( log ~title "Cache hit"; { output; cache_was_hit = true }) else ( log ~title "Cache invalidation"; let output = Phase.f input in cache := Some { fingerprint = new_fingerprint; output }; { output; cache_was_hit = false }) | (None | Some _), Error err -> log ~title "Cache workflow is incomplete: %s" err; cache := None; let output = Phase.f input in { output; cache_was_hit = false }) end
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>