Reads a Markdown changelog as a list of sections keyed by heading.
Any ## heading starts a section. Version headings are matched
leniently: ## 1.2.0, ## v1.2.0, ## [1.2.0], and ## 1.2.0 - 2026-01-01
all name version 1.2.0. The unreleased section is any heading that
contains "unreleased" case-insensitively.
Summary
Functions
Parses changelog text into sections.
The section for version, if any.
Sections of the changelog at path, or [] if absent.
The unreleased section, if any.
Types
Functions
Parses changelog text into sections.
@spec section_for(Presubmit.Tree.t(), String.t(), String.t()) :: section() | nil
The section for version, if any.
@spec sections(Presubmit.Tree.t(), String.t()) :: [section()]
Sections of the changelog at path, or [] if absent.
@spec unreleased(Presubmit.Tree.t(), String.t()) :: section() | nil
The unreleased section, if any.