版本

indent-legacy

强制一致的缩进

🔧 可修复

此规则报告的一些问题可以通过 --fix 命令行 选项自动修复

重要

此规则在 ESLint v4.0.0 中被弃用。请使用 @stylistic/eslint-plugin-js 中的 相应规则

了解更多

ESLint 4.0.0 引入了 indent 规则的重写,现在它比以前的版本报告更多的错误。为了简化迁移到 4.0.0 的过程,引入了 indent-legacy 规则,作为 ESLint 3.x 中 indent 规则的快照。如果你的构建在升级到 4.0.0 后失败,你可以禁用 indent 并启用 indent-legacy 作为快速修复。最终,你应该切换回 indent 规则,以便在未来的版本中获得错误修复和改进。


有几个常见的指南要求对嵌套块和语句进行特定的缩进,例如

function hello(indentSize, type) {
    if (indentSize === 4 && type !== 'tab') {
        console.log('Each next indentation will increase on 4 spaces');
    }
}

这些是在不同风格指南中推荐的最常见场景

  • 两个空格,不要更长,没有制表符:Google、npm、Node.js、Idiomatic、Felix
  • 制表符:jQuery
  • 四个空格:Crockford

规则详情

此规则强制执行一致的缩进风格。默认风格是 4 个空格

选项

此规则有一个混合选项

例如,对于 2 个空格的缩进

{
    "indent-legacy": ["error", 2]
}

或者对于制表符缩进

{
    "indent-legacy": ["error", "tab"]
}

使用默认选项时,此规则的 错误 代码示例

在 Playground 中打开
/*eslint indent-legacy: "error"*/

if (a) {
  b=c;
  function foo(d) {
    e=f;
  }
}

使用默认选项时,此规则的 正确 代码示例

在 Playground 中打开
/*eslint indent-legacy: "error"*/

if (a) {
    b=c;
    function foo(d) {
        e=f;
    }
}

此规则有一个对象选项

  • "SwitchCase" (默认值:0) 强制执行 switch 语句中 case 子句的缩进级别
  • "VariableDeclarator" (默认值:1) 强制执行 var 声明符的缩进级别;也可以接受一个对象来为 varletconst 声明定义单独的规则。
  • "outerIIFEBody" (默认值:1) 强制执行文件级 IIFE 的缩进级别。
  • "MemberExpression" (默认关闭) 强制执行多行属性链的缩进级别(变量声明和赋值除外)
  • "FunctionDeclaration" 接受一个对象来为函数声明定义规则。
    • parameters (默认关闭) 强制执行函数声明中参数的缩进级别。这可以是一个数字,表示缩进级别,或者字符串 "first",表示声明的所有参数必须与第一个参数对齐。
    • body (默认值:1) 强制执行函数声明主体的缩进级别。
  • "FunctionExpression" 接受一个对象来为函数表达式定义规则。
    • parameters (默认关闭) 强制执行函数表达式中参数的缩进级别。这可以是一个数字,表示缩进级别,或者字符串 "first",表示表达式的所有参数必须与第一个参数对齐。
    • body (默认值:1) 强制执行函数表达式主体的缩进级别。
  • "CallExpression" 接受一个对象来为函数调用表达式定义规则。
    • arguments (默认关闭) 强制执行调用表达式中参数的缩进级别。这可以是一个数字,表示缩进级别,或者字符串 "first",表示表达式的所有参数必须与第一个参数对齐。
  • "ArrayExpression" (默认值:1) 强制执行数组中元素的缩进级别。它也可以设置为字符串 "first",表示数组中的所有元素应与第一个元素对齐。
  • "ObjectExpression" (默认值:1) 强制执行对象中属性的缩进级别。它可以设置为字符串 "first",表示对象中的所有属性应与第一个属性对齐。

