我想验证一些JavaScript代码的语法正确性,但不对用户强制执行特定的编码风格。
我的第一种方法是使用esvalidate
附带的esprima
。这部分地完成了工作,因为它检测到意外的令牌,例如:
constx foo = {};
它不检测的内容是使用从未声明过的变量,例如:
const foox = {
bar() {}
};
foo.bar();
像eslint
这样的工具会检测到这一点,但很难以一种不对用户强制执行特定样式的方式配置ESLint(我不说这是不可能的,我只是说它是一个大量的工作,因为你需要检查每一条规则,并决定是否启用它,并且有数百条规则,这是......是的,好的,大量的工作)。
我还有其他选择吗?如果不付出这些努力,我怎么能验证代码?
顺便问一下:我想在这里验证什么?这不是语法(我的意思是,在语法上,一切都很好,它只是没有意义),但它也不是语义。这种检查的正确用语是什么?
答案 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不包含任何样式规则。您可以使用它来验证脚本的有效性,而不强制执行任何特定样式。至少它是一个很好的起点,你可以随时关闭你不喜欢的规则。