// 根据 knightli 提供的配置改编, 欢迎试用 // update by kaelyang 2015/07/31 { // 参考 http://jslinterrors.com/ // ==============预定义变量============ "globals":{ "$": true, "jQuery": true, "exports": true, "module": true, "define": true, "require": true, "it": true, "before": true, "describe": true, "beforeEach": true, "afterEach": true, "__inline": true, "__uri": true }, // ==============Legacy Options============ // 注: 这些选项继承自jslint // 当变量名以"_"开头或结尾时,是否告警 "nomen": false, // 是否只允许出现一个var在函数中 "onevar": false, // 是否遇到第一个错误的时候就终止 "passfail": false, // 让JSHint检查你的代码是否违反道格拉斯的JS编码风格(严格的空白规范??). "white": false, // 最大错误数目,超过则停止分析(默认:50) "maxerr": 50, // ==============Environments Options============ // 是否预定义现代浏览器暴露出来的全局变量(不包括alert和console) "browser": true, // 是否预定义console,alert这种开发阶段的调试代码 "devel": true, // 该选项定义了一些非标准但广泛使用的全局变量,像"escape"和"unescape". "nonstandard": true, // ==============Enforcing Options============ // 禁止使用位运算符 "bitwise": true, // 只允许使用camelCase or UPPER_CASE "camelcase": false, // 必须给block加括号 "curly": false, // 不安全的== (会建议换成===或者!==) "eqeqeq": false, // 不安全的for in "forin": false, // 立即函数调用必须用(function(){}())而不是(function(){})() "immed": true, // 必须先定义再使用 "latedef": false, // 构造函数名的首字母必须大写 "newcap": true, // 禁止arguments.caller和arguments.callee的使用(ES5的严格模式中被禁用了,并且不是所有js实现中都有) "noarg": true, // 禁止空的代码块或未赋值的构造器 "noempty": false, // 不允许不做赋值的构造函数 "nonew": true, // 不允许使用++或者--的操作符 "plusplus": false, // 正则中不允许使用.或者[^…] "regexp": false, // 未定义的XXX "undef": true, // 未使用的XXX "unused": false, // 需要使用strict mode,详见http:// ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/ "strict": false, // 行末有多余的空格 "trailing": false, // 配置单双引号规则: "false"或者不设置 不做限制 "single" 只许单引号 "double" 只许双引号 "true" 两者选其一,但不能同时出现 "quotmark": "false", // 配置缩进规则: 设置缩进对应的空格数,如不设置,则不对缩进做要求 // 注: 这里配置了indent,则即使上面的white设置了false,也还是会导致 swindent 报warning(https:// github.com/jshint/jshint/issues/935) // TODO:确认jshint解决了 swindent 的支持后可重新配置此项 // "indent": 4, // 配置单行代码的最大长度 // "maxlen": 120, // 配置函数的最多参数个数: 参数过多时,可读性下降,可考虑用options对象字段来减少参数个数 // "maxparams": 5, // 配置函数内代码块嵌套最多层数 // "maxdepth": 5, // 配置函数内最多有多少条语句(一个函数声明会被当作一条语句) // "maxstatements": 50, // 配置最大圈复杂度(http://en.wikipedia.org/wiki/Cyclomatic_complexity) // "maxcomplexity": 10, // TODO:打开来优化代码复杂度 // ==============Relaxing Options============ // 代码末尾缺失分号,是否放过 "asi": false, // for等预期是==的地方用了=,是否放过 "boss": false, // 代码中有debugger语句,是否放过 "debug": false, // 使用"=="来比较变量与null,是否放过 "eqnull": false, // ES5语法校验报警,是否放过 "es5": false, // ECMAScript 6语法校验报警,是否放过 "esnext": true, // 代码中使用了eval,是否放过 "evil": true, // 只允许在函数调用或赋值时使用表达式(原因???) 2 > 1 ? (alert(1)) : (alert(2)); "expr": true, // 在控制语句中定义了变量,却在控制语句之外使用变量 function(){ if(1) {var x = 0;} x = x + 1;} "funcscope": false, // 使用了全局级别的严格模式,是否放过 "globalstrict": false, // 使用了__iterator__这个属性(并非所有浏览器支持), 是否放过 (原因???) "iterator": false, // 是否允许单行语句块中最后一条语句不写分号 "lastsemic": false, // 是否允许出现不安全的换行(示例???) "laxbreak": true, // 是否允许逗号出现在行首的换行方式 "laxcomma": false, // 是否允许在循环里定义函数 "loopfunc": true, // 是否允许多行字符串(原因???) "multistr": true, // 是否允许在代码中使用__proto__属性(并非所有浏览器支持) "proto": false, // 是否允许在switch语句中只出现一个case "onecase": true, // 是否允许unescaped - in the end of regular expressions. "regexdash": false, // 是否允许在代码中使用"javascript:..."这样的url "scripturl": true, // 是否使用smarttab风格混用tab和space(http:// www.emacswiki.org/emacs/SmartTabs) "smarttabs": false, // 是否允许使用shadow变量(shadow变量:当一个变量所在的作用域之外还有一个同名的变量,称为shadow变量) // http:// stackoverflow.com/questions/5373278/variable-shadowing-in-javascript "shadow": false, // 是否允许用obj['name']和obj.name两种方式访问对象的属性 "sub": true, // 是否允许使用像"new function() {...}"这样怪异的构造器 "supernew": true, // 是否允许在严格模式下的非构造函数中使用this(该选项只能用于函数作用域中) "validthis": false, // Missing radix parameter to parseInt (defaults to 10) "-W065": false, // Literal accessor is better written in dot notation "-W069": false }