package merlin-lib
Merlin's libraries
Install
Dune Dependency
Authors
Maintainers
Sources
merlin-4.17.1-501.tbz
sha256=376707aa871f09e9639456d3fbe4b89a21c9ad75c774e94cbbbe67f842b0a500
sha512=a11ea4b8e3520b3ee41ae8198cda34b2816b8dfcdcb99350ef29689a7d62bb66d17ffa075c551aa56d521120b55e6db14a106a31f7b3970ed2aa07e1db3c9b88
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)"
>