Sass не будет компилироваться при использовании Libsass (аргумент не должен быть пустым)

Поэтому я использую довольно сложный Sass, чтобы удалить все остальные селекторы из "&"

.test, .test-2, .test-3, .test-4 {
    $selectors: (&);
    @if length(&) != 1 {
        $selectors: (); // Works only with Ruby Sass
        $i: 1;
        @each $item in (&) {
            $i: $i + 1;
            @if $i % 2 == 0 {
                $i: 0;
            }@else{
                $selectors: append($selectors, $item);
            }
        }
      $selectors: to-string($selectors, ", ");
        content: "#{$selectors}";
    }
}

Мой ожидаемый результат для атрибута содержимого:

content: ".test-2, .test-4";

При использовании Ruby Sass это именно то, что я получаю. При использовании Libsass я получаю эту ошибку:

argument `$list` of `nth($list, $n)` must not be empty 

Эта ошибка относится к коду внутри пользовательской функции "to-string", которую я использую:

@function to-string($list, $glue: '', $is-nested: false, $recursive: false) {
    $result: null;
    @for $i from 1 through length($list) {
        $e: nth($list, $i);
        @if type-of($e) == list and $recursive {
            $result: $result#{to-string($e, $glue, true)};
        }  
        @else {
            $result: if(
                $i != length($list) or $is-nested, 
                $result#{$e}#{$glue}, $result#{$e}
            );
        }
    }
    @return $result;
}

Более конкретно, эта строка:

$e: nth($list, $i);

Похоже, что значение, которое я передаю to-string функция (которая является $selectors переменная) пуста, когда этого не должно быть. Я изначально определяю как пустой ($selectors: ();), но затем я добавляю все остальные элементы из &, Так что я не уверен, почему он пуст в данный момент.

Вот Sassmesiter, демонстрирующий проблему: http://sassmeister.com/gist/332dae9a27983edd9d15

Измените компилятор в вышеприведенной демонстрации на Libsass, чтобы увидеть ошибку.

Я не уверен, если это проблема с моим кодом или с Libsass. Я не хочу открывать вопрос о Libsass, если я точно не знаю, что это проблема Libsass.

Спасибо

1 ответ

Хорошо, я докопался до этого. Совершенно уверен, что это проблема Libsass.

Похоже, вы не можете пройти через каждый элемент в & напрямую, но если я храню & в переменной он продолжает работать.

Итак, чтобы уточнить, изменив это:

@each $item in & {
    ...
}

к этому:

$this: &;
@each $item in $this {
    ...
}

Решает проблему.

Другие вопросы по тегам