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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With