Обзор

Если у вас, как и у меня, закончилась пробная версия RubyMine, вы наверняка перешли на VS Code. RubyMine  —  отличный инструмент, но, к сожалению, с платным доступом. Надеюсь, когда-нибудь в JetBrains выпустят версию для сообщества, аналогичную IntelliJ.

А пока обратимся к альтернативной среде, состоящей из расширений и библиотек.

Что учитываем?

Рассмотрим самый широкий и важный функционал для ее сравнения с мощной интегрированной средой разработки от JetBrains:

  • Семантическая подсветка синтаксиса → цветовое выделение классов, методов и т. д.
  • Форматирование → преобразование кода согласно набору правил, например применение отступов.
  • Статический анализ кода → на предмет потенциальных проблем, например синтаксических ошибок.
  • Автодополнение ввода → для автоматического завершения кода.
  • Легкий доступ к документации Ruby Core и Gem Support.
  • Проверка типов → на наличие ошибок перед запуском кода.
  • История Git-коммитов → показ информации об авторах изменений любой части проекта.
  • Черновик → написание фрагмента кода без создания файла в папке проекта.
  • Gemfile-ссылки на онлайн-документацию по библиотекам.

И установим дополнительные расширения для улучшения работы с кодом.

Понадобится также:

Установить расширения для VS Code.

  • Нажимаем значок Extensions («Расширения») на левой боковой панели и вводим название. Найдя расширение, нажимаем кнопку установки.

Отредактировать файл settings.json для максимального задействования этих расширений.

  • Будем использовать основной в User. Переходим в File («Файл») → Preferences («Предпочтения») → Settings («Настройки») → Open Settings («Открыть настройки») справа вверху или используем сочетание клавиш Ctrl + Shift + P и вводим Open User Settings (JSON) («Открыть настройки пользователя (JSON)»).

Добавить Gemfile для работы со всеми библиотеками проекта и установить их с помощью Bundler.

  • Добавляем библиотеку командой gem install [название библиотеки]. Чтобы установить все библиотеки проекта из папки, в которой находится Gemfile, запускаем bundle install.

Настроить файлы .yml для увеличения возможностей расширений и библиотек.

  • Установив расширение и соответствующую библиотеку, мы сможем генерировать эти файлы настроек под свои нужды и размещать их в проекте.

Кроме того, чтобы все прошло гладко, понадобятся установленный Ruby с настроенными переменными среды и библиотека Bundler. Это среда для Windows, но она так же хороша в любой ОС.

Теперь настроим продуктивную среду разработки Ruby  —  аналогичную RubyMine, но бесплатную.

Семантическая подсветка синтаксиса

С VSCode Ruby и Ruby by Peng Lv.

В VSCode Ruby имеются подсветка синтаксиса и фрагменты кода.

С расширением Ruby by Peng Lv добавляется много улучшений базового VS Code. Его функционал больше: имеются статический анализ кода, форматирование и базовое автодополнение ввода. Хотя это расширение готово к работе, нужно настроить в нем дополнительные возможности.

А пока воспользуемся базовым примером конфигурации и в соответствии с функционалом, приведенном в начале статьи, добавим в settings.json следующее:

{
"ruby.useBundler": true,
"ruby.useLanguageServer": true,
"ruby.lint": {
"rubocop": {
"useBundler": true
}
},
"ruby.format": "rubocop"
}

Установим оба расширения из вкладки Extensions.

Мы должны видеть различия:

Изображение автора

Прежде чем продолжить, перезапускаем VS Code или нажимаем Ctrl + Shift + P и вводим Reload Window («Перезагрузить окно»). Будем делать это на протяжении всего руководства.

Форматирование и статический анализ кода

Установим библиотеку Rubocop.

Открываем терминал внутри проекта или в VS Code. Если нет Gemfile, запускаем bundle init. Открываем файл и добавляем следующее:

gem 'rubocop', require: false

Чтобы установить относящиеся к проекту библиотеки  —  пока это только Rubocop,  —  запускаем из терминала bundle.

Понадобится и соответствующее расширение. Из вкладки Extensions устанавливаем ruby-rubocop-revived, поскольку оригинальная Rubocop больше не сопровождается.

Автор нового расширения даже добавил способ быстрого исправления кода  —  нажатие Ctrl + на проблемном коде:

Изображение автора

Но это еще не все  —  добьемся от Rubocop желаемого поведения. Снова запускаем из терминала rubocop --auto-gen-config. Им сгенерируется два файла .yml, в которых разместятся все задачи и конфигурация проекта:

Изображение автора

Одно из доступных руководств по стилю принадлежит Shopify. Установим его, хотя это необязательно.

Добавляем в библиотеку файла Gemfile следующее:

gem 'rubocop-shopify', require: false

И запускаем bundle. В ранее созданном файле rubocop.yml добавляем следующее:

inherit_gem: 
rubocop-shopify: rubocop.yml

Убедимся, что все нормально: перезапускаем VS Code.

Просмотрим код.

Запускаемым в терминале rubocop сканируется код и показываются текущие нарушения на основе руководства по стилю, изложенного в rubocop.yml.

