问题:
我正在改进eslint-plugin-jasmine
包的,试图在未调用匹配器时再处理一个无效的Jasmine
expect()
:
expect(true).toBeDefined;
有效用法:
expect(true).toBeDefined();
我变得非常接近 - 我可以确定expect()
上有成员表达式:
// matcher was not called
MemberExpression: function (node) {
if (node.object && node.object.callee.name === 'expect') {
console.log(node.property)
}
}
但有效和无效案例中的node.property
属于Identifier
类型:
Node {
type: 'Identifier',
start: 13,
end: 24,
loc:
SourceLocation {
start: Position { line: 1, column: 13 },
end: Position { line: 1, column: 24 } },
range: [ 13, 24 ],
name: 'toBeDefined' }
并没有明显的迹象表明这是属性或方法。
问题:
如何在ESLint
中确定属性是否可调用?
答案 0 :(得分:1)
expect(true).toBeDefined
被解析为MemberExpression
节点,但expect(true).toBeDefined()
解析为CallExpression
。我真的不是100%确定为什么会发生这种情况,但在第二种情况下,它似乎认为直到开括号的整个陈述是一个CallExpression
,我希望有两个单独的{{ 1}},但似乎并非如此。
所以你可以做的就是听CallExpression
并检查被叫CallExpression
的名字为Identifier
。然后检查祖父母是expect
还是MemberExpression
。