在ESLint中,您可以通过Esprima解析器使用ExpressionStatement
和VariableDeclarator
等关键字访问代码生成的抽象语法树中的特定节点。我想开发一个断言函数,它允许我将特定节点传递给ESLint的options
。
function validateExpressionStatement(context){
return {
context.options[1]: function (node) {
var source = context.getSource();
var sourceEval = eval(source);
if (!(sourceEval == context.options[0])) {
assertOk(false, "", `Expected a return value of ${context.options[0]}.`);
}
else {
assertOk(true, `${context.options[0]} was returned correctly.`)
}
}
}
}
我的断言会将用户输入的值推送到options数组中,这样我就可以在测试代码之前选择要检查的节点。
function assertExpressionStatementReturn(value, treelevel){
config["rules"]["validate-expression-statement"][1] = value;
config["rules"]["validate-expression-statemet"][2] = treelevel;
}
在这个特定的函数中,我正在使用我的断言检查AST中特定节点的返回值。我知道context.options[1]
不起作用。有没有办法实现这个目标?如果我需要澄清我正在寻找的东西,请告诉我。
答案 0 :(得分:0)
很抱歉,如果我误解了您的要求,但ESLint存储库中已有一些规则可以解决这个问题。例如,comma-style
可以接受AST节点类型列表作为例外。代码位于here。