# indent-legacy
此规则在 ESLint v4.0.0 中已弃用。
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');
}
}
这些是不同风格指南中推荐的最常见场景:
- 两个空格,不是更长也没有制表符:谷歌、npm、Node.js、惯用语、Felix
- Tabs: jQuery
- 四个空格:Crockford
# 规则详情
此规则强制执行一致的缩进样式。默认样式为 4 spaces
。
# 选项
此规则有一个混合选项:
例如,对于 2 个空格缩进:
{
"indent": ["error", 2]
}
或者对于标签缩进:
{
"indent": ["error", "tab"]
}
具有默认选项的此规则的错误代码示例:
/*eslint indent: "error"*/
if (a) {
b=c;
function foo(d) {
e=f;
}
}
具有默认选项的此规则的正确代码示例:
/*eslint indent: "error"*/
if (a) {
b=c;
function foo(d) {
e=f;
}
}
此规则有一个对象选项:
"SwitchCase"
(默认:0) 强制switch
语句中case
子句的缩进级别"VariableDeclarator"
(默认:1) 强制var
声明符的缩进级别;也可以用一个对象为var
、let
和const
声明定义单独的规则。"outerIIFEBody"
(默认:1) 强制文件级 IIFE 的缩进级别。"MemberExpression"
(默认关闭)强制多行属性链的缩进级别(变量声明和赋值除外)"FunctionDeclaration"
接受一个对象来定义函数声明的规则。parameters(默认关闭)强制函数声明中参数的缩进级别。这可以是表示缩进级别的数字,也可以是表示声明的所有参数必须与第一个参数对齐的字符串 "first"。 body(默认:1) 强制函数声明体的缩进级别。
"FunctionExpression"
接受一个对象来定义函数表达式的规则。parameters(默认关闭)强制函数表达式中参数的缩进级别。这可以是表示缩进级别的数字,也可以是表示表达式的所有参数必须与第一个参数对齐的字符串 "first"。 body(默认:1) 强制函数表达式主体的缩进级别。
"CallExpression"
接受一个对象来定义函数调用表达式的规则。arguments(默认关闭)强制调用表达式中参数的缩进级别。这可以是表示缩进级别的数字,也可以是表示表达式的所有参数必须与第一个参数对齐的字符串 "first"。
"ArrayExpression"
(默认:1) 强制数组中元素的缩进级别。也可以设置为字符串"first"
,表示数组中的所有元素都应该与第一个元素对齐。"ObjectExpression"
(默认:1) 强制对象中属性的缩进级别。可以设置为字符串"first"
,表示对象中的所有属性都应该与第一个属性对齐。
缩进级别表示指定缩进的倍数。例子:
- 将
VariableDeclarator
设置为2
缩进 4 个空格将使多行变量声明缩进 8 个空格。 - 缩进 2 个空格并将
VariableDeclarator
设置为2
将使多行变量声明缩进 4 个空格。 - 将
VariableDeclarator
设置为{"var": 2, "let": 2, "const": 3}
缩进 2 个空格将缩进多行变量声明,其中var
和let
缩进 4 个空格,const
语句缩进 6 个空格。 - 将
VariableDeclarator
设置为2
的制表符缩进将使用 2 个制表符缩进多行变量声明。 - 缩进 2 个空格并将
SwitchCase
设置为0
不会缩进case
子句相对于switch
语句。 - 缩进 2 个空格并将
SwitchCase
设置为1
将缩进case
子句,其中 2 个空格相对于switch
语句。 - 缩进 2 个空格并将
SwitchCase
设置为2
将相对于switch
语句缩进 4 个空格的case
子句。 - 将
SwitchCase
设置为2
的制表符缩进将相对于switch
语句缩进具有 2 个制表符的case
子句。 - 缩进 2 个空格并将
MemberExpression
设置为0
将缩进具有 0 个空格的多行属性链。 - 缩进 2 个空格并将
MemberExpression
设置为1
将缩进具有 2 个空格的多行属性链。 - 缩进 2 个空格并将
MemberExpression
设置为2
将缩进具有 4 个空格的多行属性链。 - 缩进 4 个空格并将
MemberExpression
设置为0
将缩进 0 个空格的多行属性链。 - 将
MemberExpression
设置为1
缩进 4 个空格将缩进 4 个空格的多行属性链。 - 缩进 4 个空格并将
MemberExpression
设置为2
将缩进具有 8 个空格的多行属性链。
# tab
此规则使用 "tab"
选项的错误代码示例:
/*eslint indent: ["error", "tab"]*/
if (a) {
b=c;
function foo(d) {
e=f;
}
}
此规则使用 "tab"
选项的正确代码示例:
/*eslint indent: ["error", "tab"]*/
if (a) {
/*tab*/b=c;
/*tab*/function foo(d) {
/*tab*//*tab*/e=f;
/*tab*/}
}
# SwitchCase
此规则使用 2, { "SwitchCase": 1 }
选项的错误代码示例:
/*eslint indent: ["error", 2, { "SwitchCase": 1 }]*/
switch(a){
case "a":
break;
case "b":
break;
}
此规则使用 2, { "SwitchCase": 1 }
选项的正确代码示例:
/*eslint indent: ["error", 2, { "SwitchCase": 1 }]*/
switch(a){
case "a":
break;
case "b":
break;
}
# VariableDeclarator
此规则使用 2, { "VariableDeclarator": 1 }
选项的错误代码示例:
/*eslint indent: ["error", 2, { "VariableDeclarator": 1 }]*/
/*eslint-env es6*/
var a,
b,
c;
let a,
b,
c;
const a = 1,
b = 2,
c = 3;
此规则使用 2, { "VariableDeclarator": 1 }
选项的正确代码示例:
/*eslint indent: ["error", 2, { "VariableDeclarator": 1 }]*/
/*eslint-env es6*/
var a,
b,
c;
let a,
b,
c;
const a = 1,
b = 2,
c = 3;
此规则使用 2, { "VariableDeclarator": 2 }
选项的正确代码示例:
/*eslint indent: ["error", 2, { "VariableDeclarator": 2 }]*/
/*eslint-env es6*/
var a,
b,
c;
let a,
b,
c;
const a = 1,
b = 2,
c = 3;
此规则使用 2, { "VariableDeclarator": { "var": 2, "let": 2, "const": 3 } }
选项的正确代码示例:
/*eslint indent: ["error", 2, { "VariableDeclarator": { "var": 2, "let": 2, "const": 3 } }]*/
/*eslint-env es6*/
var a,
b,
c;
let a,
b,
c;
const a = 1,
b = 2,
c = 3;
# outerIIFEBody
带有选项 2, { "outerIIFEBody": 0 }
的此规则的错误代码示例:
/*eslint indent: ["error", 2, { "outerIIFEBody": 0 }]*/
(function() {
function foo(x) {
return x + 1;
}
})();
if(y) {
console.log('foo');
}
带有选项 2, {"outerIIFEBody": 0}
的此规则的正确代码示例:
/*eslint indent: ["error", 2, { "outerIIFEBody": 0 }]*/
(function() {
function foo(x) {
return x + 1;
}
})();
if(y) {
console.log('foo');
}
# MemberExpression
此规则使用 2, { "MemberExpression": 1 }
选项的错误代码示例:
/*eslint indent: ["error", 2, { "MemberExpression": 1 }]*/
foo
.bar
.baz()
此规则使用 2, { "MemberExpression": 1 }
选项的正确代码示例:
/*eslint indent: ["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} }
选项的错误代码示例:
/*eslint indent: ["error", 2, { "FunctionDeclaration": {"body": 1, "parameters": 2} }]*/
function foo(bar,
baz,
qux) {
qux();
}
此规则使用 2, { "FunctionDeclaration": {"body": 1, "parameters": 2} }
选项的正确代码示例:
/*eslint indent: ["error", 2, { "FunctionDeclaration": {"body": 1, "parameters": 2} }]*/
function foo(bar,
baz,
qux) {
qux();
}
此规则使用 2, { "FunctionDeclaration": {"parameters": "first"} }
选项的错误代码示例:
/*eslint indent: ["error", 2, {"FunctionDeclaration": {"parameters": "first"}}]*/
function foo(bar, baz,
qux, boop) {
qux();
}
此规则使用 2, { "FunctionDeclaration": {"parameters": "first"} }
选项的正确代码示例:
/*eslint indent: ["error", 2, {"FunctionDeclaration": {"parameters": "first"}}]*/
function foo(bar, baz,
qux, boop) {
qux();
}
# FunctionExpression
此规则使用 2, { "FunctionExpression": {"body": 1, "parameters": 2} }
选项的错误代码示例:
/*eslint indent: ["error", 2, { "FunctionExpression": {"body": 1, "parameters": 2} }]*/
var foo = function(bar,
baz,
qux) {
qux();
}
此规则使用 2, { "FunctionExpression": {"body": 1, "parameters": 2} }
选项的正确代码示例:
/*eslint indent: ["error", 2, { "FunctionExpression": {"body": 1, "parameters": 2} }]*/
var foo = function(bar,
baz,
qux) {
qux();
}
此规则使用 2, { "FunctionExpression": {"parameters": "first"} }
选项的错误代码示例:
/*eslint indent: ["error", 2, {"FunctionExpression": {"parameters": "first"}}]*/
var foo = function(bar, baz,
qux, boop) {
qux();
}
此规则使用 2, { "FunctionExpression": {"parameters": "first"} }
选项的正确代码示例:
/*eslint indent: ["error", 2, {"FunctionExpression": {"parameters": "first"}}]*/
var foo = function(bar, baz,
qux, boop) {
qux();
}
# CallExpression
此规则使用 2, { "CallExpression": {"arguments": 1} }
选项的错误代码示例:
/*eslint indent: ["error", 2, { "CallExpression": {"arguments": 1} }]*/
foo(bar,
baz,
qux
);
此规则使用 2, { "CallExpression": {"arguments": 1} }
选项的正确代码示例:
/*eslint indent: ["error", 2, { "CallExpression": {"arguments": 1} }]*/
foo(bar,
baz,
qux
);
此规则使用 2, { "CallExpression": {"arguments": "first"} }
选项的错误代码示例:
/*eslint indent: ["error", 2, {"CallExpression": {"arguments": "first"}}]*/
foo(bar, baz,
baz, boop, beep);
此规则使用 2, { "CallExpression": {"arguments": "first"} }
选项的正确代码示例:
/*eslint indent: ["error", 2, {"CallExpression": {"arguments": "first"}}]*/
foo(bar, baz,
baz, boop, beep);
# ArrayExpression
此规则使用 2, { "ArrayExpression": 1 }
选项的错误代码示例:
/*eslint indent: ["error", 2, { "ArrayExpression": 1 }]*/
var foo = [
bar,
baz,
qux
];
此规则使用 2, { "ArrayExpression": 1 }
选项的正确代码示例:
/*eslint indent: ["error", 2, { "ArrayExpression": 1 }]*/
var foo = [
bar,
baz,
qux
];
此规则使用 2, { "ArrayExpression": "first" }
选项的错误代码示例:
/*eslint indent: ["error", 2, {"ArrayExpression": "first"}]*/
var foo = [bar,
baz,
qux
];
此规则使用 2, { "ArrayExpression": "first" }
选项的正确代码示例:
/*eslint indent: ["error", 2, {"ArrayExpression": "first"}]*/
var foo = [bar,
baz,
qux
];
# ObjectExpression
此规则使用 2, { "ObjectExpression": 1 }
选项的错误代码示例:
/*eslint indent: ["error", 2, { "ObjectExpression": 1 }]*/
var foo = {
bar: 1,
baz: 2,
qux: 3
};
此规则使用 2, { "ObjectExpression": 1 }
选项的正确代码示例:
/*eslint indent: ["error", 2, { "ObjectExpression": 1 }]*/
var foo = {
bar: 1,
baz: 2,
qux: 3
};
此规则使用 2, { "ObjectExpression": "first" }
选项的错误代码示例:
/*eslint indent: ["error", 2, {"ObjectExpression": "first"}]*/
var foo = { bar: 1,
baz: 2 };
此规则使用 2, { "ObjectExpression": "first" }
选项的正确代码示例:
/*eslint indent: ["error", 2, {"ObjectExpression": "first"}]*/
var foo = { bar: 1,
baz: 2 };
# 兼容性
JSHint
:indent
JSCS
:validateIndentation