Установка и настройка редактора кода

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

Для Ruby существуют 2 наиболее популярных редактора кода: RubyMine и Visual Studio Code

Так как RubyMine платный, а на данный момент из РФ возможность оплаты отсутствует, то в данном руководстве я покажу как установить Visual Studio Code.

Установка

Для начала скачайте себе сам Visual Studio Code:

MacOS

Для начала зайдите на официальный сайт загрузки редактора кода и выберете установку для Mac. После чего на ваш компьютер скачается .zip архив. Вам необходимо его разархивировать его просто дважды нажав на скаченный архив. После этого дважды нажмите на разархивированный ярлык Visual Studio Code. Система сама установит приложение и откроет редактор кода.

После чего откройте каталог проекта курса в редакторе с помощью file -> open folder.

Linux

Для начала зайдите на официальный сайт и выберете для Linux подходящий вариант установки: если у вас Ubuntu или Mint или другой Debian подобный дистрибутив, то на странице загрузки выберете .deb установку. Если у вас как и у меня Oracle Linux, то необходимо выбрать .rpm установку. Далее просто выполните в консоли команды из руководства и в вашем меню приложений появится Visual Studio Code.

После чего запустите редактор кода и откройте каталог проекта курса в редакторе с помощью file -> open folder.

Windows

Для начала скачайте себе установочный файл для Windows на официальном сайте загрузки редактора кода и установите. Никаких проблем возникнуть не должно по ходу установки. В процессе установки будут предложены дополнительные опции, например добавить редактор в контекстное меню, везде ставим галки. После чего запустите его и откройте каталог проекта курса с помощью file -> open folder.

Visual Studio Code имеет 2 режима работы: из под Windows и из под Linux. Первый режим работы нам не так сильно интересен, поэтому зажимаем клавиши CTRL + Shift + P и находим в появившейся строке команду WSL: Reopen Folder in WSL и выбираем ваш Linux дистрибутив. В дальнейшем ваш проект должен будет автоматически открываться в режиме WSL при повторном открытии редактора кода.

Настройка

Прежде чем приступать к настройкам редактора, необходимо установить гемы. Что такое гем подробнее мы разберем чуть позже, но пока что имейте в виду, что гем - это программа, написанная на Ruby и программы из данного списка позволяют облегчить нам жить.

gem install solargraph # программа, которая будет отвечать за подсказки
gem install rubocop # программа, которая будет отвечать за форматирование и подсказки по улучшению внешнего вида кода
gem install rubocop-rails # программа, содержащая настройки линтинга и форматирования для Rails приложений

Теперь когда мы установили Visual Studio Code, то можно поставить необходимый плагины для разработки на Ruby. Откройте Visual Studio Code, перейдите во вкладку с расширениеями (extensions) и установите следующие расширения:

  • VSCode Ruby от издателя Stafford Brunk. Данное расширение улучшает подсветку ключевых слов для Ruby в VSCode.

  • Ruby Solargraph от издателя Castwide. Данное расширение добавляет нам следующие опции:

    • Autocomplete - при написании кода редактор будет предлагать нам дописать код за нас, показывая возможные сценарии использования. Также в меню подсказок мы сможешь увидеть описание тех или иных сценариев, что облегчит вам понимание ответа на вопрос: "А что это функция делает ?".

    • Linting - В Ruby сообществе за долгое время сформированы те или иные практики по написанию "чистого" кода. Вы сможетее увидеть описание почему так не стоит писать, а для более развернутого ответа можете скопировать название правила из подсказки и загуглить его.

    • Formatting - форматирование кода. При написании чистого кода не принято делать отступы какие вам вздумается. Форматирование будет приводить отступы к единому формату, удалять лишние строки и тд. , в общем, делать ваш код более красивым в написании.

    • Definition - Позволяет использовать навигацию по файлу (Ctrl + Shift + O)

Теперь необходимо настроить наш плагин Ruby Solargraph, перейдя в File → Preferences → Settings. Там находим в боковом меню Extensions → Solargraph settings for Ruby и выставляем следующие параметры:

  • completion - true - Включаем Autocomplete.

  • definition - true - Включаем Definition.

  • diagnostics - true - Включаем Linting.

  • formatting - true - Включаем Formatting.

  • autoformat - true - Включаем автоматический Formatting.

На последок давай создадим в папке твоего курса (без перехода в папку с главой/модуля) файл .rubocop.yml. Это будут правила для форматирования и линтинга, которые упростят написание кода. Добавьте в файл следующее содержимое:

