Git Product home page Git Product logo

vertx-docgen's Introduction

Docgen

Build Status

Description

Create an Asciidoc document from package Javadoc. It comes as an annotation processor that process the various package Javadoc and create a single Asciidoc file during the compilation phase.

Motivation

  • The documentation can reference the underlying API doc (Javadoc, Scaladoc, JSdoc, etc…) : when the Asciidoc content is created the {@link} are transformed to a link to the API doc
  • The documentation always point to an existing API, i.e the {@link} references validity are checked and make the compilation fails
  • Refactoring friendly, when you rename a method the corresponding {@link} are updated, allowing you easily spot the affected doc (using git diff or something)

Features

Document declaration

@Document annotations are processed, each annotated package creates a corresponding asciidoc document. The annotation can specify an optional fileName member otherwise the document file name will be generated using the annotated element.

File documents can also be processed with the docgen.source processor option.

Document modulalization

The {@link } Javadoc tag includes or link to the target doc when the target is a package. This can be used to make your documentation modular and split the various chapters of the document accross the API packages.

When the package is annotated with @Document the link renders to a relative file url, otherwise its content will be literaly included in the document.

Source inclusion

The {@link } Javadoc tag includes the referenced elements when this element is annotated with a io.vertx.docgen.Source annotation (otherwise it will just create a link). The @Source annotation can annotate a single method, a class or a package.

By default the source code is translated to the output language. This feature can be disabled with @Source (translate=false). When including source code, the closest (class, package, parent package...) @Source annotation is looked up and the value of the translate attribute is used.

When translate is set to false, it supports the inclusion of Java file (entire file) in the documentation with the following syntax:

[source, java]
----
{@link org.acme.MyClass}
----

Lang token

The $lang token is replaced by the processed language in:

  • docgen.output
  • processed text (@Source is excluded)

The \$lang escapes to $lang.

Language-based content

You can decided that some content is only applicable for a set of languages. This is doable using:

[language, java]
----
This is only for java
----

or

[language, ruby, groovy]
----
This is only for ruby and groovy.
----

If the block is only on one line the following syntax is accepted:

[language, ruby]
This is only for ruby

If the block contains a "sub-block" such as code, the ---- must be prepended by a \:

[language, java]
----

[source]
\----
System.out.println("Hello");
\----

----

Referencing program elements

The {@link } Javadoc tag creates a link to the Javadoc of a program element when the target is a type, a field or a method.

Configuration

The annotation processor can be configured via annotation processing options:

  • docgen.output : path of the file output dir, the path may contain the token $lang that will be subsituted by the current language being generated (the docgen.json name field)
  • docgen.extension : the file extension to use when file names are generated, defaults to .adoc

Example

See the nested test_proj project for Maven and Gradle examples.

Given the files:

/**
 * = The great project
 *
 * include::{@link test.proj.foofeature}[]
 *
 */
@io.vertx.docgen.Document(fileName = "index.adoc")
package test.proj;
/**
 * == The foo feature.
 *
 * The {@link test.proj.foofeature.FooApi api class}
 * The {@link test.proj.foofeature.FooApi#myMethod api method}
 * The {@link test.proj.foofeature.FooApi#myField api field}
 *
 * * item1
 * * item 2
 * * item 3
 *
 * Some code:
 *
 * [source,java]
 * ----
 * {@link test.proj.foofeature.Examples#fooExample}
 * ----
 * <1> get a Foo
 * <2> call {@link test.proj.foofeature.FooApi#myMethod api method}
 *
 * === A sub section
 *
 * {@link test.proj.foofeature.subsection}
 */
@io.vertx.docgen.Document
package test.proj.foofeature;
/**
 * A literaly included section
 */
package test.proj.foofeature.subsection;

Generate the following Asciidoc files:

= The great project

include::test.proj.foofeature.adoc[]

test.proj.adoc

== The foo feature.

The link:apidocs/test/proj/foofeature/FooApi.html[`api class`]
The link:apidocs/test/proj/foofeature/FooApi.html#myMethod-java.lang.String-int-java.util.List-java.util.Set-[`api method`]
The link:apidocs/test/proj/foofeature/FooApi.html#myField[`api field`]

* item1
* item 2
* item 3

Some code:

[source,java]
----
FooApi foo = getFoo(); // <1>
List<Boolean> list = new ArrayList<>();
Set<Long> set = new HashSet<>();
foo.myMethod("whatever", 0, list, set); // <2>
----
<1> get a Foo
<2> call link:apidocs/test/proj/foofeature/FooApi.html#myMethod-java.lang.String-int-java.util.List-java.util.Set-[`api method`]

=== A sub section

A literaly included section

test.proj.foofeature.adoc

vertx-docgen's People

Contributors

cescoffier avatar jotak avatar pmlopes avatar sczyh30 avatar slinkydeveloper avatar vietj avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.