Как стать автором
Обновить

Комментарии 7

А что такое "линтер"? Статический анализатор?

Есть общепризнанный и лаконичный аналог на Русском, или только полная форма «статический анализатор»? Возможно, «анализатор» был бы уместным компромиссом.

Идея этакого тестового полигона для новых проверок интересная, но особой разницы между добавлением проверки в go-critic и любой другой проект с точки зрения пользователя может и не быть, к тому же не очень понятно как эту идею пользователям «продать».

Ну и отсутствие интеграции с редакторами/gometalinter делает ваш проект заметно менее привлекательным, ведь если уже кто-то заморочился с новой проверкой она должна быть полностью интегрирована в процесс разработки.

Про сам linter — опробовал на своем pet project, весьма полезной показалась rangeExprCopy, а paramTypeCombine скорее вредной. И если вы хотите иметь opinionated проверки, то надо чтоб их было легко отключить, а пока есть только опция -enable, тобишь явный whitelist.

А вообще желаю удачи с проектом, мало статического анализа не бывает.
paramTypeCombine

В ней присутствуют false positive срабатывания для безымянных параметров. Если бы их не было, всё равно был бы вредным?


И если вы хотите иметь opinionated проверки

В недавнем обновлении по умолчанию experimental и opinionated выключены из -enable=all. В идеале eventually придём к более-менее нормальному default набору, но в качестве интеграции куда-то всё равно лучше явный список использовать.


Ну и отсутствие интеграции с редакторами/gometalinter делает ваш проект заметно менее привлекательным, ведь если уже кто-то заморочился с новой проверкой она должна быть полностью интегрирована в процесс разработки.

Уже в golangci-lint добавиться планируем, там есть интеграции в том числе с редакторами. В gometalinter, наверное, тоже можно. Для проекта эти интеграции важны, согласен полностью.

case ast.IsExported(name.ID.String()):
c.warnCapitalized(name.ID)


Вот это не совсем понял. По логике вещей, предупреждение должно выдаваться если переменная НЕ экспортируемая (т.е. локальная) и Capitalized. А здесь как-то наоборот. Это ошибка или я что-то не понял?

Понимаю ваше недоумение.


Но фукнция IsExported(s) проверяет лишь то, что переданная ей строка начинается с заглавной буквы. Метод VisitLocalDef() вызывается только для локальных определений,
поэтому если мы уже внутри и IsExported(s) вернул true, то это локальная переменная, которая начинается с заглавное буквы, что не имеет особого смысла, потому что это не влияет на семантику.

Ясно. Спасибо! Я подозревал нечто подобное. :)

Шикарный инструмент! В ближайшее время проверю весь свой код. :) Может и в разработке правил поучаствую. :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории