Emacs: Статический анализ Ruby-кода

Rubocop – это полезный инструмент для любого Ruby-разработчика. Rubocop осуществляет статический анализ Ruby-кода основываясь на Ruby Style Guide и помогает сделать ваш код чуточку читабельнее (а значит и лучше).

Так как Rubocop является утилитой командной строки, его ручной запуск является не самым удобным в работе решением. Однако, нет ничего сложного в том, чтобы настроить интеграцию Rubocop и Emacs, получив при этом:

  • Автоматический запуск Rubocop для текущего файла
  • Подсветку ошибок и предупреждений прямо в коде
  • Возможность получить список всех ошибок с ссылками на те месте, где они обнаружены

Ну что же, сделаем это!

rvm.el

Вы ведь используете RVM и Bundler? Тогда мне не нужно объяснять почему очень важно настроить взаимодействие Emacs и RVM.

Для решения этой задачи нам потребуется пакет rvm.el. Его установка и настройка тривиальна в случае если у вас настроен package.el (пример):

1
2
3
4
5
6
;; Устанавливаем пакет rvm.el
(require-package 'rvm)

;; Выбираем соответсвующую версию ruby (и версии гемов)
;; для каждого ruby-файла
(add-hook 'ruby-mode-hook #'rvm-activate-corresponding-ruby)

Вот и все, rvm.el настроен.

Flycheck

Flycheck – это пакет, который является связующей прослойкой между различными статическими анализаторами кода и Emacs. Крайне полезный инструмент. Итак, его настройка:

1
2
3
4
5
6
7
8
9
10
11
;; Устанавливаем пакет Flycheck
(require-package 'flycheck)

;; Запускаем Flycheck глобально
(add-hook 'after-init-hook #'global-flycheck-mode)

;; или только для Ruby-mode
(add-hook 'ruby-mode-hook #'flycheck-mode)

;; Запускаем проверки при открытие файла и после его сохранения
(setq-default flycheck-check-syntax-automatically '(save mode-enabled))

Все, Flycheck настроен. А знаете что самое приятное? При следующем открытии Ruby-файла Flycheck автоматически начнет использовать Rubocop! Добрая магия.

Так, нажав C-c ! l можно получить список всех предупреждений для текущего файла:

P.S. rubocop-emacs

Есть еще одна маленькая вещь о которой стоит упомянуть. Пакет rubocop-emacs от автора Rubocop. По сравнению с Flycheck этот пакет далеко не так удобен, однако в нем есть одна интересная возможность: автоматическая коррекция части ошибок и предупреждений в вашем коде. Итак:

1
2
3
4
5
6
7
8
;; Устанавливаем пакет rubocop-emacs
(require-package 'rubocop)

;; Добавляем rubocop-emacs к Ruby-mode
(add-hook 'ruby-mode-hook #'rubocop-mode)

;; Перечитываем файл после его изменения вне Emacs
(add-hook 'ruby-mode-hook #'auto-revert-mode)

Теперь, нажав C-c C-r F мы сделаем наш код чуточку чище.

Комментарии

Свиридов Александр © 2015