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

Validate JavaScript code without enforcing a specific style

本文关键字:情况下 验证 JavaScript 代码 样式 强制执行      更新时间:2023-09-26

我想验证一些JavaScript代码的语法正确性,但不向用户强制执行特定的编码样式。

我的第一种方法是使用esprima附带的esvalidate。这部分完成了任务,因为它检测到意外的令牌,例如:

constx foo = {};

它所做的而不是检测到的是从未声明的变量的使用,例如:

const foox = {
  bar() {}
};
foo.bar();

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

我还有什么其他选择?如果没有这些工作,我如何验证代码?

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

几年前,Linters只是在那里检查代码的样式。如今他们做得越来越多。甚至是静态分析。ESLint是一个非常强大的工具,IMHO正是您想要的。

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

默认情况下不启用任何规则。

此外,在整个时间内拥有一致的编码风格是非常有益的,如果你和你的团队找到了一个共同的基线,你可以在项目之间共享.eslintrc

启用no-undef规则并为您的IDE使用插件,比如其中一个应该可以解决您的问题->开发时的静态代码分析:)

为了回答您的最后一个问题,我认为您想要的是静态分析。一般来说,JavaScript会更难做到这一点,因为它具有动态特性,缺少类型,而且工具相对缺乏成熟度。例如,几十年来一直在为C编写静态分析器,这项工作不会立即转移到其他语言中。

像jshint这样的东西可能是你想要的,因为它的目标是帮助开发人员"编写复杂的程序,而不用担心拼写错误和语言问题"。

希望这能有所帮助!

ESLint推荐集:推荐的规则旁边有复选标记,不包括任何风格规则。您可以使用它来验证脚本的有效性,而无需强制执行任何特定的样式。至少这是一个很好的起点,你可以随时关闭你不喜欢的规则。