Inventory Generation
The inventory files that get loaded into InterLinks should be automatically created by a project's documentation generator.
- The Sphinx documentation generator used by most Python packages automatically creates an
objects.invinventory file in the root of every HTML build. - For Julia projects that build their documentation with
Documenter≥ v1.3, anobjects.invinventory file in the same format is automatically created in thedocs/build/folder. DocumenterInventoryWritingBackport.jlbackports the automatic inventory writing to older versions ofDocumenter(≥ v0.25). This package simply needs to be loaded in a project'sdocs/make.jlfile.- Any package loading
DocumenterInterLinksindocs/make.jlalso gets theDocumenterInventoryWritingBackportautomatically. This is an experimental feature that may be removed in any future version.
The inventory file should be deployed together with the rest of the documentation, so that it is accessible to other projects. When a project does not use a documentation generator that writes an inventory file, it may be possible to maintain an inventory by hand. See also the Wiki for a collection of inventory files for Julia and other projects.
For a Documenter-based project, the automatic inventory contains:
- An entry for every docstring included in the documentation. These use the ad-hoc
jldomain and arolethat depends on the object. - An entry for every section heading. To ensure compatibility with Sphinx, these entries use the
stddomain, thelabelrole, a slugified version of the heading (or the explicit header@id) as aname, and the full heading (stripped of formatting, but including spaces) as thedispname. - An entry for every page in the documentation. These use the
stddomain and thedocrole. The name is the path (with Unix-style forward-slash path separators) of the.mdfile from which the page was generated, without the.mdextension. This should correspond to the relative URI of the resulting page, excluding a final slash or an.htmlextension.
The Julia Domain
The inventory for a Documenter-based documentation includes entries for docstrings using an ad-hoc jl domain. The role for each entry matches how Documenter identifies the underlying object with Documenter.doccat. You will find this identification as part of how the docstring shows in the documentation; for example, note the "— Type" in the header of DocumenterInterLinks.InterLinks. The role that will be written to the inventory is simply the lowercase string of this identification. Currently, Documenter uses the following:
- "Macro" (role
macro): for macros. For example,":jl:macro:`Base.@inbounds`"forBase.@inbounds. - "Keyword" (role
keyword): for Julia keywords (used in the documentation of the Julia language itself, only). For example,":jl:keyword:`if`"for theifkeyword. - "Function" (role
function): for functions. For example,":jl:function:`Statistics.mean`"forStatistics.mean. - "Method" (role
method): for methods of functions. This is used when there is a docstring for a specific tuple of argument types. For example,":jl:method:`Base.:*-Tuple{AbstractMatrix, AbstractMatrix}`"for the*operator of two matrices. - "Type" (role
type): For types, both structs and abstract types. For example,":jl:type:`Base.AbstractMatrix`"forAbstractMatrix. - "Module" (role
module): For modules. For example,":jl:module:`LinearAlgebra.BLAS`"forLinearAlgebra.BLAS. - "Constant" (role
constant): For documented data / constants inside a module. For example,":jl:constant:`Base.VERSION`"for Julia'sVERSIONconstant.
As discussed in Syntax, the domain and roles are for disambiguation only. In practice, the above example references might be written as
* [`Base.@inbounds`](@extref)
* [the `if` keyword](@extref Julia `if`)
* [`Statistics.mean`](@extref)
* [`*` operator of two matrices](@extref `Base.:*-Tuple{AbstractMatrix, AbstractMatrix}`)
* [`LinearAlgebra.BLAS`](@extref)
* [Julia's `VERSION` constant](@extref `Base.VERSION`)These render as:
Leaving out the project name Julia in all but the second item is recommended only if Julia is the first project in the InterLinks object.