缩进级别表示指定缩进的倍数。例如

  • 缩进为 4 个空格,VariableDeclarator 设置为 2 将使多行变量声明缩进 8 个空格。
  • 缩进为 2 个空格,VariableDeclarator 设置为 2 将使多行变量声明缩进 4 个空格。
  • 缩进为 2 个空格,VariableDeclarator 设置为 {"var": 2, "let": 2, "const": 3} 将使多行变量声明中 varlet 缩进 4 个空格,const 语句缩进 6 个空格。
  • 缩进为制表符,VariableDeclarator 设置为 2 将使多行变量声明缩进 2 个制表符。
  • 缩进为 2 个空格,SwitchCase 设置为 0 将不会相对于 switch 语句缩进 case 子句。
  • 缩进为 2 个空格,SwitchCase 设置为 1 将相对于 switch 语句将 case 子句缩进 2 个空格。
  • 缩进为 2 个空格,SwitchCase 设置为 2 将相对于 switch 语句将 case 子句缩进 4 个空格。
  • 缩进为制表符,SwitchCase 设置为 2 将相对于 switch 语句将 case 子句缩进 2 个制表符。
  • 缩进为 2 个空格,MemberExpression 设置为 0 将使多行属性链缩进 0 个空格。
  • 缩进为 2 个空格,MemberExpression 设置为 1 将使多行属性链缩进 2 个空格。
  • 缩进为 2 个空格,MemberExpression 设置为 2 将使多行属性链缩进 4 个空格。
  • 缩进为 4 个空格,MemberExpression 设置为 0 将使多行属性链缩进 0 个空格。
  • 缩进为 4 个空格,MemberExpression 设置为 1 将使多行属性链缩进 4 个空格。
  • 缩进为 4 个空格,MemberExpression 设置为 2 将使多行属性链缩进 8 个空格。

tab

使用 "tab" 选项时,此规则的 错误 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", "tab"]*/

if (a) {
     b=c;
function foo(d) {
           e=f;
 }
}

使用 "tab" 选项时,此规则的 正确 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", "tab"]*/

if (a) {
	b=c;
	function foo(d) {
		e=f;
	}
}

SwitchCase

使用 2, { "SwitchCase": 1 } 选项时,此规则的 错误 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, { "SwitchCase": 1 }]*/

switch(a){
case "a":
    break;
case "b":
    break;
}

使用 2, { "SwitchCase": 1 } 选项时,此规则的 正确 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, { "SwitchCase": 1 }]*/

switch(a){
  case "a":
    break;
  case "b":
    break;
}

VariableDeclarator

使用 2, { "VariableDeclarator": 1 } 选项时,此规则的 错误 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, { "VariableDeclarator": 1 }]*/

var a,
    b,
    c;
let d,
    e,
    f;
const g = 1,
    h = 2,
    i = 3;

使用 2, { "VariableDeclarator": 1 } 选项时,此规则的 正确 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, { "VariableDeclarator": 1 }]*/

var a,
  b,
  c;
let d,
  e,
  f;
const g = 1,
  h = 2,
  i = 3;

使用 2, { "VariableDeclarator": 2 } 选项时,此规则的 正确 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, { "VariableDeclarator": 2 }]*/

var a,
    b,
    c;
let d,
    e,
    f;
const g = 1,
    h = 2,
    i = 3;

使用 2, { "VariableDeclarator": { "var": 2, "let": 2, "const": 3 } } 选项时,此规则的 正确 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, { "VariableDeclarator": { "var": 2, "let": 2, "const": 3 } }]*/

var a,
    b,
    c;
let e,
    f,
    g;
const h = 1,
      i = 2,
      j = 3;

outerIIFEBody

使用 2, { "outerIIFEBody": 0 } 选项时,此规则的 错误 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, { "outerIIFEBody": 0 }]*/

(function() {

  function foo(x) {
    return x + 1;
  }

})();

if(y) {
console.log('foo');
}

使用 2, {"outerIIFEBody": 0} 选项时,此规则的 正确 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, { "outerIIFEBody": 0 }]*/

(function() {

function foo(x) {
  return x + 1;
}

})();

if(y) {
  console.log('foo');
}

MemberExpression

使用 2, { "MemberExpression": 1 } 选项时,此规则的 错误 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, { "MemberExpression": 1 }]*/

foo
.bar
.baz()

使用 2, { "MemberExpression": 1 } 选项时,此规则的 正确 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, { "MemberExpression": 1 }]*/

foo
  .bar
  .baz();

// Any indentation is permitted in variable declarations and assignments.
var bip = aardvark.badger
                  .coyote;

FunctionDeclaration

使用 2, { "FunctionDeclaration": {"body": 1, "parameters": 2} } 选项时,此规则的 错误 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, { "FunctionDeclaration": {"body": 1, "parameters": 2} }]*/

function foo(bar,
  baz,
  qux) {
    qux();
}