Большинство нарушений, если таковые имеются, безопасно исправляются с помощью rubocop -a. Но не все  —  серьезные нарушения этой командой не изменяются:

Изображение автора

Подробнее о Rubocop см. на странице базового использования и rubocop.org.

Автодополнение ввода, документация и Gem Support

Хотя в установленные выше расширения Ruby встроено базовое автодополнение ввода, воспользуемся кое-чем получшее  —  Solargraph.

Понадобятся расширение и библиотека. Снова из вкладки Extensions устанавливаем Ruby Solargraph.

Добавляем в Gemfile это:

gem 'solargraph'

И устанавливаем, запуская из терминала bundle.

Теперь у нас имеется доступ к solargraph для завершения настройки.

Сначала с помощью solargraph download-core загружаем корректную документацию для установленной версии Ruby:

Изображение автора

Затем командой solargraph config генерируем файл solargraph.yml с настраиваемой базовой конфигурацией:

Изображение автора

Далее с помощью solargraph scan проверяем возможность сопоставления или анализа кода. При успешном сканировании код без проблем анализируется в Solargraph:

Изображение автора

Подготовив Solargraph, отражаем изменения в setting.json. Для работы Solargraph удалим часть предыдущего кода, файл должен выглядеть так:

{
"ruby.useBundler": true,
"ruby.rubocop.useBundler": true,
"solargraph.useBundler": true,
"solargraph.formatting": true,
"solargraph.diagnostics": true
}

Самые важные строчки  —  “solargraph.formatting”: true и “solargraph.diafnostics”: true. Включив этот функционал, мы обеспечиваем в расширении выполнение форматирования, статического анализа кода и добавляемой скоро проверки типов.

В качестве документации в Solargraph используется библиотека YARD, она же зависимость при установке.

Собираем информацию об установленных библиотеках и проекте, запуская bundle exec yard gems. Это процесс небыстрый, заварите кофе.

Перезапускаемся, и все должно быть готово.

Если языковой сервер с Solargraph не запускается, удаляем это:

"solargraph.useBundler": true

Или добавляем это:

"solargraph.transport": "stdio"

Подробнее см. в удобной документации Solargraph, в ней содержится детальное описание и другого функционала.

Проверка типов

Имеется много способов задействования проверки типов. А пока воспользуемся тем, что уже установлено.

В Solargraph этот функционал настроить легко.

Включаем его в .solargraph.yml, добавляя в reporters следующее:

- typecheck:strict

Убедимся, что все загружено корректно: перезапускаемся.

Библиотека YARD  —  одна из зависимостей Solargraph. С ней в код теперь добавляются типы @param и @return:

Изображение автора

Задав для проверки типов strict, получаем много мест, требующих нашего внимания:

Изображение автора

Подробнее см. в проверке типов на Solargraph и YARD с соответствующей документацией.

Заметность ошибок

Этот функционал необязательный, но хорошо сочетается с проверкой типов. Так почему бы не исправить очевидные ошибки? Он находится в Extensions, и не забываем перезапускаться:

Изображение автора

История гит коммитов

Это простой функционал. Из вкладки Extensions устанавливаем GitLens и получаем доступ к гит-функциям, в том числе встроенной истории коммитов:

Изображение автора

Черновик

Такой же простой функционал. Устанавливаем Scratchpads, перезапускаем VS Code.

Чтобы создать файл Scratchpad, нажимаем Ctrl + Shift + P, вводим Scratch и выбираем Scratchpads: new scratchpad и тип создаваемого файла:

Изображение автора

Эти созданные файлы не появятся в проекте, поэтому если закоммитить их по ошибке, то проблем не будет.

Открыть их так же легко, как создать, только выбирается Scratchpads: open scratchpad.

Gemfile-ссылки

Установим vscode-gemfile. Перезапустив VS Code, переходим в Gemfile и наводим курсор на любую библиотеку:

Изображение автора

Endwise

Отличное маленькое расширение, которым автоматически добавляется ключевое слово end:

Изображение автора

Автозавершение пути

Хорошее расширение для быстрой записи путей:

Изображение автора

Добавление скобок при строковой интерполяции

Простой способ добавить скобки при строковой интерполяции:

Изображение автора

Недостающий функционал

К сожалению, отсутствует важный для продуктивности функционал.

В VS Code для Ruby нет расширений для значков переопределения методов и встроенных подсказок:

Изображение автор

Лучшее, что можно здесь сделать: выбрать метод и с помощью Shift + F12 проверить все определения.

Заключение

Мы рассмотрели расширения и библиотеки для улучшения работы с кодом на Ruby и повышения продуктивности без каких-либо затрат. Именно так настраивается эта среда в проектах автоматизации.

Читайте также:

Читайте нас в TelegramVK и Дзен


Перевод статьи Daniel Fintinariu: Unlock the Potential of VS Code for Ruby Programming

Предыдущая статьяУправление состоянием в React: обзор
Следующая статьяСоздание надежной библиотеки JavaScript: пошаговое руководство