Мне нужно, чтобы мой плагин генератора Jekyll запускался после другого, но другому нужен последний приоритет

У меня есть собственный плагин Jekyll, а именно генератор, который мне нужно запускать после другого плагин, jekyll-titles-from-headings. Однако у другого плагина есть генератор, который указывает, что он имеет _ 2_ (т.е. последний запущенный) приоритет.

Временное решение, которое я собрал вместе, также определяет приоритет :lowest и запускается после jekyll-titles-from-headings, но по причинам, которые я не могу понять. Я хочу иметь объявление в моем собственном классе генератора, которое гарантирует, что мой плагин будет после этого другого генератора.

В моем собственном классе генератора я попытался переопределить сравнение noreferrer. операторы, которые появляются для подключаемый модуль управления упорядочивает (хакерским способом) жестко кодировать результат сравнения -1 для моего класса. Это не подействовало. Я попытался указать пользовательское @priority значение -200 (поскольку оказалось, что :lowest = -100). Это не компилировалось.

Как я могу гарантировать, что мой генератор всегда будет работать после этого плагина другого генератора? Если бы существовал способ указать его в качестве постреквизита для другого генератора, это было бы идеально.


person Carter Pape    schedule 21.02.2021    source источник


Ответы (1)


Это абсолютный взлом, но вы можете переопределить метод космического корабля для плагина следующим образом:

class Generator < Jekyll::Generator
  ...

  # Override the Jekyll::Plugin spaceship to push our plugin to the very end
  def self.<=>(*)
    1
  end

  ...
end

Jekyll запускает .sort() на плагинах, которые обычно меняют приоритеты, но при переопределении космического корабля ваш плагин всегда будет сортировать себя последним (если другой плагин не сделает то же самое, и в этом случае вы вернетесь к нестабильной сортировке в последнюю очередь).

Подобно использованию !important в CSS, это довольно некрасиво, и его следует избегать, но это работает.

Для менее глобального взлома вы можете написать метод космического корабля, чтобы специально проверять, по какому плагину он сортируется, и выполнять указанное выше поведение только в том случае, если он сортирует по jekyll-titles-from-headings, что эффективно обеспечивает пост-необходимое поведение без потенциального конфликта с другим плагином.

person Liam Bigelow    schedule 21.02.2021
comment
Последнее предложение делает это менее хакерским. Я думаю, что пытался переопределить функцию космического корабля, но я попробую еще раз. - person Carter Pape; 22.02.2021