Что делает этот инструмент
Форматтер Ruby переписывает код на Ruby с единообразными отступами и пробелами. Вставьте скрипт, модель Rails или Rakefile — и получите код с отступом в два пробела, одной инструкцией на строку, пробелами вокруг операторов и внутри фигурных скобок, а длинные цепочки вызовов методов будут перенесены по ширине строки.
Инструмент использует Syntax Tree на настоящем интерпретаторе Ruby, скомпилированном в WebAssembly. Поскольку парсер — собственный парсер Ruby, современный синтаксис, такой как однострочные (endless) методы, сопоставление с образцом и именованные аргументы, понимается ровно так, как его понимает Ruby.
Как пользоваться
- Вставьте код на Ruby или откройте файл
.rb. - Дождитесь первого результата. Интерпретатор скачивается один раз в фоновом режиме.
- Выберите Ширина строки. Строки длиннее этого значения разбиваются на вызовах методов, аргументах или элементах хеша.
- Скопируйте или скачайте отформатированный код.
Если код не удаётся разобрать, инструмент показывает синтаксическую ошибку Ruby, например syntax error, unexpected 'end', чтобы вы могли найти недостающую часть.
Пример
В примере — небольшой модуль корзины покупок, написанный без заботы об оформлении: тело класса без отступа, initialize в одну строку через точки с запятой, хеши без пробелов и тернарный оператор без пробелов вокруг >. После форматирования модуль и класс получают отступы, каждая инструкция в initialize — отдельную строку, литералы хешей становятся { name: name, price: price, qty: qty }, а тернарный оператор выглядит как cart.total > 10 ? "big order" : "small order".
Что инструмент не меняет
Форматтер меняет только оформление. Он не переименовывает переменные, не переводит «hash rockets» в новый синтаксис и не переключает одинарные и двойные кавычки. Комментарии сохраняются. Если нужны такие стилистические правки, после форматирования запустите автоисправление RuboCop в своём проекте.
Советы
- Используйте ту же ширину строки, что и в
.rubocop.ymlвашего проекта (Layout/LineLength), чтобы отформатированный код проходил линтер. - Форматирование — быстрый способ найти пропущенный
end: Ruby сообщает, где он сдался, обычно сразу после незакрытого блока.
Частые вопросы
› Какой форматтер здесь используется?
Syntax Tree — форматтер Ruby, лежащий в основе официального плагина Prettier для Ruby. Он работает на CRuby, стандартном интерпретаторе Ruby, скомпилированном в WebAssembly, поэтому разбирает код ровно так же, как сам Ruby.
› Почему первый запуск медленный?
При первом форматировании страница скачивает интерпретатор Ruby и форматтер (около 13 МБ) и запускает их в фоновом воркере, чтобы страница не зависала. После этого форматирование занимает доли секунды.
› Соответствует ли результат стилю RuboCop?
В основном да. Syntax Tree делает отступ в два пробела, ставит пробелы внутри фигурных скобок хешей и вокруг операторов и одну пустую строку между методами, что соответствует правилам оформления RuboCop по умолчанию. Он не меняет стиль кавычек и не переписывает код так, как это делает `rubocop -a`.
› Загружается ли мой код на сервер?
Нет. Всё выполняется в вашем браузере, и ничего не отправляется на сервер.