qqilihq qqilihq - 6 days ago 5
Jade Question

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

like this:

title= myTitle
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.


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 = `
        title= myTitle
        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