package codept-lib

  1. Overview
  2. Docs

The Unit name is the name of a module which can be represented by a file. The unit name transforms the given file path into a Modname.t and keep the file path internally.

By this way, an t as two views:

  • as a file path (where the module is located into the file-system)
  • as a module name
type t

Type of an unit name.

val modulize : string -> t

modulize filename makes a new t which contains the given filename and modulize it: it removes the extension (if it exists), it capitalises the first letter of the filename's Filename.basename and replace any wrong characters by '_'.

For instance:

  • "foo.ml" => "Foo"
  • "Foo" => "Foo"
  • "foo'.ml" => "Foo_"
  • "lib/foo.ml" => "Foo"
  • "foo-bar.ml" => "Foo-bar"

We assert that:

# let v = Unitname.modulize "foo.ml" ;;
# assert (Stdlib.compare v Unitname.(modulize (filepath v)) = 0) ;;
val modname : t -> Modname.t
val filename : t -> string

filename v returns the filename of the given unit name. The filename is the Filename.basename of the filepath given to construct v with modulize.

val filepath : t -> string

filepath v returns the filepath of the given unit name. The file path is the one used to construct v with modulize.

val pp : t Pp.t
val pp_as_modname : t Pp.t
val pp_as_filepath : t Pp.t
val reflect : t Pp.t
val compare_as_modnames : t -> t -> int

compare_as_modnames a b compares a and b from their modname's views. For instance,

# let a = Unitname.modulize "foo/a.ml" ;;
# let b = Unitname.modulize "bar/a.ml" ;;
# Unitname.compare_as_modnames a b ;;
- : int = 0
val change_file_extension : (string -> string) -> t -> t

change_file_extension f t tries to replace the current extension of the given t (the filename view) by something else returned by f. If t has no extension, we return it unchanged. Otherwise, we call f and give to it the current extension.

NOTE: The modname view is unchanged in any cases:

# let v0 = Unitname.modulize "foo.ml" ;;
# let v1 = Unitname.change_file_extension (fun _ -> "mli") v0 ;;
# assert (Modname.compare (Unitname.modname v0) (Unitname.modname v1) = 0) ;;

However, v0 and v1 are not equal anymore.

module Map : Map.S with type key = t
module Set : Set.S with type elt = t
OCaml

Innovation. Community. Security.