批量修复JSHints在项目中找到的缺少分号

时间:2013-12-30 22:24:31

标签: javascript command-line gruntjs jshint

根据JSHint,我有一个包含100多个javascript文件的项目,每个文件都有1-5个缺少的分号(因此有多个人在使用不同约定的项目上工作)。

我想批量修复所有内容,因为单独修复每个内容都不切实际。我发现了这个问题:https://github.com/jshint/fixmyjs但是我没有看到只修复分号的方法而且没有修复'其他的东西(制表符 - 例如>空格)。

有谁知道这样做的方法?我对它可能导致破损/引入错误的可能性感到满意。我已经查看了错误,看起来很常规。

3 个答案:

答案 0 :(得分:13)

我真的希望你喜欢这个解决方案。修复问题后,请务必小心再次使用jshint进行验证。出于好奇,你是如何设法获得这么多破解的javascript文件的?

#!/bin/sh
function fixFile {
  for i in `jshint $1 | grep -i "Missing semicolon" \
                      | sed -e 's/\([^0-9]*\)\([0-9]*\)\(.*$\)/\2/'`;
  do
    sed -i $1 -e $i's/\(\s*\)$/;/'
  done
}

fixFile $1

上面使用jshint生成一些错误行,只为缺少的分号错误greps它们,提取每个错误的行号,然后在该行上就地放置文件以删除任何尾随空格并用分号替换它

文件......

var a = 5, c = 4

function helloWorld() {
  if (this == doesntmakesense)
    console.log('hello' + 'world');
}

console.log(a+c);
console.log('finished')   

... ...变为

var a = 5, c = 4;

function helloWorld() {
  if (this == doesntmakesense)
    console.log('hello' + 'world');
}

console.log(a+c);
console.log('finished');

忽略小的语义错误,只处理分号。

我将bash脚本保存为类似fixFile.sh的内容,然后运行find . -name "*.js" -exec ./fixFile.sh {} \;

但请事先提交。所有命令的运行风险均由您自行承担;)

答案 1 :(得分:11)

有一种比使用正则表达式更安全的添加缺失分号的方法。使用以下步骤将fixmyjs配置为仅修复Evan最初提出的分号:

  1. 安装fixmyjs

    npm install fixmyjs -g

  2. 使用以下内容创建fixmyjs配置文件fixmyjs-config

    { "asi": false }

  3. 运行fixmyjs

    fixmyjs --config [fixmyjs-config] --legacy yourfile.js

  4. 参考:https://github.com/jshint/fixmyjs/issues/86

答案 2 :(得分:1)

谷歌关闭JS Linter有一个附带它的程序,能够纠正一些更常规的违规行为,比如这个,我相信它的名字是fixjsstyle(python btw)