hoa/kitab
最新稳定版本:0.12
Composer 安装命令:
composer require hoa/kitab
包简介
Kitab is the ideal companion for Documentation-Driven Quality: Render and Test your documentation.
README 文档
README
Kitab is the ideal companion for Documentation-Driven Quality for PHP programs.
The goal of Kitab is twofold, render and test the documentation:
-
Generate a quality and searchable documentation based on your code. The documentation inside your code is compiled into static HTML files with a powerful static search engine,
-
Test the documentation itself. Indeed, a documentation contains examples, and these examples are compiled into test suites that are run directly to ensure the examples are still up-to-date and working.
Kitab (كتاب) means “book” in Arabic. It should pronounced /kitaːb/.
Static documentation
Kitab is able to compile the documentation inside your code into static HTML files. A carefully crafted design is provided to ensure a great look for your documentation. This is possible to customize the logo, the project name, etc.
A static search engine is compiled specifically for your documentation. It contains all the modern features we can expect from a search engine, like tokenizing, stemming, stop word filtering, term frequency-inverse document frequency (TF-ID), inverted index etc. The search engine database is pre-computed and optimized to load as fast as possible.
The more your documentation provides details and smart vocabulary, the more the search engine will be able to provide relevant results.
The following command line compiles the documentation from your code
in src into HTML files stored in doc:
$ ./bin/kitab compile --open --with-composer --output-directory doc src
The --with-composer option asks Kitab to use Composer for PSR-4
mapping definitions. This is useful to map README.md files to
namespace directories, more below. The --open option opens the
documentation in your default browser as soon as it is generated
successfully.
DocTest
Documentation test suites, aka DocTest, are generated based on the examples present in your documentation. Examples are compiled into test suites and executed on-the-fly. A cache is generated to avoid to re-compile examples into test suites each time.
For instance, the following example will succeed:
/** * Classical sum of two integers. * * # Examples * * ```php * $x = 1; * $y = 2; * * assert(3 === sum($x + $y)); * ``` */ function sum(int $x, int $y): int { return $x + $y; }
The following command line generates and executes the documentation
test suites from the src directory:
$ ./bin/kitab test src
Behind the scene, Kitab uses the atoum test framework.
Dependencies
Kitab requires PHP and NodeJS to be installed: PHP because this is a PHP program, and NodeJS to pre-compile the static search engine (which is written in Elm).
Standards and formats
Kitab expects documentation in your PHP code to be written in CommonMark (a standard variant of Markdown). It can be mixed with HTML.
Each block of documentation can declare sections, and any kind of CommonMark elements, like:
/** * This is a block of documentation, attached to a PHP class. * * # Examples * * An example illustrates how to use the documented entity, here the * class `C`. * * ```php * $c = new C(); * ``` */ class C { }
There are only 2 special section names: Examples, and Exceptions. Use them to introduce one or more examples, and exceptions explanations. This is a common standard used by many other tools.
Any kind of entities can be documented: Classes, interfaces, traits, class attributes, constants, methods, and functions.
Namespaces cannot be documented directly from the code, because of the
way they are declared (entities are declared inside a namespace; the
namespace is not declared as is). However, they can be documented
through special files, named README.md. If your code
follows the PSR-4 specification, then run
Kitab with the --with-composer option to specify the location of the
composer.json file of your project in order to allow Kitab to
automatically find PSR-4 mappings. These mappings are necessary to
transform a namespace into a path to a directory. For each directory
representing a namespace, if a README.md file exists, then it will
be used as the documentation of this particular namespace. For
instance, Kitab\ maps to src/, so the documentation for
the Kitab\Compiler namespace is
expected to be find in the src/Compiler/README.md file, that
simple. This is pretty straightforward at usage.
Entity and namespace documentations are inserted at the top of their respective documentation page. This is the introduction. The rest of the page contains information about the entity or the namespace.
Block of codes
Documentation can contain block of codes. This is possible to specify the type of the block with this standard notation:
```type
code
```
where type can be php, http, sh, html, css etc.
The type has 2 impacts:
- It specifies the syntax highlighting when rendering the documentation in HTML,
- It is an identifier for a potential code block handler. A code block handler is responsible to compile a code block content into a valid test.
Indeed, all code blocks inside the Examples and Exceptions Sections
can be compiled into test suites with the ./bin/kitab test
command. For instance, with the php code block type, one can specify
the expectation of the test case:
phpindicates the test case must be a success,php,ignoreindicates the test case must be skiped (only rendered, not tested),php,must_throwindicates the test case must throw an exception of any kind,php,must_throw(E)indicates the test case must throw an exception of kindE.
Consequently, the following example will be a success:
/** * Generate a runtime exception. * * # Examples * * ```php,must_throw(RuntimeException) * panic('Hello World'); * ``` */ function panic(string $message): RuntimeException { throw new RuntimeException($message); }
Extensible
It is possible to write specific code block handlers. It means that
you can write extensions to Kitab to compile your documentation into
specific tests. To learn more, check the
Kitab\Compiler\Target\DocTest\CodeBlockHandler\Definition interface
and implementations.
Configurations
It is possible to configure Kitab with external PHP files. The file names are free, but we recommend the following:
.kitab.target.html.phpto configure the compilation of the documentation to HTML,.kitab.target.doctest.phpto configure the test of the documentation.
Both files must respectively return an instance of the
Kitab\Compiler\Target\Html\Configuration and
Kitab\Compiler\Target\DocTest\Configuration classes.
The following example illustrates a common .kitab.target.html.php
file:
$configuration = new Kitab\Compiler\Target\Html\Configuration(); $configuration->defaultNamespace = 'Kitab'; $configuration->logoURL = 'https://example.org/logo.png'; $configuration->projectName = 'Kitab'; $configuration->composerFile = __DIR__ . '/composer.json'; return $configuration;
The following example illustrates a common .kitab.target.doctest.php
file:
$configuration = new Kitab\Compiler\Target\DocTest\Configuration(); $configuration->autoloaderFile = __DIR__ . '/vendor/autoload.php'; $configuration->concurrentProcesses = 4; return $configuration;
Both commands kitab compile and kitab test accept an option named
--configuration-file to use a particular configuration file for the
defaults, e.g.:
$ ./bin/kitab compile --configuration-file .kitab.target.html.php --output-directory doc src
hoa/kitab 适用场景与选型建议
hoa/kitab 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 2.36k 次下载、GitHub Stars 达 79, 最近一次更新时间为 2017 年 07 月 05 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「documentation」 「library」 「search」 「test」 「generate」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 hoa/kitab 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 hoa/kitab 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 hoa/kitab 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Bookdown.io With Bootswatch Styles And Prism Syntax Highlighting
A Laravel package to retrieve data from Google Search Console
Indexed Search Autocomplete - Extends the TYPO3 Core Extension Indexed_Search searchform with an autocomplete feature.
Laravel package that generates RESTful API documentation in Markdown based on PHPDoc.
Abstraction Layer to index and search entities
Laravel API documentation generating tool
统计信息
- 总下载量: 2.36k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 79
- 点击次数: 23
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: BSD-3-Clause
- 更新时间: 2017-07-05