package codept-lib
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=5e6631d6bcb84d149460d046c71afa4a6342aa8d9adaf2b1f45989dd33a3ac92
sha512=ed58520e2b94c6d6b01466f2de464e5bfd95efd8d9d8e41e1d95e3c3f250b20118b3c2d08492cbc86152c334730fa43d110331d090fcc98e8be7fdc7b47962ff
doc/codept-lib/Module/index.html
Module ModuleSource
Every time a module with an unknown signature is opened, it can possibly shadows all modules present in the current, or none. The Divergence module is use to store information about such divergence point, in order to be able to pinpoint to the user the exact moment where dependency computation might have gone awry.
Type-level tags
Signature with tracked origin
and _ ty = | Sig : tracked_signature -> 'any ty(*Classic module
*)| Alias : {path : Namespaced.t;(*Path.To.Target: projecting this path may create new dependencies
*)phantom : Divergence.t option;(*Track potential delayed dependencies after divergent accident:
module M = A (* Alias { name = M; path = [A] } *) open Unknownable (* <- divergence *) open M (* Alias{ phantom = Some divergence } *)In the example above,
*)Mcould be the local module.M, triggering the delayed alias dependencyA. Or it could be a submoduleUnknownable.M. Without sufficient information, codept defaults to computing an upper bound of dependencies, and therefore considers thatMis.M, and the inferred dependencies for the above code snipet is{A,Unknowable}.
} -> extended ty| Abstract : Id.t -> 'any ty(*Abstract module type may be refined during functor application, keeping track of their identity is thus important
*)| Fun : 'a ty Arg.t option * 'a ty -> 'a ty| Link : Namespaced.t -> extended ty(*Link to a compilation unit
*)| Namespace : dict -> extended ty(*Namespace are open bundle of modules
*)
Core module or alias
and signature = | Blank(*Unknown signature, used as for extern module, placeholder, …
*)| Exact of definition| Divergence of {point : Divergence.t;before : signature;after : definition;
}(*A divergent signature happens when a signature inference is disturbed by opening or including an unknowable module:
*)module A = … include Extern (* <- divergence *) module B = A (* <- which A is this: .A or Extern.A ?*)
transform to a ghost module
Create a mockup module with empty signature