2016-11-09 3 views
3

Для данного шаблона Jade/Pug я хотел бы получить список всех переменных, которые встречаются в шаблоне.Pug/Jade получить все переменные в заданном шаблоне

Мотивация такова: в моем программном обеспечении для генерации некоторых фрагментов HTML используются разные шаблоны. На основе данного контекста (т. Е. Значения для определенных переменных), я хотел бы предложить только те шаблоны, где могут быть назначены все переменные в шаблоне.

Пример: Для шаблона myTemplate, как это:

html 
    head 
     title= myTitle 
    body 
     h1 #{value.headline} 
     p #{paragraph.text} 

Я хотел бы получить выход так:

var variableNames = extractVariableNamesFromTemplate('myTemplate'); 
// variableNames = [ 'myTitle', 'value.headline', 'paragraph.text' ] 

Есть ли что-то доступно готовые к использованию? Предпочтительно решение, которое учитывало бы все специфические для языка функции, такие как включает, расширяет и т. Д.

ответ

1

Это не полный ответ на вашу проблему, но больше отправной точки. Отлаживая код мопса, я заметил, что вы, вероятно, можете «подключить» плагин к одному из шагов шаблона «компиляция» для кода. Посмотрите here. Кажется, что на разных этапах компиляции вы можете получить доступ к различным узлам, присутствующим в шаблоне.

Вы также можете посмотреть this, он предлагает почти то, что вы ищете.

Если вы что-то вроде

var lex = require('pug-lexer'); 

var filename = 'template.pug'; 
var src = ` 
html 
    head 
     title= myTitle 
    body 
     h1 #{value.headline} 
     p #{paragraph.text}`; 

var tokens = lex(src, {filename}); 

содержимого лексем является массивом diffrent лексем, тот, который имеет типа «кода» или «интерполировать-код» кажется diffrent переменными.

Надеюсь, это поможет

+0

Спасибо, Матье! Это выглядит чрезвычайно ценным. Он по-прежнему требует дополнительной логики, например. для условных и переменных назначений, но это большой шаг в правильном направлении. PS: Если я не получу более полное решение в течение следующих двух дней, щедрость ваша! – qqilihq

Смежные вопросы