So siehts ganz gut aus !
This commit is contained in:
98
node_modules/pug-lexer/test/check-lexer-functions.test.js
generated
vendored
Normal file
98
node_modules/pug-lexer/test/check-lexer-functions.test.js
generated
vendored
Normal file
@@ -0,0 +1,98 @@
|
||||
var fs = require('fs');
|
||||
var acorn = require('acorn');
|
||||
var walk = require('acorn/dist/walk');
|
||||
|
||||
var hadErrors = false;
|
||||
|
||||
var lexerFunctions = {
|
||||
advance: true,
|
||||
append: true,
|
||||
attributesBlock: true,
|
||||
attrs: true,
|
||||
blank: true,
|
||||
block: true,
|
||||
blockCode: true,
|
||||
call: true,
|
||||
case: true,
|
||||
className: true,
|
||||
code: true,
|
||||
colon: true,
|
||||
comment: true,
|
||||
conditional: true,
|
||||
default: true,
|
||||
doctype: true,
|
||||
dot: true,
|
||||
each: true,
|
||||
eos: true,
|
||||
endInterpolation: true,
|
||||
extends: true,
|
||||
filter: true,
|
||||
id: true,
|
||||
include: true,
|
||||
indent: true,
|
||||
interpolation: true,
|
||||
isExpression: true,
|
||||
mixin: true,
|
||||
mixinBlock: true,
|
||||
path: true,
|
||||
pipelessText: true,
|
||||
prepend: true,
|
||||
slash: true,
|
||||
tag: true,
|
||||
text: true,
|
||||
textHtml: true,
|
||||
when: true,
|
||||
while: true,
|
||||
yield: true,
|
||||
};
|
||||
|
||||
function checkDirectCalls (node) {
|
||||
var callee = node.callee;
|
||||
if (callee.type !== 'MemberExpression') return;
|
||||
if (callee.object.type !== 'ThisExpression') return;
|
||||
var property = callee.property;
|
||||
var func;
|
||||
if (callee.computed) {
|
||||
if (property.type !== 'Literal') return;
|
||||
func = property.value;
|
||||
} else {
|
||||
func = property.name;
|
||||
}
|
||||
if (!lexerFunctions[func]) return;
|
||||
console.log('index.js:' + node.loc.start.line + ':' + node.loc.start.column + ': Lexer function ' + func + ' called directly');
|
||||
hadErrors = true;
|
||||
}
|
||||
|
||||
function checkMissingLexerFunction (node) {
|
||||
var callee = node.callee;
|
||||
if (callee.type !== 'MemberExpression') return;
|
||||
if (callee.object.type !== 'ThisExpression') return;
|
||||
var property = callee.property;
|
||||
var func;
|
||||
if (callee.computed) {
|
||||
if (property.type !== 'Literal') return;
|
||||
func = property.value;
|
||||
} else {
|
||||
func = property.name;
|
||||
}
|
||||
if (func !== 'callLexerFunction') return;
|
||||
if (!node.arguments.length) return;
|
||||
if (node.arguments[0].type !== 'Literal') return;
|
||||
func = node.arguments[0].value;
|
||||
if (lexerFunctions[func]) return;
|
||||
console.log('index.js:' + node.loc.start.line + ':' + node.loc.start.column + ': Lexer function ' + func + ' not in lexerFunctions list');
|
||||
hadErrors = true;
|
||||
}
|
||||
test('lexer functions', () => {
|
||||
var str = fs.readFileSync(__dirname + '/../index.js', 'utf8');
|
||||
var ast = acorn.parse(str, {locations: true});
|
||||
walk.simple(ast, {
|
||||
CallExpression: function (node) {
|
||||
checkDirectCalls(node);
|
||||
checkMissingLexerFunction(node);
|
||||
}
|
||||
});
|
||||
if (hadErrors) {
|
||||
throw new Error('Problem with lexer functions detected');
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user