Комментарии 4
Классный доклад, спасибо!
Это отличный доклад для быстрого освоения golangci-lint. Уже не один раз обращался к нему при настройке линтера. Хотелось бы добавить несколько моментов, которые могут помочь при внедрении этого инструмента в проект (хотел бы я знать всё это раньше!). Перечислять буду в режиме блица:
- не надейтесь на конфигурацию линтера из коробки - некоторые линтеры в ней ничего не проверяют. Лучше настроить всё самому, пройдясь по примеру конфигурации самостоятельно https://github.com/golangci/golangci-lint/blob/master/.golangci.reference.yml Так вы будете понимать, что и как проверяется. Где надо сможете усилить проверки, где не надо - наборот, ослабить (например цикломатическая сложность, длина строк, расположение типов, костант, переменных в файлах - всё это достаточно сложно править в уже существующем проекте, поэтому есть смысл настроить конкретные линтеры под проект, чем расставлять везде nolint или выключать сам линтер). Нужно прямо скопировать конфигурацию полинтерно к себе и поменять. Не надейтесь только на секции enable, disabled в linters.
- по умолчанию лучше все линтеры включить, выключив только deprecated линтеры и то, что кажется неважным лично вам (например, некоторые стилевые линтеры, проверку орфографии в комментариях и т.д.), также нужно использовать golangci-lint-version из доклада, чтобы при обновлении не включались свежедобавленные линтеры. По мере обновления golangci-lint конфигурацию в проекте нужно сверять с https://github.com/golangci/golangci-lint/blob/master/.golangci.reference.yml - искать новое, сравнивать значения по умолчанию.
- бывает, что даже настроив конфиг по совету выше, оказывается, что golangci-lint нашёл как-то подозрительно мало проблем. Это может быть из-за невалидного yaml в вашем .golangci.yml файле. Такое может быть из-за неправильных отступов, перемешанных табов и пробелов... Чтобы узнать, какие конкретно линтеры из конфигурации используются на запуске, добавляйте флаг golangci-lint run -vvv ./... Сравните вывод из строчки вида "INFO [lintersdb] Active 81 linters: ..." с вашим конфигом и выводом golangci-lint linters.
- бывает такое, что вроде все замечания расчистил, но при следующем запуске линтер выдаёт порцию новых. Это связано с настройками max-issues-per-linter (50 по умолчанию) и max-same-issues (3 по умолчанию). В конфигурации лучше для них оставить 0, чтобы не схлопывать сходные замечания, а при запуске, чтобы оценить фронт работ и уменьшит шум, наоброт добавить вот так:
golangci-lint run --max-issues-per-linter 2 --max-same-issues 2 ./... -vvv >> issues.txt
- при глушении замечний в конкретном месте через nolint всегда нужно писать причину, идеально если todo с каким-то планом исправления.
Линтеры в Go. Как их готовить. Денис Исаев