非常教程

Eslint参考手册

规则 | Rules

yoda

--fix命令行上的选项可以自动修复一些被这条规则反映的问题。

Yoda 条件是如此命名的,因为条件的字面值首先出现,而变量出现在第二位。例如,以下是 Yoda 条件:

if ("red" === color) {
    // ...
}

被称为 Yoda 条件的原因是它读作“如果红色等于颜色”,类似于星球大战角色 Yoda 所说的方式。与安排操作数的其他方式相比:

if (color === "red") {
    // ...
}

这通常表示“如果颜色等于红色”,这可以说是一种更自然的方式来描述比较。

Yoda 条件的支持者强调,不可能错误地使用,=而不是==因为你不能分配字面值。这样做会导致语法错误,并会在早期通知您错误。因此,这种做法在早期的编程工具中尚不可用的情况下非常普遍。

Yoda 条件的反对者指出,工具使我们更好的程序员,因为工具会抓住错误的使用,=而不是==(ESLint会为你着想)。因此,他们认为,模式的效用不会超过代码在使用 Yoda 条件时需要的可读性。

规则细节

这条规则旨在强制执行一种将变量与文字值进行比较的一致条件样式。

选项

此规则可以采用字符串选项:

  • 如果它是默认值"never",那么比较绝不能是 Yoda 条件。
  • 如果是"always",那么字面值必须始终在前。
  • 默认"never"选项可以在对象文字中具有异常选项:
  • If the "exceptRange" property is true, the rule allows yoda conditions in range comparisons which are wrapped directly in parentheses, including the parentheses of an if or while condition. The default value is false. A range comparison tests whether a variable is inside or outside the range between two literal values.
  • If the "onlyEquality" property is true, the rule reports yoda conditions only for the equality operators == and ===. The default value is false.

onlyEquality选项允许超出允许的例外exceptRange,因此这两个选项在一起不起作用。

决不

不正确的代码为默认"never"选项的示例:

/*eslint yoda: "error"*/

if ("red" === color) {
    // ...
}

if (true == flag) {
    // ...
}

if (5 > count) {
    // ...
}

if (-1 < str.indexOf(substr)) {
    // ...
}

if (0 <= x && x < 1) {
    // ...
}

默认选项的正确代码示例"never"

/*eslint yoda: "error"*/

if (5 & value) {
    // ...
}

if (value === "red") {
    // ...
}

exceptRange

"never", { "exceptRange": true }选项的正确代码示例:

/*eslint yoda: ["error", "never", { "exceptRange": true }]*/

function isReddish(color) {
    return (color.hue < 60 || 300 < color.hue);
}

if (x < -1 || 1 < x) {
    // ...
}

if (count < 10 && (0 <= rand && rand < 1)) {
    // ...
}

function howLong(arr) {
    return (0 <= arr.length && arr.length < 10) ? "short" : "long";
}

onlyEquality

"never", { "onlyEquality": true }选项的正确代码示例:

/*eslint yoda: ["error", "never", { "onlyEquality": true }]*/

if (x < -1 || 9 < x) {
}

if (x !== 'foo' && 'bar' != x) {
}

always

"always"选项的错误代码示例:

/*eslint yoda: ["error", "always"]*/

if (color == "blue") {
    // ...
}

"always"选项的正确代码示例:

/*eslint yoda: ["error", "always"]*/

if ("blue" == value) {
    // ...
}

if (-1 < str.indexOf(substr)) {
    // ...
}

进一步阅读

  • Yoda Conditions
  • Yoda Notation and Safe Switching
  • Rule source
  • Documentation source

规则 | Rules相关

1.accessor-pairs
2.array-bracket-newline
3.array-bracket-spacing
4.array-callback-return
5.array-element-newline
6.arrow-body-style
7.arrow-parens
8.arrow-spacing
9.block-scoped-var
10.block-spacing
11.brace-style
12.callback-return
13.camelcase
14.capitalized-comments
15.class-methods-use-this
16.comma-dangle
17.comma-spacing
18.comma-style
19.complexity
20.computed-property-spacing
21.consistent-return
22.consistent-this
23.constructor-super
24.curly
25.default-case
26.dot-location
27.dot-notation
28.eol-last
29.eqeqeq
30.for-direction
31.func-call-spacing
32.func-name-matching
33.func-names
34.func-style
35.function-paren-newline
36.generator-star
37.generator-star-spacing
38.getter-return
39.global-require
40.global-strict
41.guard-for-in
42.handle-callback-err
43.id-blacklist
44.id-length
45.id-match
46.implicit-arrow-linebreak
47.indent
48.indent-legacy
49.init-declarations
50.jsx-quotes
51.key-spacing
52.keyword-spacing
53.line-comment-position
54.linebreak-style
55.lines-around-comment
56.lines-around-directive
57.lines-between-class-members
58.max-depth
59.max-len
60.max-lines
61.max-nested-callbacks
62.max-params
63.max-statements
64.max-statements-per-line
65.multiline-comment-style
66.multiline-ternary
67.new-cap
68.new-parens
69.newline-after-var
70.newline-before-return
71.newline-per-chained-call
72.no-alert
73.no-array-constructor
74.no-arrow-condition
75.no-await-in-loop
76.no-bitwise
77.no-buffer-constructor
78.no-caller
79.no-case-declarations
80.no-catch-shadow
81.no-class-assign
82.no-comma-dangle
83.no-compare-neg-zero
84.no-cond-assign
85.no-confusing-arrow
86.no-console
87.no-const-assign
88.no-constant-condition
89.no-continue
90.no-control-regex
91.no-debugger
92.no-delete-var
93.no-div-regex
94.no-dupe-args
95.no-dupe-class-members
96.no-dupe-keys
97.no-duplicate-case
98.no-duplicate-imports
99.no-else-return
100.no-empty
Eslint

ESLint 是一个代码规范和错误检查工具,有以下几个特性。所有东西都是可以插拔的。你可以调用任意的 rule api 或者 formatter api 去打包或者定义 rule or formatter。任意的 rule 都是独立的。没有特定的 coding style,你可以自己配置。

主页 https://eslint.org/
源码 https://github.com/eslint/eslint
发布版本 4.12.0

Eslint目录

1.指南 | Guide
2.规则 | Rules