Периодически мне приходят в голову разнобразные идеи того, что стоило бы накодить. И чаще всего - у меня просто нет времени, чтобы это сделать. Между тем, если бы нашелся кто-то, кто написал бы этот софт - я почти наверняка им бы воспользовался. Если вы сейчас в активном поиске идей пет-проектов - это все написано для вас.

Пост пополняемый, планирую добавлять в него вещи по мере того, как они приходят мне в голову. Если вы заметили тут что-то уже реализованное - пишите мне, я поправлю текст. Поехали!

Линтер, который проверяет markdown-файл на корректность приведенных в нем же ссылок

GitHub (и не которые другие хранилища кода, текстов и пр.) автоматически преобразует заголовки markdown-файлов в якорные ссылки. В других частях того же документа можно использовать эти ссылки, и кликнувший туда пользователь будет автоматически переноситься в нужную часть документа. Это очень удобная фича, делающая возможным упаковывать довольно сложную документацию всего в один markdown-файл.

Однако проблема состоит в том, что в этих ссылках легко ошибиться. Если исправить или удалить заголовок, ведущие на него якорные ссылки автоматически не поменяются. Очень легко вообще забыть о том, что они где-то были. По мере роста проекта вероятность того, что это произойдет, становится все больше. Это накладывает ограничение на возможность использования цельного markdown-файла в качестве единого источника документации практически для любого проекта.

Что я хотел бы видеть? Простейшую CLI-программу, которая в виде аргументов принимает одно или несколько имен файлов с расширением .md. По результату своего запуска он либо “падает”, насыпав в консоль какое-то количество ошибок, либо “молчит”, то есть возвращает нулевой код возврата. Поскольку правил преобразования заголовка в якорную ссылку можно придумать много разных, в идеале нужно уметь принимать еще опциональный аргумент, который задает имя конкретного правила (по дефолту - github). Верхом крутости для такой программы была бы способность подключать сторонние плагины, описывающие разные способы преобразования текста заголовков в ссылки.

Программа должна уметь парсить синтаксис markdown, доставать из него все ссылки, каждую ссылку регуляркой проверять на то, глобальная она или ссылается на тот же документ. Ссылки последнего типа - проверяет на то, чтобы соответствующие им заголовки тоже присутствовали где-то в том же файле. Если ссылка не присутствует среди преобразованных в такие же ссылки заголовков в этом файле - в консоли появляется ошибка.