Привет. Наверное, стоит отдельно попиарить, что теперь в bem-xjst есть опция runtimeLint. С помощью неё вы сможете получать предупреждения о нежелательных или опасных местах в ваших шаблонах и входных данных (BEMJSON-е). Включить опцию можно начиная с версии 7.2.0 вот так. Предупреждения можно будет поймать в STDERR.
Вот краткое описание какого рода проверки выполняются уже сейчас.
Булевы атрибуты
Актуально для тех, чей проект раньше использовал шаблонизатор версии ниже чем v4.x.
Пример BEMJSON-а: { tag: 'input', attrs: { disabled: true } }
Результат с v4.3.2: <input disabled=“true”/>
Результат с v4.3.3: <input disabled/>
Подробнее об изменениях в описании к релизу: https://github.com/bem/bem-xjst/releases/tag/v4.3.3
elemMods вместе с block вместо mods
В 5.0.0 был исправлен баг который приводил к неверному трактованию полей mods
и elemMods
. Подробности есть в описании релиза. Сейчас если вы попытаетесь передать в BEMJSON что-то типа { block: 'b', elemMods: { … } }
, то получите warning.
Изменения this.ctx.mods через шаблоны
Такие фокусы будут награждены предупреждением, потому что хороший шаблон не должен иметь сайдэффектов, и не должен изменять входной узел BEMJSON-а. Чтобы изменить модификаторы вы должны использовать this.mods
.
Атрибуты class или data-bem созданные через BEMJSON-поле attrs или шаблон режима attrs()
Для генерации HTML-класса используйте режим cls()
.
Для генерации параметров для клиентского JS используйте режим js()
.
Иначе будет вываливаться предупреждение.
Проверки нейминга
Имена блоков, элементов, модификаторов, а так же значения модификаторов не должны содержать разделителей имени элемента (обычно это __
) и разделителей модификаторов (_
).
Миксы модификаторов к таким же модификаторам
Всевозможная акробатика вида { block: 'b', mix: [ { mods: { type: 'test' } }, { mods: { type: 'shmest' } } ] }
, будет награждена предупреждением.
Если у вас есть идеи какие проверки можно добавить еще — пишите мне. Спасибо.
Продолжение следует.