使用 2, { "FunctionDeclaration": {"body": 1, "parameters": 2} } 选项时,此规则的 正确 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, { "FunctionDeclaration": {"body": 1, "parameters": 2} }]*/

function foo(bar,
    baz,
    qux) {
  qux();
}

使用 2, { "FunctionDeclaration": {"parameters": "first"} } 选项时,此规则的 错误 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, {"FunctionDeclaration": {"parameters": "first"}}]*/

function foo(bar, baz,
  qux, boop) {
  qux();
}

使用 2, { "FunctionDeclaration": {"parameters": "first"} } 选项时,此规则的 正确 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, {"FunctionDeclaration": {"parameters": "first"}}]*/

function foo(bar, baz,
             qux, boop) {
  qux();
}

FunctionExpression

使用 2, { "FunctionExpression": {"body": 1, "parameters": 2} } 选项时,此规则的 错误 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, { "FunctionExpression": {"body": 1, "parameters": 2} }]*/

var foo = function(bar,
  baz,
  qux) {
    qux();
}

使用 2, { "FunctionExpression": {"body": 1, "parameters": 2} } 选项时,此规则的 正确 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, { "FunctionExpression": {"body": 1, "parameters": 2} }]*/

var foo = function(bar,
    baz,
    qux) {
  qux();
}

使用 2, { "FunctionExpression": {"parameters": "first"} } 选项时,此规则的 错误 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, {"FunctionExpression": {"parameters": "first"}}]*/

var foo = function(bar, baz,
  qux, boop) {
  qux();
}

使用 2, { "FunctionExpression": {"parameters": "first"} } 选项时,此规则的 正确 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, {"FunctionExpression": {"parameters": "first"}}]*/

var foo = function(bar, baz,
                   qux, boop) {
  qux();
}

CallExpression

使用 2, { "CallExpression": {"arguments": 1} } 选项时,此规则的 错误 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, { "CallExpression": {"arguments": 1} }]*/

foo(bar,
    baz,
      qux
);

使用 2, { "CallExpression": {"arguments": 1} } 选项时,此规则的 正确 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, { "CallExpression": {"arguments": 1} }]*/

foo(bar,
  baz,
  qux
);

使用 2, { "CallExpression": {"arguments": "first"} } 选项时,此规则的 错误 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, {"CallExpression": {"arguments": "first"}}]*/

foo(bar, baz,
  baz, boop, beep);

使用 2, { "CallExpression": {"arguments": "first"} } 选项时,此规则的 正确 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, {"CallExpression": {"arguments": "first"}}]*/

foo(bar, baz,
    baz, boop, beep);

ArrayExpression

使用 2, { "ArrayExpression": 1 } 选项时,此规则的 错误 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, { "ArrayExpression": 1 }]*/

var foo = [
    bar,
baz,
      qux
];

使用 2, { "ArrayExpression": 1 } 选项时,此规则的 正确 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, { "ArrayExpression": 1 }]*/

var foo = [
  bar,
  baz,
  qux
];

使用 2, { "ArrayExpression": "first" } 选项时,此规则的 错误 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, {"ArrayExpression": "first"}]*/

var foo = [bar,
  baz,
  qux
];

使用 2, { "ArrayExpression": "first" } 选项时,此规则的 正确 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, {"ArrayExpression": "first"}]*/

var foo = [bar,
           baz,
           qux
];

ObjectExpression

使用 2, { "ObjectExpression": 1 } 选项时,此规则的 错误 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, { "ObjectExpression": 1 }]*/

var foo = {
    bar: 1,
baz: 2,
      qux: 3
};

使用 2, { "ObjectExpression": 1 } 选项时,此规则的 正确 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, { "ObjectExpression": 1 }]*/

var foo = {
  bar: 1,
  baz: 2,
  qux: 3
};

使用 2, { "ObjectExpression": "first" } 选项时,此规则的 错误 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, {"ObjectExpression": "first"}]*/

var foo = { bar: 1,
  baz: 2 };

使用 2, { "ObjectExpression": "first" } 选项时,此规则的 正确 代码示例

在 Playground 中打开
/*eslint indent-legacy: ["error", 2, {"ObjectExpression": "first"}]*/

var foo = { bar: 1,
            baz: 2 };

兼容性

版本

此规则在 ESLint v4.0.0-alpha.0 中引入。

资源

更改语言