155 lines
5.7 KiB
TeX
155 lines
5.7 KiB
TeX
%% SCRAP: architecture/build-and-tooling/DOCUMENTATION_README
|
|
%% SOURCE: docs/working/architecture/build-and-tooling/DOCUMENTATION_README.adoc
|
|
%% STATUS: CURRENT
|
|
%% FITS: dev-guide/ch-docs
|
|
%% EDITORIAL: lifted — prose rewritten to press voice
|
|
|
|
\section{The Documentation System}
|
|
|
|
StarForth generates its API documentation directly from source, driven by
|
|
Doxygen and rendered into several formats. A single command builds everything:
|
|
|
|
\begin{lstlisting}[language=bash]
|
|
make docs
|
|
\end{lstlisting}
|
|
|
|
The build emits AsciiDoc API documentation under \texttt{docs/src/appendix/},
|
|
one flat file per source module. These files are produced on demand by
|
|
\texttt{./scripts/generate-doxygen-appendix.sh} and rebuilt periodically by the
|
|
Jenkins pipeline. To inspect the result, run the generator and read the index:
|
|
|
|
\begin{lstlisting}[language=bash]
|
|
./scripts/generate-doxygen-appendix.sh
|
|
cat docs/src/appendix/index.adoc
|
|
\end{lstlisting}
|
|
|
|
\subsection{Installation Requirements}
|
|
|
|
Core functionality requires Doxygen and Graphviz. On the major distributions:
|
|
|
|
\begin{lstlisting}[language=bash]
|
|
sudo apt-get install doxygen graphviz # Ubuntu/Debian
|
|
brew install doxygen graphviz # macOS
|
|
sudo dnf install doxygen graphviz # Fedora/RHEL
|
|
\end{lstlisting}
|
|
|
|
PDF output additionally requires a TeX Live installation
|
|
(\texttt{texlive-latex-base} and \texttt{texlive-latex-extra} on Debian, or
|
|
MacTeX/BasicTeX on macOS). AsciiDoc and Markdown conversion requires Pandoc,
|
|
with Asciidoctor optional for HTML rendering. Verify the toolchain before
|
|
building --- Doxygen should report version 1.9.0 or later:
|
|
|
|
\begin{lstlisting}[language=bash]
|
|
doxygen --version
|
|
dot -V
|
|
pandoc --version # optional
|
|
pdflatex --version # optional
|
|
\end{lstlisting}
|
|
|
|
\subsection{Documentation Targets}
|
|
|
|
\begin{tabular}{lll}
|
|
\toprule
|
|
Target & Description & Requirements \\
|
|
\midrule
|
|
\texttt{make docs} & Generate all formats & doxygen, graphviz (+ optional) \\
|
|
\texttt{make docs-html} & HTML only (fast) & doxygen, graphviz \\
|
|
\texttt{make docs-pdf} & PDF only & doxygen, graphviz, pdflatex \\
|
|
\texttt{make docs-open} & Generate HTML and open browser & doxygen, graphviz \\
|
|
\texttt{make docs-clean} & Remove generated docs & none \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
|
|
\subsection{Documenting Code}
|
|
|
|
Documentation lives beside the code it describes. The workflow is short: read
|
|
the style guide, copy the template at \texttt{examples/doxygen\_example.h}, then
|
|
annotate. A typical function comment carries a brief, a detailed body,
|
|
parameters, contracts, and an example:
|
|
|
|
\begin{lstlisting}[language=C]
|
|
/**
|
|
* @brief Push value onto data stack
|
|
*
|
|
* @details
|
|
* Adds a value to the top of the data stack. Stack overflow
|
|
* is checked and vm->error is set if stack is full.
|
|
*
|
|
* @param vm Pointer to VM instance
|
|
* @param value Value to push
|
|
*
|
|
* @pre vm must be initialized
|
|
* @pre vm->dsp < STACK_SIZE-1
|
|
* @post vm->dsp incremented by 1
|
|
* @post On error: vm->error is set
|
|
*
|
|
* @note This is a hot-path function - optimized for speed
|
|
* @warning Always check vm->error after calling
|
|
*
|
|
* @see vm_pop()
|
|
*/
|
|
void vm_push(VM *vm, cell_t value);
|
|
\end{lstlisting}
|
|
|
|
After annotating, rebuild and clear any warnings:
|
|
|
|
\begin{lstlisting}[language=bash]
|
|
make docs-html
|
|
cat docs/src/appendix/doxygen_warnings.log
|
|
\end{lstlisting}
|
|
|
|
\subsection{Coverage Priorities}
|
|
|
|
The target is 100\% coverage of the public API headers. Documentation effort is
|
|
tiered by audience:
|
|
|
|
\begin{itemize}
|
|
\item \textbf{High priority} --- user-facing API: \texttt{include/vm.h},
|
|
\texttt{include/word\_registry.h}, \texttt{include/log.h},
|
|
\texttt{include/io.h}.
|
|
\item \textbf{Medium priority} --- developer API: word implementation headers
|
|
under \texttt{src/word\_source/include/}, \texttt{include/profiler.h},
|
|
\texttt{include/vm\_debug.h}.
|
|
\item \textbf{Low priority} --- internal implementation files and test
|
|
infrastructure headers.
|
|
\end{itemize}
|
|
|
|
%% TODO(bob): current coverage percentage is unverified in source ("TBD"). Run `make docs` and record the real figure.
|
|
|
|
\subsection{Continuous Integration}
|
|
|
|
The documentation build is CI-friendly. A GitHub Actions job installs Doxygen
|
|
and Graphviz, runs \texttt{make docs-html}, fails the build if
|
|
\texttt{doxygen\_warnings.log} is non-empty, and deploys the generated HTML to
|
|
GitHub Pages on the master branch.
|
|
|
|
\subsection{Output Formats}
|
|
|
|
Each format serves a distinct audience. HTML is best for interactive browsing
|
|
and search; PDF for printing and offline reference; AsciiDoc for downstream
|
|
conversion; Markdown for GitHub and wikis; and man pages for command-line
|
|
reference, installable into the system man path.
|
|
|
|
\subsection{Troubleshooting}
|
|
|
|
The common failures are missing tools. A \texttt{command not found} for
|
|
\texttt{doxygen}, \texttt{dot}, or \texttt{pdflatex} means the corresponding
|
|
package is absent --- install it, or fall back to \texttt{make docs-html} since
|
|
PDF and Pandoc-based outputs are optional. Missing graphs indicate Graphviz is
|
|
not installed. Warnings about undocumented functions are resolved by annotating
|
|
the offending code per the style guide. ``No such file or directory'' when
|
|
opening docs means they have not been generated yet.
|
|
|
|
\subsection{Customization}
|
|
|
|
Edit \texttt{Doxyfile} to adjust the project name and version
|
|
(\texttt{PROJECT\_NAME}, \texttt{PROJECT\_NUMBER}), input file set
|
|
(\texttt{INPUT}, \texttt{FILE\_PATTERNS}), output formats, and diagram options
|
|
(\texttt{CALL\_GRAPH}, \texttt{CALLER\_GRAPH}). Custom Markdown pages are added
|
|
by appending them to \texttt{INPUT}. HTML appearance is themed through
|
|
\texttt{HTML\_EXTRA\_STYLESHEET} and \texttt{HTML\_COLORSTYLE}.
|
|
|
|
External projects can link against StarForth documentation by referencing the
|
|
generated tag file \texttt{docs/src/appendix/starforth.tag} in their own
|
|
Doxyfile via \texttt{TAGFILES}.
|