javascript - 使用 Esprima 检测缺少的分号解析 JavaScript
问题描述
我正在使用esprima
andestraverse
模块对 JavaScript 代码进行静态分析。由于 JavaScript 不强制使用分号,因此在分析没有分号的代码时不会引发错误,但我希望这样做。
我想出的唯一解决方案是查找可能需要分号的表达式并检查是否有,但该esprima.parse
函数不记得任何分号的存在。标记化后它们似乎被忽略了。
> esprima.tokenize("a = 3;")
[
{ type: 'Identifier', value: 'a' },
{ type: 'Punctuator', value: '=' },
{ type: 'Numeric', value: '3' },
{ type: 'Punctuator', value: ';' } // <-- Present after tokenization
]
> console.log(JSON.stringify(esprima.parse("a = 3;"), null, 2))
{
"type": "Program",
"body": [
{
"type": "ExpressionStatement",
"expression": {
"type": "AssignmentExpression",
"operator": "=",
"left": {
"type": "Identifier",
"name": "a"
},
"right": {
"type": "Literal",
"value": 3,
"raw": "3"
}
}
}
],
"sourceType": "script"
}
// Not present anywhere
所以,简而言之:有没有办法在使用 esprima 对 javascript 代码进行静态分析时检测丢失的分号?
解决方案
推荐阅读
- bluetooth - 如何获得低功耗蓝牙制造商的名称
- html - Ionic flexbox 无法设置垂直输入
- angular - 如何访问shadowdom中的元素
- arduino - 我无法使用键盘输入转发伺服
- node.js - 如何根据字数拆分文本
- jquery - 鼠标单击时未显示选定的变体颜色价格
- validation - 简单的 SharePoint 验证 - 我的公式有什么问题?
- python-2.7 - 如何将文件从本地磁盘上传到谷歌云存储桶?
- javascript - Vue-Test-Utils 的“mount”和“shallowMount”的区别?
- bash - 在while循环中从函数分配变量值