Быстрый, настраиваемый, расширяемый, гибкий и красивый линтер для Go. Замена Golint. Revive предоставляет основу для разработки пользовательских правил и позволяет определить строгую задание для улучшения процессов разработки и проверки кода .
var-namingrevive в качестве библиотекиgo install github.com/mgechev/revive@latestИли получите выпущенный исполняемый файл со страницы релизов.
Вы можете установить основную ветвь (включая последний коммит) с:
go install github.com/mgechev/revive@master Поскольку поведение revive по умолчанию совместимо с golint , не предоставляя никаких дополнительных флагов, единственное отличие, которое вы заметите, - это быстрее выполнение.
revive поддерживает флаг -config , значение которого должно соответствовать файлу TOML, описывающему, какие правила использовать для сжигания revive . Если не предоставлено, revive попытается использовать глобальный файл конфигурации (предполагается, что он находится по адресу $HOME/revive.toml ). В противном случае, если не найден файл конфигурации TOML, то revive использует встроенный набор правил по умолчанию.
Том должен быть установлен, чтобы разделить текущий репозиторий с контейнером. Пожалуйста, обратитесь к документации Docker Docker Bind Mounts
docker run -v " $( pwd ) " :/var/ < repository > ghcr.io/mgechev/revive:v1.3.7 -config /var/ < repository > /revive.toml -formatter stylish ./var/kidle/...-v для объемаghcr.io/mgechev/revive:v1.3.7 - это имя изображения и его версия соответствует команде reviveЕсли вы хотите использовать Revive с Bazel, посмотрите на правила, которые поддерживает Atlassian.
Поддержка VSCODE в VSCODE-GO.
Поддержка Goland через наблюдателей за файлами.
Поддержка атома через Линтер-Ревив.
Поддержка VIM через густой анализ/эль.
let g: ale_linters = {
' go ' : [ ' revive ' ],
}Поддержка NEOVIM через NULL-LS.NVIM.
require ( " null-ls " ). setup ({
sources = {
require ( " null-ls " ). builtins . diagnostics . revive
},
})CodeaC.IO - Служба обзора автоматического кода интегрируется с GitHub, Bitbucket и Gitlab (даже самостоятельно) и помогает вам бороться с техническим долгами. Проверьте свои запросы с помощью Revive автоматически. (бесплатно для проектов с открытым исходным кодом)
Чтобы включить revive в golangci-lint вам нужно добавить revive в список включенных линтеров:
# golangci-lint configuration file
linters :
enable :
- revive Затем revive может быть настроен, добавив запись в раздел linters-settings в конфигурации, например:
# golangci-lint configuration file
linters-settings :
revive :
ignore-generated-header : true
severity : warning
rules :
- name : atomic
- name : line-length-limit
severity : error
arguments : [80]
- name : unhandled-error
arguments : ["fmt.Printf", "myFunction"] Вышеуказанная конфигурация обеспечивает три правила revive : атомный , лимитный лимит и бездумно-ошибка и передает несколько аргументов последним двум. В разделе «Конфигурация этого документа» приведены подробную информацию о том, как настроить revive . Обратите внимание, что в то время как настройка revive находится в Toml, в YAML находится golangci-lint .
Пожалуйста, обратите внимание, что если конкретная конфигурация не будет предоставлена, revive будет вести себя, как и go-lint , то есть все правила go-lint включены (доступные данные таблицы правил Каковы правила go-lint ). Когда конфигурация предоставлена, включены только правила в конфигурации.
revive принимает следующие параметры командной строки:
-config [PATH] - Путь к файлу конфигурации в формате Toml, по умолчанию $HOME/revive.toml если присутствует.
-exclude [PATTERN] - шаблон для файлов/каталогов/пакетов, которые должны быть исключены для линирования. Вы можете указать файлы, которые вы хотите исключить для снятия либо в качестве имени пакета (то есть github.com/mgechev/revive ), перечислить их как отдельные файлы (то есть file.go ), каталоги (т.е. ./foo/... ) или любая комбинация из трех. Если не указаны шаблоны исключения, vendor/... будет исключен по умолчанию.
-formatter [NAME] - Форматер, который будет использоваться для вывода. Доступные в настоящее время форматер:
default - выведет сбои так же, как и golint .json - выводит сбои в формате JSON.ndjson - выводит сбои в виде потока в формате Newline Delimited JSON (NDJSON).friendly - выводит сбои при найде. Показывает резюме всех сбоев.stylish - форматирует сбои в столе. Имейте в виду, что он не транслирует выход, поэтому он может восприниматься как медленнее по сравнению с другими.checkstyle - выводит сбои в формате XML, совместимых с контрольным стилем Java. -max_open_files - максимальное количество открытых файлов одновременно. По умолчанию неограниченное.
-set_exit_status - установить статус выхода на 1 Если будут обнаружены какие -либо проблемы, перезаписывает errorCode и warningCode в config.
-version - Получите версию Revive.
revive -config revive.toml -exclude file1.go -exclude file2.go -formatter friendly github.com/mgechev/revive package/...revive.tomlrevive будет игнорировать file1.go и file2.gofriendly форматераgithub.com/mgechev/revive и файлы в packageИспользуя комментарии, вы можете отключить Linter для всего файла или только ряд строк:
//revive:disable
func Public () {}
//revive:enable Приведенный выше фрагмент отключит revive между revive:disable и revive:enable комментарии. Если вы пропустите revive:enable , Linter будет отключен для остальной части файла.
С revive:disable-next-line и revive:disable-line вы можете отключить revive по конкретной строке кода.
Вы можете сделать то же самое на уровне правил. Если вы хотите отключить только конкретное правило, вы можете использовать:
//revive:disable:unexported-return
func Public () private {
return private
}
//revive:enable:unexported-return Таким образом, revive не предупреждает вас, что вы возвращаете объект неожиданного типа, из экспортируемой функции.
Вы можете задокументировать, почему вы отключите Linter, добавив, например, в Директиве привязанный к тексту в Директиве
//revive:disable Until the code is stable //revive:disable:cyclomatic High complexity score but easy to understand Вы также можете настроить revive для обеспечения соблюдения документирования директив отключения Linter путем добавления
[ directive . specify-disable-reason ]в конфигурации. Вы можете установить серьезность (по умолчанию предупреждения ) нарушения этой директивы
[ directive . specify-disable-reason ]
severity = " error " revive может быть настроено с помощью файла Toml. Вот пример конфигурации с объяснением отдельных свойств:
# When set to false, ignores files with "GENERATED" header, similar to golint
ignoreGeneratedHeader = true
# Sets the default severity to "warning"
severity = " warning "
# Sets the default failure confidence. This means that linting errors
# with less than 0.8 confidence will be ignored.
confidence = 0.8
# Sets the error code for failures with the "error" severity
errorCode = 0
# Sets the error code for failures with severity "warning"
warningCode = 0
# Configuration of the `cyclomatic` rule. Here we specify that
# the rule should fail if it detects code with higher complexity than 10.
[ rule . cyclomatic ]
arguments = [ 10 ]
# Sets the severity of the `package-comments` rule to "error".
[ rule . package-comments ]
severity = " error " По умолчанию revive будет включать только те правила Linting, которые указаны в файле конфигурации. Например, предыдущий файл конфигурации делает revive , чтобы включить только велосипедные и пакетные правила снижения.
Чтобы включить все доступные правила, необходимые для добавления:
enableAllRules = trueЭто позволит всем доступным правилам, независимо от того, какие правила названы в файле конфигурации.
Чтобы отключить правило, вы просто отмечаете его как отключенное в конфигурации. Например:
[ rule . line-length-limit ]
Disabled = trueПри включении всех правил, которые вам все еще нужны/могут предоставить конкретные конфигурации для правил. Следующий файл является примером конфигурации, в которой включены все правила, за исключением тех, которые явно отключены, и некоторые правила настроены с конкретными аргументами:
severity = " warning "
confidence = 0.8
errorCode = 0
warningCode = 0
# Enable all available rules
enableAllRules = true
# Disabled rules
[ rule . blank-imports ]
Disabled = true
[ rule . file-header ]
Disabled = true
[ rule . max-public-structs ]
Disabled = true
[ rule . line-length-limit ]
Disabled = true
[ rule . function-length ]
Disabled = true
[ rule . banned-characters ]
Disabled = true
# Rule tuning
[ rule . argument-limit ]
Arguments = [ 5 ]
[ rule . cyclomatic ]
Arguments = [ 10 ]
[ rule . cognitive-complexity ]
Arguments = [ 7 ]
[ rule . function-result-limit ]
Arguments = [ 3 ]
[ rule . error-strings ]
Arguments = [ " mypackage.Error " ] Конфигурация revive по умолчанию можно найти на defaults.toml . Это позволит всем правилам, доступным в golint , и использовать их конфигурацию по умолчанию (то есть, как они жестко кодируются в golint ).
revive -config defaults.toml github.com/mgechev/revive Это будет использовать файл конфигурации defaults.toml , форматер default и запустить линейку через пакет github.com/mgechev/revive .
revive -config config.toml -formatter friendly github.com/mgechev/revive Это будет использовать config.toml , friendly форматер, и будет запускать лининг через пакет github.com/mgechev/revive .
Следующий фрагмент содержит рекомендуемую конфигурацию revive , которую вы можете использовать в своем проекте:
ignoreGeneratedHeader = false
severity = " warning "
confidence = 0.8
errorCode = 0
warningCode = 0
[ rule . blank-imports ]
[ rule . context-as-argument ]
[ rule . context-keys-type ]
[ rule . dot-imports ]
[ rule . error-return ]
[ rule . error-strings ]
[ rule . error-naming ]
[ rule . exported ]
[ rule . increment-decrement ]
[ rule . var-naming ]
[ rule . var-declaration ]
[ rule . package-comments ]
[ rule . range ]
[ rule . receiver-naming ]
[ rule . time-naming ]
[ rule . unexported-return ]
[ rule . indent-error-flow ]
[ rule . errorf ]
[ rule . empty-block ]
[ rule . superfluous-else ]
[ rule . unused-parameter ]
[ rule . unreachable-code ]
[ rule . redefines-builtin-id ]Вы также можете настроить пользовательские исключения для каждого правила.
Это альтернатива для глобальной программы -exclude Arg.
ignoreGeneratedHeader = false
severity = " warning "
confidence = 0.8
errorCode = 0
warningCode = 0
[ rule . blank-imports ]
Exclude =[ " **/*.pb.go " ]
[ rule . context-as-argument ]
Exclude =[ " src/somepkg/*.go " , " TEST " ]Вы можете использовать следующие шаблоны исключения
src/pkg/mypkg/some.gosrc/**/*.pb.go~.(pb|auto|generated).go$TEST (такой же, как **/*_test.go )* и ~ шаблоны исключают все файлы (тот же эффект, что и отключение правила) b. "" (пустое) шаблон ничего не исключаетПримечание. Не связывайтесь с
exclude, который можно использовать на верхнем уровне файла Toml, что означает «исключать шаблоны пакетов», а не «исключать шаблоны файлов»
Список всех доступных правил. Правила, переносимые из golint остаются неизменными и указаны в колонке golint .
| Имя | Конфигурация | Описание | golint | Напечатано |
|---|---|---|---|---|
context-keys-type | n/a | Удаляет использование основных типов в context.WithValue . | да | да |
time-equal | n/a | Предлагает использовать time.Time.Equal Экваловое вместо == и != Для проверки равенства. | нет | да |
time-naming | n/a | Конвенции вокруг именования временных переменных. | да | да |
unchecked-type-assertions | n/a | Disallows Type утверждения без проверки результата. | нет | да |
var-declaration | n/a | Уменьшает увольнение вокруг объявления переменной. | да | да |
unexported-return | n/a | Предупреждает, когда публичное возвращение от неожиданного типа. | да | да |
errorf | n/a | Должен заменить errors.New(fmt.Sprintf()) с fmt.Errorf() | да | да |
blank-imports | n/a | Devallow Blank Imports | да | нет |
context-as-argument | n/a | context.Context должен быть первым аргументом функции. | да | нет |
dot-imports | n/a | Запрещает . импорт. | да | нет |
error-return | n/a | Параметр возврата ошибки должен быть последним. | да | нет |
error-strings | []нить | Конвенции вокруг строк ошибок. | да | нет |
error-naming | n/a | Наименование переменных ошибок. | да | нет |
exported | []нить | Название и комментирование соглашений о экспортируемых символах. | да | нет |
if-return | n/a | Избыточно, если при возврате ошибки. | нет | нет |
increment-decrement | n/a | Используйте i++ и i-- вместо i += 1 и i -= 1 . | да | нет |
var-naming | AllistList & BlockList of инициализма | Правила именования. | да | нет |
package-comments | n/a | Пакет комментирует конвенции. | да | нет |
range | n/a | Предотвращает избыточные переменные при итерации над коллекцией. | да | нет |
receiver-naming | карта (необязательно) | Конвенции вокруг именования приемников. | да | нет |
indent-error-flow | []нить | Предотвращает избыточные высказывания. | да | нет |
argument-limit | int (по умолчанию к 8) | Указывает максимальное количество аргументов, которые может получить функция | нет | нет |
cyclomatic | int (по умолчанию до 10) | Устанавливает ограничение для максимальной цикломатической сложности. | нет | нет |
max-public-structs | int (по умолчанию 5) | Максимальное количество публичных структур в файле. | нет | нет |
file-header | строка (по умолчанию никто) | Заголовок, который должен иметь каждый файл. | нет | нет |
empty-block | n/a | Предупреждает на пустых кодовых блоках | нет | да |
superfluous-else | []нить | Предотвращает избыточные высказывания (Extends indent-error-flow ) | нет | нет |
confusing-naming | n/a | Предупреждает о методах с именами, которые отличаются только за счет капитализации | нет | нет |
get-return | n/a | Предупреждает о достатках, которые не дают никакого результата | нет | нет |
modifies-parameter | n/a | Предупреждает о назначениях для параметров функции | нет | нет |
confusing-results | n/a | Предлагает назвать потенциально запутанные результаты функции | нет | нет |
deep-exit | n/a | Ищет программные выходы в Funcs, кроме main() или init() | нет | нет |
unused-parameter | n/a | Предлагает переименовать или удалить параметры неиспользованных функций | нет | нет |
unreachable-code | n/a | Предупреждает о недоступном коде | нет | нет |
add-constant | карта | Предлагает использовать постоянные для магических чисел и струнных литералов | нет | нет |
flag-parameter | n/a | Предупреждает о логических параметрах, которые создают контрольную связь | нет | нет |
unnecessary-stmt | n/a | Предлагает удаление или упрощение ненужных заявлений | нет | нет |
struct-tag | []нить | Проверяет общие теги Struct, такие как json , xml , yaml | нет | нет |
modifies-value-receiver | n/a | Предупреждает о назначениях к приемникам метода, пассивных по значению | нет | да |
constant-logical-expr | n/a | Предупреждает о постоянных логических выражениях | нет | нет |
bool-literal-in-expr | n/a | Предлагает удалить логические литералы из логических выражений | нет | нет |
redefines-builtin-id | n/a | Предупреждает о переопределениях встроенных идентификаторов | нет | нет |
function-result-limit | int (по умолчанию 3) | Указывает максимальное количество результатов, которые может вернуть функцию | нет | нет |
imports-blocklist | []нить | Devallows Importing указанные пакеты | нет | нет |
range-val-in-closure | n/a | Предупреждает, используется ли значение диапазона в закрытии, отправленном как goroutine | нет | нет |
range-val-address | n/a | Предупреждает, используется ли адреса значения диапазона опасно | нет | да |
waitgroup-by-value | n/a | Предупреждает функции, принимающие Sync.WaitGroup в качестве параметра по значению | нет | нет |
atomic | n/a | Проверьте на наличие общих ошибочных использования пакета sync/atomic | нет | нет |
empty-lines | n/a | Предупреждает, когда есть заголовок или новеньши в блоке | нет | нет |
line-length-limit | int (по умолчанию к 80) | Указывает максимальное количество символов в линии | нет | нет |
call-to-gc | n/a | Предупреждает о явном призыве к коллекционеру мусора | нет | нет |
duplicated-imports | n/a | Ищет пакеты, которые импортируются два или более раз | нет | нет |
import-shadowing | n/a | Пятна идентификаторы, которые тенится на импорт | нет | нет |
bare-return | n/a | Предупреждает о возвращении | нет | нет |
unused-receiver | n/a | Предлагает переименовать или удалить неиспользованные методы приемников | нет | нет |
unhandled-error | []нить | Предупреждает о нездоровых ошибках, возвращаемых по функциональным вызовам | нет | да |
cognitive-complexity | int (по умолчанию 7) | Устанавливает ограничение для максимальной когнитивной сложности. | нет | нет |
string-of-int | n/a | Предупреждает о подозрительных актерах от int до струны | нет | да |
string-format | карта | Предупреждает конкретные строковые литералы, которые терпят неудачу в одном или нескольких регулярных выражениях, сфигурированных пользователями | нет | нет |
early-return | []нить | Пятна, если-то-эльсе | нет | нет |
unconditional-recursion | n/a | Предупреждает о вызовах функций, которые приведут к (прямой) бесконечной рецирсии | нет | нет |
identical-branches | n/a | Пятна else then | нет | нет |
defer | карта | Предупреждает о некоторых отрядах Gotchas | нет | нет |
unexported-naming | n/a | Предупреждает о неправильно названных символах. | нет | нет |
function-length | int, int (по умолчанию на 50 операторов, 75 строк) | Предупреждает функции, превышающие операторы или строки макс. | нет | нет |
nested-structs | n/a | Предупреждает о структурах в рамках структуры | нет | нет |
useless-break | n/a | Предупреждает о бесполезных заявлениях break в случае пунктов | нет | нет |
banned-characters | [] string (по умолчанию to [] string {}) | Проверки запрещенных персонажей в идентификаторах | нет | нет |
optimize-operands-order | n/a | Проверяет неэффективные условные выражения | нет | нет |
use-any | n/a | Предлагает заменить interface{} на его any | нет | нет |
datarace | n/a | Пятна потенциальные данные | нет | нет |
comment-spacings | []нить | Предупреждает о порочных комментариях | нет | нет |
redundant-import-alias | n/a | Предупреждает об импортных псевдонимах, соответствующих импортируемому имени пакета | нет | нет |
import-alias-naming | String или Map [String] String (по умолчанию разрешить рисунок regex ^[az] [a-z0-9] {0,} $) | Конвенции вокруг именования псевдонимов импорта. | нет | нет |
enforce-map-style | Строка (по умолчанию «любой») | Обеспечивает постоянное использование make(map[type]type) или map[type]type{} для инициализации карты. Не влияет на конструкции make(map[type]type, size) . | нет | нет |
enforce-slice-style | Строка (по умолчанию «любой») | Обеспечивает постоянное использование make([]type, 0) или []type{} для инициализации среза. Не влияет make(map[type]type, non_zero_len, or_non_zero_cap) . | нет | нет |
enforce-repeated-arg-type-style | Строка (по умолчанию «любой») | Обеспечивает соблюдение постоянного стиля для повторного аргумента и/или типов возврата значений. | нет | нет |
max-control-nesting | int (по умолчанию 5) | Устанавливает ограничение для максимального гнездования контрольных структур. | нет | нет |
comments-density | int (по умолчанию к 0) | Обеспечивает соблюдение минимального отношения к комментарию / коду | нет | нет |
file-length-limit | карта (необязательно) | Обеспечивает максимальное количество строк на файл | нет | нет |
filename-format | Регулярное выражение (необязательно) | Обеспечивает форматирование имен файлов | нет | нет |
redundant-build-tag | n/a | Предупреждает о // +build | нет | нет |
use-errors-new | n/a | Spots вызовы в fmt.Errorf , которые могут быть заменены на errors.New | нет | нет |
Здесь вы можете найти, как вы можете настроить некоторые существующие правила:
var-naming Это правило принимает два кусочка строк, Allistlist и блок -лист инициализма. По умолчанию правило ведет себя точно так же, как альтернатива в golint , но, необязательно, вы можете расслабить его (см. Golint/Lint/проблемы/89)
[ rule . var-naming ]
arguments = [[ " ID " ], [ " VM " ]] Таким образом, Revive не будет предупреждать о идентификаторе, называемом customId но предупредит, что customVm следует назвать customVM .
В этом разделе перечислены все доступные форматер и предоставляют скриншот для каждого из них.


Форматер по умолчанию производит тот же выход, что и golint .

Простой форматтер производит тот же выход, что и форматтер по умолчанию, и добавляет URL к описанию правила.

Форматтер Unix производит тот же выход, что и форматтер по умолчанию, но окружает правила в [] .

Форматер json производит выход в формате JSON.
Форматер ndjson производит выход в Newline Delimited JSON .
Форматтер checkstyle производит выход в формате Checkstyle, подобного.
Форматер sarif производит выход в SARIF для статического анализа результатов формата интерфейса , стандартного формата на основе JSON для вывода инструментов статического анализа, определенных и продвигаемых OASIS.
Текущая поддерживаемая версия стандарта-Sarif-V2.1.0.
Инструмент может быть расширен с помощью пользовательских правил или форматер. Этот раздел содержит дополнительную информацию о том, как реализовать такую.
Чтобы расширить Линтер с помощью пользовательского правила, вы можете подтолкнуть его к этому репозиторию или использовать revive в качестве библиотеки (см. Ниже)
Чтобы добавить пользовательский формат, вам придется подтолкнуть его к этому репозиторию или разветвлять его. Это связано с ограниченной поддержкой -buildmode=plugin которая работает только на Linux (с известными проблемами).
Каждое правило должно реализовать интерфейс lint.Rule :
type Rule interface {
Name () string
Apply ( * File , Arguments ) [] Failure
} Тип Arguments - это псевдоним []interface{} . Аргументы правила передаются из файла конфигурации.
Предположим, мы разработали правило под названием BanStructNameRule , которое запрещает нам назвать структуру с данным идентификатором. Мы можем установить запрещенный идентификатор, используя файл конфигурации TOML:
[ rule . ban-struct-name ]
arguments = [ " Foo " ]С фрагментом над нами:
ban-struct-name . Метод Name() нашего правила должен вернуть строку, которая соответствует ban-struct-name .Foo . Список аргументов будет передан для Apply(*File, Arguments) вместе с целевым файлом, который мы сжимаем в настоящее время.Образец реализации правила можно найти здесь.
revive в качестве библиотеки Если правило относится к вашему варианту использования (то есть, это не очень хороший кандидат, который будет добавлен в набор правил revive ), вы можете добавить его в свой Linter, используя revive в качестве двигателя для подкладки.
Следующий код показывает, как использовать revive в вашем приложении. В примере добавлено только одно правило ( myRule ), конечно, вы можете добавить столько, сколько вам нужно. Ваши правила могут быть настроены программно или со стандартным файлом конфигурации revive . Полный набор правил revive также действует по вашему приложению.
package main
import (
"github.com/mgechev/revive/cli"
"github.com/mgechev/revive/lint"
"github.com/mgechev/revive/revivelib"
)
func main () {
cli . RunRevive ( revivelib . NewExtraRule ( & myRule {}, lint. RuleConfig {}))
}
type myRule struct {}
func ( f myRule ) Name () string {
return "myRule"
}
func ( f myRule ) Apply ( * lint. File , lint. Arguments ) []lint. Failure { ... } Вы все еще можете пойти дальше и использовать revive без его CLI, как часть вашей библиотеки или вашего CLI:
package mylib
import (
"github.com/mgechev/revive/cli"
"github.com/mgechev/revive/revivelib"
"github.com/mgechev/revive/lint"
)
// Error checking removed for clarity
func LintMyFile ( file string ) {
conf , _ := config . GetConfig ( "../defaults.toml" )
revive , _ := revivelib . New (
conf , // Configuration file
true , // Set exit status
2048 , // Max open files
// Then add as many extra rules as you need
revivelib . NewExtraRule ( & myRule {}, lint. RuleConfig {}),
)
failuresChan , err := revive . Lint (
revivelib . Include ( file ),
revivelib . Exclude ( "./fixtures" ),
// You can use as many revivelib.Include or revivelib.Exclude as required
)
if err != nil {
panic ( "Shouldn't have failed: " + err . Error ())
}
// Now let's return the formatted errors
failures , exitCode , _ := revive . Format ( "stylish" , failuresChan )
// failures is the string with all formatted lint error messages
// exit code is 0 if no errors, 1 if errors (unless config options change it)
// ... do something with them
}
type myRule struct {}
func ( f myRule ) Name () string {
return "myRule"
}
func ( f myRule ) Apply ( * lint. File , lint. Arguments ) []lint. Failure { ... }Каждое формирование должно реализовать следующий интерфейс:
type Formatter interface {
Format ( <- chan Failure , Config ) ( string , error )
Name () string
} Метод Format принимает канал экземпляров Failure и конфигурацию включенных правил. Метод Name() должен вернуть строку, отличную от имен уже существующих правил. Эта строка используется при определении форматера при вызове инструмента revive CLI.
Для образца форматера, посмотрите на этот файл.
По сравнению с golint , revive работает лучше, потому что он проливает файлы для каждого отдельного правила в отдельный Goroutine. Вот базовый эталон производительности на MacBook Pro в начале 2013 года на Kubernetes:
time golint kubernetes/... > /dev/null
real 0m54.837s
user 0m57.844s
sys 0m9.146s # no type checking
time revive -config untyped.toml kubernetes/... > /dev/null
real 0m8.471s
user 0m40.721s
sys 0m3.262s Имейте в виду, что если вы используете правила, которые требуют проверки типов, производительность может упасть в 2 раза быстрее, чем golint :
# type checking enabled
time revive kubernetes/... > /dev/null
real 0m26.211s
user 2m6.708s
sys 0m17.192sВ настоящее время проверка типов включена по умолчанию. Если вы хотите запустить Linter без проверки типов, удалите все типичные правила из файла конфигурации.
По умолчанию revive определяет, окрашивает ли его вывод на основе того, подключена ли он к TTY или нет. Это работает для большинства вариантов использования, но может не вести себя так, как и ожидалось, если вы используете revive в трубопроводе, где Stdout передается в другую команду.
Чтобы принудительно раскрашивать, добавьте REVIVE_FORCE_COLOR=1 в среду, в которой вы запускаете. Например:
REVIVE_FORCE_COLOR=1 revive -formatter friendly ./... | tee revive.log| Мгечв | Чавакава | denisvmedia | Mfederowicz | XURI | Александер |
| Лдез | Doniacld | Кливерн | Morphy2k | Бернхардрейзенбергер | Dshemin |
| Бутузов | Комдив | Гейнеманн | Гсамоковаров | Мдела | Tymonx |
| Sina-Devel | Rawen17 | Домикелефер | git-hulk | Shmsr | ytnsym |
| Цимски | MapReal19 | CCE | Скаджи | Ccoveille | Тамирд |
| Марклог | Михайтодор | dvejmz | Абелдей | damif94 | Groxx |
| Стивенбуттольф | Стивенбруун2 | LSYTJ0413 | QASCADE | Ridvansumset | rliebz |
| rdeusser | Rmarku | rnikoopour | Рафамадриз | PACO0X | пэт |
| СИНАР | Нейтфинч | Нуннатса | Михалхизим | Зерипат | y-yagi |
| Techknowlogick | ОКОХАНГ | Mealguy | likyh | ядра | Jmckenzieark |
| Haya14busa | Фрейгин | ида | Willabides | Хейвито | Винсентбарон |
| подкопа | Vkrol | Кириллслучаев | Джарема | Тартал | тмзан |
| Фелипедвид | еюнк | Энтузизм | Juneezee | эхо | Выдыхает |
| Пететепиг | DIRK007 | Яндиангбб | Дерекперкинс | Bboreham | Аттс |
| Hatamiarash7 | Арагур | Аминчело | культи | Abirdcfly | Абхинав |
| R-Ricci | Mmcloughlin | Матье-Абин | Мартинсирбе | Аворима | Мукублен |
| очень обдуман | Johnrichardrinehart | Уолс | Джеферсонф | Jamesmaidment | Джалазиз |
| погрузка | галстук | квазилит | Дэвидхсингюшен | Gfariasalves-Ionos | Гбуранов |
| Ginglis13 | Франс |
Грань