Pull to refresh

Неудобно редактировать ERb/EEx шаблоны? Попробуйте Slim/Slime

Reading time2 min
Views5.4K

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.

Tags:
Hubs:
+10
Comments13

Articles

Change theme settings