Уже несколько недель я — с помощью некоторых людей — собираю несоответствия между 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» от Джеймса Стейнбаха.
Как это работает?
В самом начале это было в основном ручное тестирование на 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-spec. Это должно быть выполнимо, так как Майкл Мифсуд сказал мне, что он, а также команды Sass и LibSass, хотят, чтобы sass-spec был единственным тестовым набором для всех двигателей.
Как вы можете внести свой вклад?
Есть несколько вещей, которые вы можете сделать, чтобы внести свой вклад в Sass-совместимость. Лучше всего было бы найти несоответствие между LibSass и Ruby Sass (или любым другим движком в принципе) и открыть вопрос об этом. Оттуда мы попытаемся добавить его на сайт и сообщить об этом либо Ruby Sass, либо LibSass, чтобы они могли это исправить.
В том же духе нам всегда нужно больше тестов и лучших тестов. Если вы думаете, что можете улучшить набор тестов (либо по sass-spec, либо по собственным тестам Sass-Compatibility), было бы здорово, если бы вы могли подать небольшой запрос на извлечение . Некоторые функции, такие как @extend
или @at-root
, довольно сложны для тестов во всей их полноте, поэтому обязательно сообщите нам, если вы обнаружили непокрытый крайний случай.
Кроме того, если вы нашли что-то, что выглядит неправильно для вас, пожалуйста, свяжитесь с нами, чтобы мы могли проверить, что происходит. Ошибки случаются.
В любом случае, я надеюсь, что этот проект поможет сообществу Sass двигаться вперед.