Module Dumpglob
This file implements the Coq's .glob
file format, which provides information about the objects that are defined and referenced from a Coq file.
The .glob
file format is notably used by coqdoc
and coq2html
to generate links and other documentation meta-data.
Note that we consider this format a legacy one, and no stability guarantees are provided as of today, as we search to replace this format with a more structured and strongly-typed API.
However, we do provide up to date documentation about the format of .glob
files below.
The .glob
file format
.glob
files contain a header, and then a list of entries, with one line per entry.
.glob
header
The header consists of two lines:
DIGEST: %md5sum_of_file
F%modpath
where %modpath is the fully-qualified module name of the library that the .glob
file refers to. %md5sum_of_file
may be NO if -dump-glob file
was used.
.glob
entries
There are 2 kinds of .glob
entries:
- *definitions*: these entries correspond to definitions of inductives, functions, binders, notations. They are written as:
%kind %bc:%ec %secpath %name
where %kind
is one of {def,coe,subclass,canonstruc,ex,scheme,proj,inst,meth,defax,prfax,thm,prim,class,var,indrec,rec,corec,ind,variant,coind,constr,not,binder,lib,mod,modtype}
, meaning:
def
Definitioncoe
Coertionthm
Theoremsubclass
Sub Classcanonstruc
Canonical Declarationex
Examplescheme
Schemeclass
Class declarationproj
Projection from a structureinst
Instancemeth
Class Methoddefax
Definitional assumptionprfax
Logical assumptionprim
Primitivevar
Variable referenceindrec
Inductiverec
Inductive (variant)corec
Coinductiveind
Recordvariant
Record (variant)coind
Coinductive Recordconstr
Constructornot
Notationbinder
Binderlib
Requiremod
Module Reference (Import, Module start / end)modtype
Module Type
%bc
and %ec
are respectively the start and end byte locations in the file (0-indexed) %secpath
the section path (or <>
if no section path) and %name
the name of the defined object, or also <>
in where no name applies.
Section paths are ...
- In the case of notations,
%name
is encoded as:entry:scope:notation_key
where_
is used to replace spaces in the notation key,%entry
is left empty if the notation entry isconstr
, and similarly%scope
is empty if the corresponding notation has no associated scope.
- For binding variables,
:number
is added to distinguish uniquely different binding variables of the same name in a file.
- *references*: which identify the object a particular document piece of text points to; their format is:
R%bc:%ec %filepath %secpath %name %kind
where %bc
, %ec
, %name
, and %kind
are as the above; %filepath
contains the file module path the object that the references lives in, whereas %name
may contain non-file non-directory module names.
val start_dump_glob : vfile:string -> vofile:string -> unit
val end_dump_glob : unit -> unit
val dump : unit -> bool
val push_output : glob_output -> unit
push_output o
temporarily overrides the output location too
. The original output can be restored usingpop_output
val with_glob_output : glob_output -> (unit -> 'a) -> unit -> 'a
val add_glob : ?loc:Loc.t -> Names.GlobRef.t -> unit
val add_glob_kn : ?loc:Loc.t -> Names.KerName.t -> unit
val dump_definition : Names.lident -> bool -> string -> unit
val dump_moddef : ?loc:Loc.t -> Names.ModPath.t -> string -> unit
val dump_modref : ?loc:Loc.t -> Names.ModPath.t -> string -> unit
val dump_reference : ?loc:Loc.t -> string -> string -> string -> unit
val dump_secvar : ?loc:Loc.t -> Names.Id.t -> unit
val dump_libref : ?loc:Loc.t -> Names.DirPath.t -> string -> unit
val dump_notation_location : (int * int) list -> Constrexpr.notation -> (Notation.notation_location * Notation_term.scope_name option) -> unit
val dump_binding : ?loc:Loc.t -> string -> unit
val dump_notation : Constrexpr.notation CAst.t -> Notation_term.scope_name option -> bool -> unit
val dump_constraint : Names.lname -> bool -> string -> unit
val dump_string : string -> unit
val type_of_global_ref : Names.GlobRef.t -> string
val add_constant_kind : Names.Constant.t -> Decls.logical_kind -> unit
Registration of constant information
val constant_kind : Names.Constant.t -> Decls.logical_kind