documentation
A documentation generation system that's
beautiful by default, flexible across formats and styles, and
powerful enough to support JSDoc's advanced syntax.
ES5 and ES6 support of JavaScript, with support for other transpilers a possibility
Using espree, we have support for a wide range of ES6 features.
Support for C++
You can use the --polyglot
mode of documentationjs to document native node.js
modules in JSDoc within the C++ code that implements the feature.
Support for following dependency trees
Using module-deps, documentation
can
crawl require()
graphs - pointing it to your app's main
file will find all
referenced files and include all of their documentation.
GitHub Integration
The --github
option automatically permalinks documentation to the exact
sections of code it refers to in a GitHub repository.
Gulp integration
The gulp-documentation project
lets you run documentation
as a Gulp build task.
Documentation
-
Getting_Started: start here
-
Usage: how to use documentation.js
-
Recipes: tricks for writing effective JSDoc docs
-
Node API: documentation.js's self-generated documentation
-
FAQ
-
Theming HTML: tips for theming documentation output in HTML
-
See also: a list of projects similar to documentation.js
User Guide
Globally install documentation
using the npm package manager:
$ npm install -g documentation
This installs a command called documentation
in your path, that you can
point at JSDoc-annotated source code to generate
human-readable documentation. First run documentation
with the -h
option for help:
$ documentation -h
Usage: documentation <command> [options]
Options:
-f, --format output format, of [json, md, html] [default: "json"]
--lint check output for common style and uniformity mistakes
-t, --theme specify a theme: this must be a valid theme module
-p, --private generate documentation tagged as private
--name project name. by default, inferred from package.json
--version project version. by default, inferred from package.json
--shallow shallow mode turns off dependency resolution, only processing
the specified files (or the main script specified in
package.json) [default: false]
--polyglot polyglot mode turns off dependency resolution and enables
multi-language support. use this to document c++
-g, --github infer links to github in documentation
-o, --output output location. omit for stdout, otherwise is a filename for
single-file outputs and a directory name for multi-file
outputs like html [default: "stdout"]
-c, --config configuration file. an array defining explicit sort order
-h, --help Show help
Examples:
documentation foo.js parse documentation in a given file
We have plenty of
issues that we'd
love help with.
- Robust and complete
JSDoc
support, including typedefs. - Strong support for HTML and Markdown output
- Documentation coverage, statistics, and validation
documentation is an OPEN Open Source Project. This means that:
Individuals making significant and valuable contributions are given
commit-access to the project to contribute as they see fit. This
project is more like an open wiki than a standard guarded open source project.
3.0.0
The largest change to documentation.js so far.
Dropping streams
This a major refactor of the documentation.js interface with a focus on
simplifying the system. Up until this point, documentation.js was built around
node.js streams, which are low-level
representations of asynchronous series of data. While this abstraction was
appropriate for the input and github streams, which are asynchronous, the
majority of documentation.js's internals are simple and synchronous functions
for which basic functional composition makes more sense than stream
semantics.
Documentation 3.0.0 uses simple functional composition for operations like
parmameter inference, rather than streams.
Stronger support for ES6, ES7, and Flow
We've switched to Babel as our source code parser,
which means that we have much broader support of new JavaScript features,
including import/export syntax and new features in ES6.
Babel also parses Flow type annotations,
and new inference code means that we can infer
- Parameter names & types
- Return types
Without any explicit JSDoc tags. This means that for many simple functions,
we can generate great documentation with less writing.
Stronger module support
Documentation.js now has much better inference for membership and names of symbols
exported via exports
or module.exports
.
Support for nested symbols
The parent/child relationship between symbols is now fully hierarchical, and
symbols can be nested to any depth. For instance:
/**
* A global Parent class.
*/
var Parent = function () {};
/**
* A Child class.
*/
Parent.Child = function () {};
/**
* A Grandchild class.
*/
Parent.Child.Grandchild = function () {};
In addition, filtering by access is now applied to the entire hierarchy: if you
mark a class as @private
, neither it nor its children will be included in the
output by default, regardless of the access specifiers of the children.
mdast-based Markdown output
We've switched from templating Markdown output with Handlebars.js
to generating an abstract syntax tree
of desired output and stringifying it with mdast.
This lets documentation.js output complex Markdown without having to worry
about escaping and properly formatting certain elements.
Test coverage 100%
documentation.js returns to 100% test coverage, so every single line
of code is covered by our large library of text fixtures and specific tests.
--lint mode
Specifying the --lint
flag makes documentation.js check for non-standard
types, like String
, or missing namespaces. If the encountered files have
any problems, it pretty-prints helpful debug messages and exits with status 1,
and otherwise exits with no output and status 0.
Breaking changes
- The
--version
flag is now --project-version
. --version
now outputs
documentation.js's version