From 393491918eb31fd1896c747e636965f917754b1b Mon Sep 17 00:00:00 2001 From: Ignat Beresnev Date: Fri, 8 Jul 2022 15:14:48 +0200 Subject: Revise developer guides documentation (#2523) --- docs/src/doc/docs/about/FAQ.md | 2 - docs/src/doc/docs/about/slack_channel.md | 4 - docs/src/doc/docs/community/plugins-list.md | 164 ++++++++- docs/src/doc/docs/community/slack.md | 7 + .../architecture/architecture_overview.md | 123 +++++++ .../architecture/data_model/documentables.md | 245 +++++++++++++ .../architecture/data_model/extra.md | 99 ++++++ .../architecture/data_model/page_content.md | 140 ++++++++ .../extension_points/base_extensions.md | 13 + .../extension_points/core_extensions.md | 151 ++++++++ .../architecture/extension_points/introduction.md | 163 +++++++++ docs/src/doc/docs/developer_guide/data_model.md | 103 ------ .../doc/docs/developer_guide/extension_points.md | 223 ------------ docs/src/doc/docs/developer_guide/introduction.md | 131 +------ .../plugin-development/introduction.md | 59 ++++ .../plugin-development/sample-plugin-tutorial.md | 292 ++++++++++++++++ docs/src/doc/docs/developer_guide/workflow.md | 100 ++++++ docs/src/doc/docs/dokka_colors.css | 4 +- docs/src/doc/docs/expand_navigation.js | 14 - docs/src/doc/docs/faq.md | 2 + docs/src/doc/docs/favicon.svg | 13 +- docs/src/doc/docs/images/mathjax_demo.png | Bin 0 -> 31853 bytes docs/src/doc/docs/images/mermaid_demo.png | Bin 0 -> 91709 bytes docs/src/doc/docs/index.md | 46 ++- .../user_guide/android-plugin/android-plugin.md | 8 - docs/src/doc/docs/user_guide/applying/cli.md | 158 +++++++++ docs/src/doc/docs/user_guide/applying/gradle.md | 379 +++++++++++++++++++++ docs/src/doc/docs/user_guide/applying/maven.md | 243 +++++++++++++ .../doc/docs/user_guide/base-specific/frontend.md | 109 ------ docs/src/doc/docs/user_guide/cli/usage.md | 158 --------- docs/src/doc/docs/user_guide/gradle/usage.md | 379 --------------------- docs/src/doc/docs/user_guide/maven/usage.md | 245 ------------- .../src/doc/docs/user_guide/output-formats/html.md | 112 ++++++ .../doc/docs/user_guide/plugins/android-plugin.md | 8 + .../docs/user_guide/plugins/versioning-plugin.md | 86 +++++ .../doc/docs/user_guide/versioning/versioning.md | 86 ----- docs/src/doc/mkdocs.yml | 76 +++-- 37 files changed, 2644 insertions(+), 1501 deletions(-) delete mode 100644 docs/src/doc/docs/about/FAQ.md delete mode 100644 docs/src/doc/docs/about/slack_channel.md create mode 100644 docs/src/doc/docs/community/slack.md create mode 100644 docs/src/doc/docs/developer_guide/architecture/architecture_overview.md create mode 100644 docs/src/doc/docs/developer_guide/architecture/data_model/documentables.md create mode 100644 docs/src/doc/docs/developer_guide/architecture/data_model/extra.md create mode 100644 docs/src/doc/docs/developer_guide/architecture/data_model/page_content.md create mode 100644 docs/src/doc/docs/developer_guide/architecture/extension_points/base_extensions.md create mode 100644 docs/src/doc/docs/developer_guide/architecture/extension_points/core_extensions.md create mode 100644 docs/src/doc/docs/developer_guide/architecture/extension_points/introduction.md delete mode 100644 docs/src/doc/docs/developer_guide/data_model.md delete mode 100644 docs/src/doc/docs/developer_guide/extension_points.md create mode 100644 docs/src/doc/docs/developer_guide/plugin-development/introduction.md create mode 100644 docs/src/doc/docs/developer_guide/plugin-development/sample-plugin-tutorial.md create mode 100644 docs/src/doc/docs/developer_guide/workflow.md delete mode 100644 docs/src/doc/docs/expand_navigation.js create mode 100644 docs/src/doc/docs/faq.md mode change 100644 => 100755 docs/src/doc/docs/favicon.svg create mode 100644 docs/src/doc/docs/images/mathjax_demo.png create mode 100644 docs/src/doc/docs/images/mermaid_demo.png delete mode 100644 docs/src/doc/docs/user_guide/android-plugin/android-plugin.md create mode 100644 docs/src/doc/docs/user_guide/applying/cli.md create mode 100644 docs/src/doc/docs/user_guide/applying/gradle.md create mode 100644 docs/src/doc/docs/user_guide/applying/maven.md delete mode 100644 docs/src/doc/docs/user_guide/base-specific/frontend.md delete mode 100644 docs/src/doc/docs/user_guide/cli/usage.md delete mode 100644 docs/src/doc/docs/user_guide/gradle/usage.md delete mode 100644 docs/src/doc/docs/user_guide/maven/usage.md create mode 100644 docs/src/doc/docs/user_guide/output-formats/html.md create mode 100644 docs/src/doc/docs/user_guide/plugins/android-plugin.md create mode 100644 docs/src/doc/docs/user_guide/plugins/versioning-plugin.md delete mode 100644 docs/src/doc/docs/user_guide/versioning/versioning.md (limited to 'docs') diff --git a/docs/src/doc/docs/about/FAQ.md b/docs/src/doc/docs/about/FAQ.md deleted file mode 100644 index ba4a7acf..00000000 --- a/docs/src/doc/docs/about/FAQ.md +++ /dev/null @@ -1,2 +0,0 @@ -# FAQ -If you encounter any problems, please see the [FAQ](https://github.com/Kotlin/dokka/wiki/faq). diff --git a/docs/src/doc/docs/about/slack_channel.md b/docs/src/doc/docs/about/slack_channel.md deleted file mode 100644 index 6879dc7d..00000000 --- a/docs/src/doc/docs/about/slack_channel.md +++ /dev/null @@ -1,4 +0,0 @@ -# Slack channel - -For more information or help, feel free to ask questions in the [official Kotlin Slack Channel](https://kotlinlang.slack.com) - diff --git a/docs/src/doc/docs/community/plugins-list.md b/docs/src/doc/docs/community/plugins-list.md index 4a65965e..ed8993fc 100644 --- a/docs/src/doc/docs/community/plugins-list.md +++ b/docs/src/doc/docs/community/plugins-list.md @@ -1,18 +1,160 @@ # Dokka community plugins -Here is a list of plugins created by dokka team or community. +On this page you can find `Dokka` plugins which are supported by both `Dokka` maintainers and community members. -In order to add your plugin to this list it needs to be: +If you want to add your plugin to this list, get in touch with maintainers via [Slack](../community/slack.md) +or `GitHub`. - * an open source project - sharing is caring so let others learn and improve your plugin - * present in any public artefacts repository like bintray +If you want to learn how to develop plugins for `Dokka`, see +[Plugin development](../developer_guide/plugin-development/introduction.md) section. -| Plugin name | Description | Source | -| :--------- | :--------- | :------------ | -| [Kotlin as Java](https://kotlin.github.io/dokka/1.7.0/user_guide/introduction/#plugins) | Display Kotlin code as seen from Java | [Github](https://github.com/Kotlin/dokka/tree/master/plugins/kotlin-as-java) -| [GFM](https://kotlin.github.io/dokka/1.7.0/user_guide/introduction/#plugins) | Renders documentation in a GFM format | [Github](https://github.com/Kotlin/dokka/tree/master/plugins/gfm) -| [Javadoc](https://kotlin.github.io/dokka/1.7.0/user_guide/introduction/#plugins) | Renders documentation in a Javadoc format | [Github](https://github.com/Kotlin/dokka/tree/master/plugins/javadoc) -| [Jekyll](https://kotlin.github.io/dokka/1.7.0/user_guide/introduction/#plugins) | Renders documentation in a Jekyll format | [Github](https://github.com/Kotlin/dokka/tree/master/plugins/jekyll) -| [Mermaid-HTML](https://mermaid-js.github.io/mermaid/#/) | Renders Mermaid graphs for HTML renderer. | [Github](https://github.com/glureau/dokka-mermaid) +## Output Formats +### Javadoc (Alpha) +Javadoc plugin adds a `Javadoc` output format that looks like Java's `Javadoc`, but it's for the most part +a lookalike, so you may experience problems if you try to use it with a tool that expects native +`Javadoc` documentation generated by `Java`. + +`Javadoc` plugin does not support multiplatform projects and does not have a multi-module task. + +`Javadoc` plugin is shipped with `Dokka`, so you can start using it right away with one of the following tasks: + +* `dokkaJavadoc` - builds `Javadoc` documentation for single-module projects or for a specific module. +* `dokkaJavadocCollector` - collects generated `Javadoc` documentation from submodules and assembles it together. + +`Javadoc` plugin has its own signature provider that essentially translates `Kotlin` signatures to `Java` ones. + +**This plugin is at its early stages**, so you may experience issues and encounter bugs. Feel free to +[report](https://github.com/Kotlin/dokka/issues/new/choose) any errors you see. + +[Plugin source code on GitHub](https://github.com/Kotlin/dokka/tree/master/plugins/javadoc) + +### GFM (Alpha) + +`GFM` plugins adds the ability to generate documentation in `GitHub flavoured Markdown` format. Supports both +multimodule and multiplatform projects, and is shipped together with `Dokka`, so you can start using it +right away with one of the following tasks: + +* `dokkaGfm` - generate documentation for a non multi-module project or one specific module. +* `dokkaGfmMultiModule` - generate documentation for a multi-module project, assemble it together and + generate navigation page/menu for all the modules. + +Example: + +___ + +//[dokka-debug-kts](#gfm)/[org.jetbrains.dokka.test](#gfm)/[MyClass](#gfm) + +#### MyClass + +[jvm] +class [MyClass](#gfm) + +KDoc that describes this class + +##### Constructors + +| | | +|---|---| +| [MyClass](#gfm) | [jvm]
fun [MyClass](#gfm)() | + +##### Functions + +| Name | Summary | +|------------------|---| +| [function](#gfm) | [jvm]
fun [function](#gfm)(): [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
KDoc comment on top of this function | + +##### Properties + +| Name | Summary | +|---|------------------------------------------------------------------------------------------------------------------------------------------------| +| [property](#gfm) | [jvm]
val [property](#gfm): [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)
KDoc comment for a property | + +___ + +**This plugin is at its early stages**, so you may experience issues and encounter bugs. Feel free to +[report](https://github.com/Kotlin/dokka/issues/new/choose) any errors you see. + +[Plugin source code on GitHub](https://github.com/Kotlin/dokka/tree/master/plugins/gfm) + +### Jekyll (Alpha) + +`Jekyll` plugins adds the ability to generate documentation in `Jekyll flavoured Markdown` format. Supports both +multi-module and multiplatform projects, and is shipped together with `Dokka`, so you can start using it +right away with one of the following tasks: + +* `dokkaJekyll` - generate documentation for a non multi-module project or one specific module. +* `dokkaJekyllMultiModule` - generate documentation for a multi-module project, assemble it together and + generate navigation page/menu for all the modules. + +**This plugin is at its early stages**, so you may experience issues and encounter bugs. Feel free to +[report](https://github.com/Kotlin/dokka/issues/new/choose) any errors you see. + +[Plugin source code on GitHub](https://github.com/Kotlin/dokka/tree/master/plugins/jekyll) + +## Extensions + +### Mathjax + +[MathJax](https://docs.mathjax.org/) allows you to include mathematics in your web pages. `MathJax` plugin +adds the ability to render mathematics from source code comments. + +If `MathJax` plugin encounters `@usesMathJax` `KDoc` tag, it adds `MathJax.js` (ver. 2) with `config=TeX-AMS_SVG` +to generated `HTML` pages. + +Usage example: +```kotlin +/** + * Some math \(\sqrt{3x-1}+(1+x)^2\) + * + * @usesMathJax + */ +class Foo {} +``` + +Which results in: + +![Mathjax demo](../images/mathjax_demo.png){ width="400" } + +[Plugin source code on GitHub](https://github.com/Kotlin/dokka/tree/master/plugins/mathjax) + +### Mermaid + +[Mermaid JS](https://mermaid-js.github.io/mermaid/#/) lets you create diagrams and visualizations using text and code. +`Mermaid` plugin allows rendering such diagrams and visualizations found in source code documentation. + +Usage example: +```kotlin +/** + * See the graph for more details: + * \```mermaid + * graph LR + * A[Christmas] -->|Get money| B(Go shopping) + * B --> C{Let me think} + * C -->|One| D[Laptop] + * C -->|Two| E[iPhone] + * C -->|Three| F[fa:fa-car Car] + * \``` + */ +class CompositeSubscription +``` + +Which results in: + +![Mermaid demo](../images/mermaid_demo.png){ width="700" } + +For more information and examples, see +[Html Mermaid Dokka plugin](https://github.com/glureau/dokka-mermaid) repository on GitHub. + +### Kotlin as Java + +With `Kotlin as Java` plugin applied, all `Kotlin` signatures will be rendered as `Java` signatures. + +For instance, `fun foo(bar: Bar): Baz` will be rendered as `public final Baz foo(Bar bar)`. + +`Kotlin as Java` plugin is published to maven central as a +[separate artifact](https://mvnrepository.com/artifact/org.jetbrains.dokka/kotlin-as-java-plugin): +`org.jetbrains.dokka:kotlin-as-java-plugin:1.7.0`. + +[Plugin source code on GitHub](https://github.com/Kotlin/dokka/tree/master/plugins/kotlin-as-java) diff --git a/docs/src/doc/docs/community/slack.md b/docs/src/doc/docs/community/slack.md new file mode 100644 index 00000000..290d4a18 --- /dev/null +++ b/docs/src/doc/docs/community/slack.md @@ -0,0 +1,7 @@ +# Slack channel + +`Dokka` has a dedicated `#dokka` channel in the `Kotlin Community Slack`, where you can ask questions and chat +about using, customizing or contributing to `Dokka`. + +[Follow the instructions](https://surveys.jetbrains.com/s3/kotlin-slack-sign-up) +to get an invite or [connect directly](https://kotlinlang.slack.com). diff --git a/docs/src/doc/docs/developer_guide/architecture/architecture_overview.md b/docs/src/doc/docs/developer_guide/architecture/architecture_overview.md new file mode 100644 index 00000000..fb11f32a --- /dev/null +++ b/docs/src/doc/docs/developer_guide/architecture/architecture_overview.md @@ -0,0 +1,123 @@ +# Architecture overview + +Normally, you would think that a tool like `Dokka` simply parses some programming language sources and generates +`HTML` pages for whatever it sees along the way, with little to no abstractions. That would be the simplest and +shortest way to implement an API documentation engine. + +However, it was clear that `Dokka` may need to generate documentation from various sources (not only `Kotlin`), that users +might request additional output formats (like `Markdown`), that users might need additional features like supporting +custom `KDoc` tags or rendering `mermaid.js` diagrams - all these things would require changing a lot of code inside +`Dokka` itself if all solutions were hardcoded. + +For this reason, `Dokka` was built from the ground up to be easily extensible and customizable by adding several layers +of abstractions to the data model, and by providing pluggable extension points, giving you the ability to introduce +selective changes on a single level. + +## Overview of data model + +Generating API documentation begins with `Input` source files (`.kts`, `.java`, etc) and ends with some `Output` files +(`.html`/`.md` pages, etc). However, to allow for extensibility and customization, several input and output independent +abstractions have been added to the data model. + +Below you can find the general pipeline of processing data gathered from sources and the explanation for each stage. + +```mermaid +flowchart TD + Input --> Documentables --> Pages --> Output +``` + +* `Input` - generalization of sources, by default `Kotlin`/`Java` sources, but could be virtually anything +* `Documentables` - unified data model that represents _any_ parsed sources as a tree, independent of the source + language. Examples of a `Documentable`: class, function, package, property, etc +* `Pages` - universal model that represents output pages (e.g a function/property page) and the content it's composed of + (lists, text, code blocks) that the users needs to see. Not to be confused with `.html` pages. Goes hand in hand + with so-called `Content` model. +* `Output` - specific output format like `HTML`/`Markdown`/`Javadoc`/etc. This is a mapping of pages/content model to + some human-readable and visual representation. For instance: + * `PageNode` is mapped as + * `.html` file for `HTML` format + * `.md` file for `Markdown` format + * `ContentList` is mapped as + * `
  • ` / `