9  EEP-48: Erlang/OTP 中的实现

9 EEP-48: Erlang/OTP 中的实现

EEP-48 定义了 Erlang/OTP 生态系统中模块文档的通用文档存储格式。Erl_Docgen 可以根据此应用程序中其他用户指南中描述的 DTD 从 XML 文件生成此格式的文档。

在编写也应通过 EEP-48 样式存储提供的文档时,需要考虑一些特殊情况。

  • #PCDATA<name> 标签中必须可解析,以便确定函数的元数。
  • 不允许将 <name> 标签与 #PCDATA 和属性混合使用。
  • 所有 <name> 标签在 <func> 中必须具有 since 属性。
  • 所有回调函数文档都必须以 Module 前缀开头。

为 EEP-48 生成文档时,Erl_Docgen 使用格式 MIME 类型 <<"application/erlang+html">>。文档内容是一个 Erlang 项,表示 HTML 类结构。

-type chunk_elements() :: [chunk_element()].
-type chunk_element() :: {chunk_element_type(),chunk_element_attrs(),
                          chunk_elements()} | unicode:unicode_binary().
-type chunk_element_attrs() :: [chunk_element_attr()].
-type chunk_element_attr() :: {atom(),unicode:unicode_binary()}.
-type chunk_element_type() :: chunk_element_inline_type() | chunk_element_block_type().
-type chunk_element_inline_type() :: a | code | strong | b | em | i.
-type chunk_element_block_type() :: p | 'div' | br | pre | ul |
                                    ol | li | dl | dt | dd |
                                    h1 | h2 | h3 | h4 | h5 | h6.

不同的元素类型在渲染时遵循其 HTML 含义。以下是一些关于如何允许生成块元素的通用规则。

  • 内联和 pre 元素不允许包含块元素。
  • p 元素不允许嵌套。

某些元素上的属性具有特殊含义。

类名将用于为 div 中的内容提供样式。Erlang/OTP 使用的类类型为:warningnotedodontquote
这是一个包含类型文档的列表。
一个列表项,其中包含位于此模块的 EEP-48 文档元数据中的类型规范。实现应该在 types 键下查找类型的 AST 表示。此属性仅在类为 <<"types">> 的 ul 下有效。
一个列表项,其中包含 Erlang 文档格式中描述的类型。此属性仅在类为 <<"types">> 的 ul 下有效。
一个列表项,其中包含列表中前一个类型的描述。此属性仅在类为 <<"types">> 的 ul 下有效。

可以使用 shell_docs:validate/1 函数对 Erlang 文档格式进行验证。

Erlang/OTP 使用一些额外的元数据字段将更多信息嵌入到 EEP-48 文档中。

  • 模块级别的字段
    描述此模块中使用的 Erlang 文档格式的版本
    一个映射,包含构成此模块一部分的类型的 AST。此映射用于函数和回调,将类型内联渲染到其文档中。
  • 函数和类型的字段
    与该函数关联的 spec AST。它用于渲染文档条目更具描述性的口号。
    当前函数/类型与另一个函数/类型共享文档。这意味着,如果要同时显示此函数/类型和目标函数/类型,则应仅显示此函数/类型的原型,而文档将使用一个通用的文本主体。

shell_docs(3), code:get_doc(3)