在不强制执行特定样式的情况下验证 JavaScript 代码

Validate JavaScript code without enforcing a specific style

我想验证一些 JavaScript 代码的语法正确性,但不强制用户使用特定的编码风格。

我的第一个方法是使用 esprima 附带的 esvalidate。这部分完成了工作,因为它检测到意外的标记,例如:

constx foo = {};

它的作用 not 检测的是从未声明过的变量的使用,例如:

const foox = {
  bar() {}
};

foo.bar();

eslint 之类的工具可以检测到这一点,但是很难以不向用户强制执行特定样式的方式配置 ESLint(我不是说这不可能,我只是说这是一项巨大的工作量,因为您需要检查每条规则并决定是启用还是禁用它,而且有数百条规则,这是……是的,好吧,工作量巨大)。

我还有哪些其他选择?如果没有这些努力,我如何验证代码?

顺便说一句:我想在这里验证什么?这不是语法(我的意思是,从语法上讲,一切都很好,只是没有意义),但也不是语义。此类支票的正确术语是什么?

回答你最后一个问题,我想你想要的是static analysis。一般来说,JavaScript 会更难,因为它的动态特性和类型的缺乏,以及工具相对缺乏成熟度。例如,为 C 语言编写静态分析器已经花费了数十年的时间,而这项工作不会立即转移到其他语言中。

jshint 之类的东西可能是您想要的,因为它的目标是帮助开发人员 "write complex programs without worrying about typos and language gotchas"。

希望对您有所帮助!

几年前,Linters 只是用来检查代码的风格。现在他们做得更多,更多。甚至静态分析。 ESLint is such a powerful tool and IMHO it is exactly what you're looking for.

您可能认为初始配置可能很昂贵,但正如 ESLint 页面所说:

No rules are enabled by default.

此外,having a consistent coding style across your time is very beneficial 如果您和您的团队找到共同的基线,您可以在项目之间共享 .eslintrc

启用 no-undef rule and using a plugin for your IDE, like one of those 应该可以解决您的问题 -> 开发时的静态代码分析 :)

ESLint 推荐集:Recommended rules have checkmark next to them 不包含任何文体规则。您可以使用它来验证脚本的有效性,而无需强制执行任何特定样式。至少这是一个很好的起点,你可以随时关闭你不喜欢的规则。