Вам теж набридли кілометрові коментарі від AI в коді? Тоді commentdiet іде до вас

AI-агенти генерують забагато коментарів. І інструкції їм допомагають слабо. Тому щоб не перетворювати коментарі в художні твори, я зробив лінтер, який з pre-commit хуком не дає комітити занадто багато коментарів. І агенти без жодного промпту після виконаної роботи починають оптимізовувати свої коментарі.

Спочатку я пошукав готові рішення, але виник нюанс: вони рахують рядки коду, коли спробував за кількістю рядків, то агенти недовго вагалися і почали писати все в один рядок. Мʼяко кажучи, краще не стало.

Що ж лінтер вийшов доволі простим. Рахуємо співвідношення кількості символів коментарів до кількості символів коду і звіряємо з лімітами. Існує три ліміти:

Здається, що якось навіть занадто багато дозволено коментарів. Але ні, тому що коментарі досить розлогі у порівнянні з кодом. І 10% - це зовсім не багато коментарів на проект.

Тим не менш, звісно ці ліміти можна змінювати. І також є налаштування ігнорувати малі файли.

Скільки це в реальному коді

Щоб зрозуміти, які ліміти ставити, я проміряв те, що було під рукою:

ЩоКоментарі / код
commentdiet (сам)8.2%
golangci-lint без testdata11.7%
testify24.0%
yaml/v328.1%
Go stdlib: strings28.9%
Go stdlib: encoding/json29.0%
Go stdlib: net/http32.3%
Go stdlib: sync41.3%

Видно, що для публічних проектів, а тим паче бібліотек значення варто піднімати. Приватні проекти, які не можу згадувати, майже всі відразу вклалися в ліміт 10%.

Лінтер підтримує С++ та Golang, тому що я їх використовую, додати інші мови не складно, якщо буде попит.

Очевидно, що лінтер не розрізняє якість коментарів, і може змушувати агентів оптимізовувати коментарі занадто суворо. Тим не менш вони справляються, і дають зворотній зв'язок, коли щось не так.

Як запустити

З кореня проєкту:

docker run --rm -v "$PWD:/src:ro" serguacom/commentdiet:latest

Образ - це scratch з одним статичним бінарником, трохи більше мегабайта, є під amd64 і arm64. Проєкт монтується read-only, нічого не пише і нікуди не ходить. Exit code 0 — чисто, 1 — забагато коментарів, 2 — помилка конфігу або запуску.

Pre-commit hook, у .git/hooks/pre-commit:

#!/bin/sh
docker run --rm -v "$(git rev-parse --show-toplevel):/src:ro" serguacom/commentdiet:latest || exit $?

Або без Docker:

go install github.com/serguacom/commentdiet@latest

Код: github.com/serguacom/commentdiet

Ще до речі приємним бонусом є те, що лінтер викликається наприкінці роботи, і не завантажує контекст, на відміну від промпту писати компактні коментарі. Він попадає в контекст, коли основна робота зроблена, і вже не вимагається топова безпомилкова якість роботи. А промпт відразу трохи деградує IQ агента.

Ще не знаю, хто як запускає агентів, але в мене вони біжать в пісочниці і не можуть змінити хук. Чого всім теж рекомендую робити.

Оцініть пост
0.0 (0)

Коментарі та запитання · Google / GitHub / анонімно