freshdoc.cr

Executable documentation for Crystal shards: examples that really run, doc mismatch fails the build

freshdoc

Исполняемая документация для Crystal-шардов: примеры — это обычные Crystal-файлы, которые реально запускаются при генерации доков. Фактические результаты выполнения попадают в Markdown/JSON, а расхождение с ожиданием валит сборку — доки работают как тесты (гибрид Rust doc-tests и Storybook).

Формат

1. В исходнике — одна строка (@doc последней строкой doc-комментария перед def/class/module):

# Приветствует пользователя по имени.
#
# @doc demo_lib/greet
def self.greet(name : String) : String

2. Примеры — Crystal-файлы в docs/examples/<id>/<case>.cr (один файл = один кейс):

# @title Базовое приветствие
# @tags базовый
# @params name=Мир

require "../../src/demo_lib"

DemoLib.greet("Мир")
# => "Привет, Мир!"
  • шапка-комментарий до первого кода: @title, @tags, @params k=v, @kind text|stdout|frames, @frame_delay 80ms
  • последнее выражение — документируемый вызов
  • # => <inspect> — ассерт: не сошлось → статус fail, ненулевой exit code
  • без # => в доку пишется фактический результат выполнения
  • @kind frames: кейс вызывает Freshdoc.frame(строку) — кадры сохраняются в IR (основа для будущих гифок/анимаций)

Использование

shards build freshdoc     # или: crystal build bin/freshdoc.cr -o bin/freshdoc
bin/freshdoc build        # запуск + docs/freshdoc.md + docs/freshdoc.json
bin/freshdoc check        # только запуск кейсов (CI)
bin/freshdoc build --no-run   # не исполнять код: метаданные + прошлые результаты

Установка через carat (OrelSokolov/carat) — бинарник объявлен в binaries: (контракт поставки carat, shards этот ключ игнорирует):

carat install OrelSokolov/freshdoc.cr   # глобально: ~/.carat/bin/freshdoc
carat install                           # в проекте: ./.carat/bin/freshdoc

Безопасность

  • исполняются примеры только из <root>/docs/examples корня проекта; в lib/ раннер не заходит
  • каждый кейс — отдельный процесс с таймаутом (--timeout, дефолт 10с) и капом stdout (64KB)

Ограничения v0.1

  • ошибка компиляции одного примера помечает compile_error все кейсы запуска
  • сканер лайновый: @doc должен стоять в комментарии непосредственно перед определением
Repository

freshdoc.cr

Owner
Statistic
  • 0
  • 0
  • 0
  • 0
  • 0
  • 3 days ago
  • October 27, 2026
License

Links
Synced at

Tue, 27 Oct 2026 18:26:44 GMT

Languages