В разработке на Clojure я активно пользуюсь различными leiningen-плагинами. На вики leiningen-а ведется список доступных плагинов, не полный, конечно, но там всё-таки есть наиболее популярные плагины. Ниже – те из них, которые лично мне здорово помогают в повседневном программировании.

  • lein-ancient – самый офигенный плагин в списке. Умеет проверить все зависимости вашего проекта на устаревание. Если найдет устаревший – покажет для него самую свежую версию. Супер-удобная вещь, если хотите иметь в проекте всегда самые свежие библиотеки.

  • lein-cljfmt – форматтер. Не только проверяет, насколько ваш код плохо отформатирован, но может и отформатировать его за вас. Совершенно необходимая вещь, если в команде больше одного человека.

  • lein-kibit – а это крайне полезная штука для новичков. Ищет способы как переписать ваш код наиболее идиоматичным образом. Например, выдает такие подсказки (заменяет if с двумя ветками на when с одной):

 
Consider using:
  (when (not (nil? (somefunc))) my-result)
instead of:
  (if (not (nil? (somefunc))) my-result nil)

Не все подсказки kibit-а хороши. На мой взгляд, его желание заменить (not (empty? …)) на seq – не совсем правильное. Но в целом, kibit – прекрасный инструмент для поиска неидиоматичного кода.

  • lein-eastwood – линтер. Ищет проблемы. Мне, например, нашел такое:
 
(ns consumer.web
  (require [compojure.core :refer [routes defroutes GET PUT POST DELETE ANY]]))

Здесь при редактировании файла я случайно удалил двоеточие перед словом require. Код вроде скомпилировался, и даже прошли какие-то тесты. Однако, это очевидно ошибка, которую мне обнаружил lein-eastwood.

  • lein-bikeshed – проверяет форматирование. Функционала поменьше, чем у lein-cljfmt, например lein-bikeshed не умеет исправлять неверное форматирование. Но зато находит слишком длинные строки и, возможно, что-то еще, что не проверяет lein-cljfmt.

  • lein-checkall – плагин для ленивых. Последовательно запускает команды “lein check && lein kibit && lein eastwood && lein bikeshed”.

  • lein-marginallia – отличный способ сгенерировать документацию по внутренностям проекта. Изначально задумывался как плагин для поддержки “литературного программирования” (literate programming), придуманного Дональдом Кнутом. Не скажу, что он так уж следует идеям Д.Кнута, это, скорее, развитие идеи “литературного программирования” с оглядкой на потребности современного программирования. И да, конечно marginallia слизана с docco.

  • lein-codox – это утилита для генерирования документации по API проекта. Документация получается не такая подробная, как у marginallia, но и предназначена она для того, чтобы показать, как использовать библиотеку, а не как она устроена внутри.

А какими плагинами пользуетесь вы? Пишите в комментах.