是否有最佳方法来查看单行或 block 注释是否仅仅是被注释掉的代码,或者是否是实际的注释。
例如
// console.log('foo');
Should validate
true
of being a code comment.
// This does stuff
Should validate
false
of being a code comment.
当前解决方案:
将评论内容解析为 AST,看看它是否是代码,有点像验证器。
假设:
- 我可以访问已解析为 AST 的原始代码,并且可以访问注释节点。
- 将是一个节点脚本。
最佳答案
您需要收集评论文本,并通过语言子字符串识别器运行它。您可能有:
/* X=2.7*Y^3+9.3^Y2+2.7* */
对我来说,这看起来像是代码,即使它不完整。
因此,一般来说,您希望检测语言的子字符串,而不是任意选择的语言结构。 (即使您选择仅扩展语法定义的非终结符,您的复杂语法中是否包含所有 1000 个非终结符?只是“语句”或“表达式”?
您的第一个问题是决定“评论”从哪里开始或结束。是
// X=X+1;
/* foo(bar);
bar(baz);
*/
一个代码块还是两个(或三个)代码块?如果明显的代码被注释分开怎么办?
// X=X+
/* 1; */
我猜你最大的问题是找到一个语言子字符串解析器。仅仅因为您拥有完整语言的解析器并不意味着您可以轻松地用它构建子字符串识别器。 (我们通过为我们的工具弯曲 GLR 解析器来做到这一点,如果您想了解更多信息,请参阅我的简介)。
你最难的问题是意图:程序员是否真的注释掉了实际代码,或者她只是在注释中勾勒出计算结果?除非你能读懂早已消失的思想,否则你无法知道。
关于javascript - 区分代码注释和文本注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40854422/