验证JavaScript代码而不强制执行特定样式

时间:2016-07-31 06:31:49

标签: javascript validation eslint esprima

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

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

constx foo = {};

检测的内容是使用从未声明过的变量,例如:

const foox = {
  bar() {}
};

foo.bar();

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

我还有其他选择吗?如果不付出这些努力,我怎么能验证代码?

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

3 个答案:

答案 0 :(得分:1)

多年前,Linters只在那里检查代码的样式。如今他们做得更多,更多。甚至是静态分析。 ESLint is such a powerful tool and IMHO it is exactly what you're looking for

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

  

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

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

启用no-undef规则并为IDE使用插件,例如one of those应解决您的问题 - >开发时的静态代码分析:)

答案 1 :(得分:0)

要回答你的上一个问题,我认为你想要的是static analysis。一般来说,由于其动态性和缺乏类型,以及工具相对缺乏成熟度,JavaScript会更难。例如,几十年的工作已经用于为C编写静态分析器,并且该工作不会立即转移到其他语言中。

jshint这样的东西可能就是你想要的,因为它的目标是帮助开发人员“编写复杂的程序而不必担心错别字和语言问题”。

希望这有帮助!

答案 2 :(得分:0)

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