Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pug/Jade get all variables in a given template

For a given Jade/Pug template I would like to get a list of all variables which occur within the template.

My motivation is as follows: In my software, different templates are used to generate some HTML snippets. Based on a given context (i.e. values for certain variables are given), I would like to suggest only those templates, where all variables within the template can be assigned.

Example: For template myTemplate like this:

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

I would like to get some output like this:

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

Is there something available ready-to-use? Preferably a solution which would take into account all language-specific features such as includes, extends, etc.

like image 858
qqilihq Avatar asked Oct 29 '22 17:10

qqilihq


1 Answers

This is not a full answer to your problem but more of a starting point. From debugging the pug code, i have noticed you could probably "hook" a plugin in one of the steps of template "compilation" to code. Look here. It seems that in the various steps of compilation, you can access the diffrent nodes present in the template.

You could also look at this, it seems to offer almost what you are looking for.

If you do something like

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});

The contents of tokens is an array of the diffrent tokens, the one that are of type "code" or "interpolate-code" seem to be the diffrent variables.

Hope this helps

like image 135
Mathieu de Lorimier Avatar answered Jan 02 '23 20:01

Mathieu de Lorimier