Module Melange_compiler_libs.Docstrings

Documentation comments

Warning: this module is unstable and part of compiler-libs.

let init: unit => unit;

(Re)Initialise all docstring state

let warn_bad_docstrings: unit => unit;

Emit warnings for unattached and ambiguous docstrings

Docstrings

type docstring;

Documentation comments

let docstring: string => Location.t => docstring;

Create a docstring

let register: docstring => unit;

Register a docstring

let docstring_body: docstring => string;

Get the text of a docstring

let docstring_loc: docstring => Location.t;

Get the location of a docstring

Set functions

These functions are used by the lexer to associate docstrings to the locations of tokens.

let set_pre_docstrings: Stdlib.Lexing.position => list(docstring) => unit;

Docstrings immediately preceding a token

let set_post_docstrings: Stdlib.Lexing.position => list(docstring) => unit;

Docstrings immediately following a token

let set_floating_docstrings: Stdlib.Lexing.position => list(docstring) => unit;

Docstrings not immediately adjacent to a token

let set_pre_extra_docstrings: Stdlib.Lexing.position => list(docstring) => unit;

Docstrings immediately following the token which precedes this one

let set_post_extra_docstrings: Stdlib.Lexing.position => list(docstring) => unit;

Docstrings immediately preceding the token which follows this one

Items

The docs type represents documentation attached to an item.

type docs = {
  1. docs_pre: option(docstring),
  2. docs_post: option(docstring),
};
let empty_docs: docs;
let docs_attr: docstring => Parsetree.attribute;

Convert item documentation to attributes and add them to an attribute list

let symbol_docs: unit => docs;

Fetch the item documentation for the current symbol. This also marks this documentation (for ambiguity warnings).

let symbol_docs_lazy: unit => Stdlib.Lazy.t(docs);
let rhs_docs: int => int => docs;

Fetch the item documentation for the symbols between two positions. This also marks this documentation (for ambiguity warnings).

let rhs_docs_lazy: int => int => Stdlib.Lazy.t(docs);
let mark_symbol_docs: unit => unit;

Mark the item documentation for the current symbol (for ambiguity warnings).

let mark_rhs_docs: int => int => unit;

Mark as associated the item documentation for the symbols between two positions (for ambiguity warnings)

Fields and constructors

The info type represents documentation attached to a field or constructor.

type info = option(docstring);
let empty_info: info;
let info_attr: docstring => Parsetree.attribute;

Convert field info to attributes and add them to an attribute list

let symbol_info: unit => info;

Fetch the field info for the current symbol.

let rhs_info: int => info;

Fetch the field info following the symbol at a given position.

Unattached comments

The text type represents documentation which is not attached to anything.

type text = list(docstring);
let empty_text: text;
let empty_text_lazy: Stdlib.Lazy.t(text);
let text_attr: docstring => Parsetree.attribute;

Convert text to attributes and add them to an attribute list

let symbol_text: unit => text;

Fetch the text preceding the current symbol.

let symbol_text_lazy: unit => Stdlib.Lazy.t(text);
let rhs_text: int => text;

Fetch the text preceding the symbol at the given position.

let rhs_text_lazy: int => Stdlib.Lazy.t(text);

Extra text

There may be additional text attached to the delimiters of a block (e.g. struct and end). This is fetched by the following functions, which are applied to the contents of the block rather than the delimiters.

let symbol_pre_extra_text: unit => text;

Fetch additional text preceding the current symbol

let symbol_post_extra_text: unit => text;

Fetch additional text following the current symbol

let rhs_pre_extra_text: int => text;

Fetch additional text preceding the symbol at the given position

let rhs_post_extra_text: int => text;

Fetch additional text following the symbol at the given position

let rhs_post_text: int => text;

Fetch text following the symbol at the given position

module WithMenhir: { ... };