# Наследуем конфигурацию для Rails приложения
require: rubocop-rails

# Включаем конфигурацию для Rails приложения
Rails:
  Enabled: true

Layout/EndOfLine:
  Enabled: False

# Задаем максимальную длину строки, после которой код считается грязным
Layout/LineLength:
  Max: 120

# Задаем максимальный размер метода в строках, после которого код будет считаться грязным
Metrics/MethodLength: 
  Max: 20

# Задаем максимальный размер класса в строках, после которого код будет считаться грязным
Metrics/ClassLength:
  Max: 1500

# При добавлении дефолтного значения не должно быть пробелов с обоих сторон знака =
Layout/SpaceAroundEqualsInParameterDefault:
  EnforcedStyle: no_space

# При создании строки выбираем предпочтение к одинарным ковычкам ('')
# Кроме случаев, когда необходима интерполяция строки 
Style/StringLiterals:
  EnforcedStyle: single_quotes

# Начиная с Ruby 2.0 мы можем объявлять массив символов с новым синтаксисом
# Вместо [:foo, :bar, :baz], можно писать %i[foo bar baz]
# Включаем приоритет для нового синтаксиса 
Style/SymbolArray:
  Enabled: true

# форматирование хэша в виде таблицы
Layout/HashAlignment:
  EnforcedHashRocketStyle: table
  EnforcedColonStyle: table

# Не дает нам возможности смешивать стрелочный синтаксис хэша и через двоеточие
Style/HashSyntax:
  EnforcedStyle: ruby19_no_mixed_keys

# Убираем ругань на методы has_key? и has_value?
Style/PreferredHashMethods:
  Enabled: false

# Делаем строковое форматирование только с помощью знака %
Style/FormatString:
  EnforcedStyle: percent

Style/CollectionMethods:
  Enabled: true
  PreferredMethods:
    # В сообществе принято использовать inject вместо reduce
    reduce: "inject"


# Разрешаем писать условия без скобок
Style/ParenthesesAroundCondition:
  AllowSafeAssignment: false
  
# Разрешаем писать приравнивание условия к значению без скобок
Lint/AssignmentInCondition:
  AllowSafeAssignment: false

# Отключаем проверку передачи обязательного сообщения в ошибку
Style/RaiseArgs:
  Enabled: false

# Данное правило мешает писать вызовы методов в формате цепочки, отключаем
Layout/MultilineOperationIndentation:
  Enabled: false

# fail - alias для raise. Лучше избегать использование псеводнимов для чистоты кода
Style/SignalException:
  EnforcedStyle: only_raise

# Убираем обязательную обработку ошибок
Lint/SuppressedException:
  Enabled: false

Layout/SpaceInsideBlockBraces:
  # Убираем пробелы по бокам при объявлении однострочого блока
  SpaceBeforeBlockParameters: false

# Убираем лишние пробелы при объявлении хэш таблицы
Layout/SpaceInsideHashLiteralBraces:
  EnforcedStyle: no_space

# Разрешаем писать блок в формате { ... } для нескольких строк
Style/BlockDelimiters:
  Enabled: false

# Зарещаем вызывать методы у многострочного блока без присваивания переменной
Style/MethodCalledOnDoEndBlock:
  Enabled: true

# Отключаем принудительное изменение имен переменных в однобуквенные
Style/SingleLineBlockParams:
  Enabled: false

# Отключаем необходимость придумывать новые имена переменных, 
# если снаружи уже объявлена переменная с таким же названием
# чтобы не изобретать дурацкие названия "лишь бы работало"
Lint/ShadowingOuterLocalVariable:
  Enabled: false

# Отключаем обязательное документирование всех классов
Style/Documentation:
  Enabled: false 

# Отключаем проверку на обяхательное нзавание аргумента other, 
# если метод называется в виде арифметического оператора
Naming/BinaryOperatorParameterName:
  Enabled: false 

# Отключаем конфиг по дебагу из-за бесполезности
Lint/Debugger:
  Enabled: false

# Отключаем проверки на скобки при объявлении метода
Style/MethodDefParentheses:
  Enabled: false

# Отключаем необходимость каждый раз добавлять коммент про frozen строки
Style/FrozenStringLiteralComment:
  Enabled: false

Готово. Настройка окружения завершена. Многие пункты могут показаться непонятными, но со временем понимания будет больше. Сейчас главное, чтобы все установилось и работало.

Дополнительный материал:

Last updated