А что, если я скажу вам, что линтеры для Go можно создавать вот таким декларативным способом?
func alwaysTrue(m dsl.Matcher) {
m.Match(`strings.Count($_, $_) >= 0`).Report(`always evaluates to true`)
m.Match(`bytes.Count($_, $_) >= 0`).Report(`always evaluates to true`)
}
func replaceAll() {
m.Match(`strings.Replace($s, $d, $w, $n)`).
Where(m["n"].Value.Int() <= 0).
Suggest(`strings.ReplaceAll($s, $d, $w)`)
}
Год назад я уже рассказывал об утилите ruleguard. Сегодня хотелось бы поделиться тем, что нового появилось за это время.
Основные нововведения:
- Поддержка установки наборов правил через Go модули (bundles)
- Программируемые фильтры (компилируются в байт-код)
- Добавлен режим отладки фильтров
- Появился хороший обучающий материал: ruleguard by example
- У проекта появились реальные пользователи и внешние наборы правил
- Онлайн песочница, позволяющая попробовать ruleguard прямо в браузере