Статьи

Представляем Sass-совместимость

Уже несколько недель я — с помощью некоторых людей — собираю несоответствия между Ruby Sass и LibSass. Сначала это был не что иное, как GitHub Gist, но потом я сделал из него CodePen с пользовательской таблицей стилей и всем остальным. Этого все еще было недостаточно, поэтому я сделал из него полный проект. Позвольте мне представить Sass-совместимость .

Целью Sass-Compatibility является предоставление списка несоответствий между различными движками Sass. Конечно, не только Ruby Sass и LibSass, но также Ruby Sass 3.2 и Ruby Sass 3.3 или Ruby Sass 3.3 и Ruby Sass 3.4.

Основной сценарий — вы хотите перенести свою кодовую базу в LibSass, но не уверены, сможете ли вы сделать это из-за отсутствующих функций. Мы вас прикрыли. Перейдите на https://sass-compatibility.github.io , проведите экскурсию и убедитесь сами, можете ли вы потерять некоторые функции, чтобы насладиться скоростью LibSass.

Примечание: по теме обязательно прочитайте « Переключение с Ruby Sass на LibSass» от Джеймса Стейнбаха.

Сайт совместимости Sass

Как это работает?

В самом начале это было в основном ручное тестирование на SassMeister , а затем запись результатов в таблицу. Довольно утомительно и не очень масштабируемо (тем более, что я выделил более 30 несоответствий), поэтому я быстро перешел на полностью автоматизированную систему благодаря Валериану Галлиату .

Возможно, вы этого не знаете, но есть проект под названием sass-spec . Sass-spec стремится предоставить набор тестов для двигателей Sass, чтобы убедиться, что они соответствуют официальной версии Sass для Ruby. Тем не менее, мы должны отметить, что проект в настоящее время находится в странном состоянии, в котором есть некоторые тесты только для LibSass, некоторые старые тесты из Ruby Sass pre-3.0, некоторые отключенные тесты … По сути, что-то вроде беспорядка.

Тем не менее, сопровождающие LibSass проделывают огромную работу, чтобы все функции тестировались с помощью sass-spec. Это означает, что каждый фрагмент кода, который объединяется в базе кода LibSass, имеет тест, написанный в проекте sass-spec.

Благодаря этому мы решили использовать тесты LibSass, а не переписывать их. Из-за несоответствий, в которых нет тестов, я либо добавил один в sass-spec, либо написал его специально для Sass-Compatibility. В конечном счете, цель будет состоять в том, чтобы использовать только тесты sass-spec, а не мои собственные, но в то же время мы должны делать то, что должны делать.

Во всяком случае, у нас есть список функций с некоторыми связанными тестами . Функция может (должна?) Иметь несколько тестов, чтобы убедиться, что она покрыта на 100%. Затем у нас есть (потрясающе крутой ) Rakefile, который перебирает все тесты всех функций и запускает их благодаря бэкэнду SassMeister . Затем он пишет файл поддержки , который используется в представлении для отображения всего.

Что теперь?

Во-первых, скоро должен быть выпущен LibSass 3.1, исправляющий множество несоответствий с Ruby Sass 3.4, например:

  • transparent не распознаваемый как цвет ( libsass # 700 );
  • rebeccapurple не распознается как цвет ( libsass # 699 );
  • not и / or не являются зарезервированными именами функций ( libsass # 713 );
  • @error не поддерживается ( libsass # 704 );
  • уменьшение @for петли не работают ( libsass # 703 );
  • feature-exists не существует ( libsass # 702 );
  • inspect функцию не поддерживается ( libsass # 701 );
  • random функция не поддерживается ( libsass # 657 );
  • функция unique-id не поддерживается ( libsass # 636 );
  • карты с ключами в кавычках, которые нельзя использовать в качестве переменных аргументов ( libsass # 721 );
  • null может быть соединен ( libsass # 698 ).

Вероятно, я пропустил множество исправлений ошибок и дополнительных функций, тем не менее, это должно означать гораздо больше зеленых блоков в столбце LibSass для Sass-Compatibility. Это может даже привести к удалению некоторых функций, если я уверен, что они работают в каждом движке.

Sass Compatibility Preview

В том же духе я хотел бы избежать запуска собственных тестов и использовать только те из sass-spec. Это должно быть выполнимо, так как Майкл Мифсуд сказал мне, что он, а также команды Sass и LibSass, хотят, чтобы sass-spec был единственным тестовым набором для всех двигателей.

Как вы можете внести свой вклад?

Есть несколько вещей, которые вы можете сделать, чтобы внести свой вклад в Sass-совместимость. Лучше всего было бы найти несоответствие между LibSass и Ruby Sass (или любым другим движком в принципе) и открыть вопрос об этом. Оттуда мы попытаемся добавить его на сайт и сообщить об этом либо Ruby Sass, либо LibSass, чтобы они могли это исправить.

В том же духе нам всегда нужно больше тестов и лучших тестов. Если вы думаете, что можете улучшить набор тестов (либо по sass-spec, либо по собственным тестам Sass-Compatibility), было бы здорово, если бы вы могли подать небольшой запрос на извлечение . Некоторые функции, такие как @extend или @at-root , довольно сложны для тестов во всей их полноте, поэтому обязательно сообщите нам, если вы обнаружили непокрытый крайний случай.

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

В любом случае, я надеюсь, что этот проект поможет сообществу Sass двигаться вперед.