ERb — стандартный язык разметки в мире Ruby. Это html со вставками на Ruby. В мире Elixir ту же роль выполняет EEx. Такой же синтаксис, только вместо Ruby — Elixir. Вот как это выглядит:
<!DOCTYPE html>
<html>
<head>
<title>Заголовок</title>
<meta name="keywords" content="template <%= language_name %>">
<meta name="author" content="<%= user_name %>">
</head>
<body>
<h1 class="page-header"><%= page_header %></h1>
<div id="content">
<p><%= page_content %></p>
Дополнительный текст.
</div>
</body>
</html>
То же самое можно написать в 1.5 раза короче без потери читаемости.
Встречайте: язык разметки Slim и его Elixir-аналог Slime:
Прошу прощенья за картинку вместо текста, Хабр неправильно подсвечивает Slim.
Особенности
- Вложенность управляется отступами. Всё равно ведь форматируете код;
- Сокращённый синтаксис для айдишников и классов;
- Если название тега не указано, подставится
div
; Атрибуты можно по желанию обрамлять либо не обрамлять скобками:
meta name="author" meta[name="author"] meta(name="author") meta{name="author"}
- Поддерживается текстовыми редакторами. Вообще, без подсветки синтаксиса slim'ом было бы невозможно пользоваться: названия тегов и их содержимое сливались бы. А с подсветкой всё ок.
- Есть интеграция с популярными фреймворками (Rails, Sinatra, Phoenix);
- Работает быстро. Здесь бенчмарк от 2014 года. Показывается, что Slim чуть медленнее Erb (Slime работает со скоростью EEx).
Как перевести проект на Slim?
Есть онлайн-конвертер; подойдёт, если темплейтов не много. Есть гем html2slim, который сконвертирует все темплейты проекта:
$ gem install html2slim
$ erb2slim app/views
Как перевести проект на Slime?
Программистов на Elixir'е меньше, чем рубистов (кстати, как их называть, «эликсиристы»?). Slime используется и того реже. В общем, когда я, поплевавшись часик на EEx, пошёл искать реализацию Slim, обнаружил экосистему Slime в незрелом состоянии. Т.е. сам язык работал, с фениксом отлично интегрировался, но общее впечатление было как от клавиатуры с западающей клавишей.
Что ж, это opensource. Закатив рукава, я добавил поддержку Slime в Sublime Text, улучшил официальный сайт языка (slime-lang.com) и сделал утилиту eex2slime для конвертирования. Проверял её на опенсорсных исходниках hex.pm и changelog.com: из-за небольших ограничений Slime исходные шаблоны пришлось немного подготовить, но в целом конвертация происходит успешно. Эта утилита — адаптация гема html2slim, поэтому для работы нужен Ruby >= 1.9.3. Использование:
$ gem install eex2slime
$ eex2slime lib/web/templates/
Ещё сделал онлайн-конвертер. Пока что он работает только в режиме slime->eex. Полезен для проверки того, как именно отработает конкретный Slime-темплейт.
Оно того стоит?
Писать и редактировать код на Slim'е быстрее, чем на Erb. Из минусов: не все его знают; кому-то синтаксис кажется плохо читаемым. Впрочем, выучить его просто, а подсветка синтаксиса избавляет от возможных проблем с читаемостью.
Eсли команда вашего проекта небольшая и коллеги не против — попробовать Slim/Slime стоит.
P.S. Если писать горы тегов неудобно, а синтаксис Slim не нравится, можете попробовать Emmet.