檢視原始碼 EEP-48:在 Erlang/OTP 中的實作

EEP-48:文件儲存與格式

EEP-48 定義了 Erlang/OTP 生態系統中模組文件的通用文件儲存格式。Erl_Docgen 可以從 XML 檔案產生此格式的文件,這些 XML 檔案遵循此應用程式中其他使用者指南所描述的 DTD。

在編寫也應透過 EEP-48 樣式儲存提供的文件時,必須考慮一些特殊事項。

Erlang 文件格式

在產生 EEP-48 的文件時,edoc 會使用 MIME 類型 <<"application/erlang+html">>。文件內容是代表類似 HTML 結構的 Erlang 項。

-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',[{class,unicode:unicode_binary()}],_} - 類別名稱將用於為 div 中的內容提供樣式。Erlang/OTP 使用的類別類型為:warningnotedodontquote

  • {ul,[{class,<<"types">>}],_} - 這是一個包含類型文件的列表。

  • {li,[{name,TypeName :: unicode:unicode_binary()}],_} - 具有類型規格的列表項目,該規格位於此模組 EEP-48 文件的元資料中。實作應在 types 鍵下尋找類型的 AST 表示。此屬性僅在具有類別 <<"types">> 的 ul 下有效。

  • {li,[{class,<<"type">>}],_} - 具有 Erlang 文件格式中描述的類型的列表項目。此屬性僅在具有類別 <<"types">> 的 ul 下有效。

  • {li,[{class,<<"description">>}],_} - 具有列表中先前類型描述的列表項目。此屬性僅在具有類別 <<"types">> 的 ul 下有效。

可以使用 shell_docs:validate/1 函數來驗證 Erlang 文件格式。

Erlang 文件額外元資料

Erlang/OTP 使用一些額外的元資料欄位將更多資訊嵌入到 EEP-48 文件中。

  • 模組層級上的欄位

    • otp_doc_vsn := {non_neg_integer(),non_neg_integer(),non_neg_integer()} - 描述此模組中使用的 Erlang 文件格式的版本

    • types := #{ TypeName :: unicode:unicode_binary() => TypeAST } - 包含屬於此模組之類型 AST 的對應。此對應由函數和回呼使用,以將類型內嵌到其文件中。

  • 函數和類型上的欄位

    • signature := SpecAST - 與此函數相關聯的規格 AST。它用於為文件條目呈現更具描述性的口號。

    • equiv := {Type,Name,Arity} - 目前的函數/類型與另一個函數/類型共享文件。這表示如果此函數/類型和目標函數/類型同時顯示,則只會顯示此函數/類型的原型,並且文件將使用共同的本文。

另請參閱

shell_docscode:get_doc/1