跳至内容

@stylistic/

space-before-blocks

一致性是任何风格指南的重要组成部分。虽然在何处放置块的左大括号是一个个人偏好,但它应该在整个项目中保持一致。不一致的风格会分散读者对代码重要部分的注意力。

规则细节

此规则将强制执行块之前空格的一致性。它只应用于不在新行开始的块。

  • 此规则忽略 => 和块之间的空格。空格由 arrow-spacing 规则处理。
  • 此规则忽略关键字和块之间的空格。空格由 keyword-spacing 规则处理。
  • 此规则忽略 switch case 的 : 和块之间的空格。空格由 switch-colon-spacing 规则处理。

选项

此规则接受一个参数。如果它是 "always",则块必须始终至少有一个前导空格。如果 "never",则所有块都不应该有任何前导空格。如果希望对函数块、关键字块和类使用不同的空格,可以将可选的配置对象作为规则参数传递以分别配置这些情况。如果配置对象中的任何值是 "off",则不会对该类型块的任何风格进行强制执行。

(例如 { "functions": "never", "keywords": "always", "classes": "always" } )

默认值为 "always"

"always"

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

js
/*eslint @stylistic/space-before-blocks: "error"*/

if (a)
{
b(); } function a()
{}
for (;;)
{
b(); } try {} catch(a)
{}
class Foo
{
constructor()
{}
}
不正确

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

js
/*eslint @stylistic/space-before-blocks: "error"*/

if (a) {
    b();
}

if (a) {
    b();
} else{ /*no error. this is checked by `keyword-spacing` rule.*/
    c();
}

class C {
    static{} /*no error. this is checked by `keyword-spacing` rule.*/
}

function a() {}

for (;;) {
    b();
}

try {} catch(a) {}
正确

"never"

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

js
/*eslint @stylistic/space-before-blocks: ["error", "never"]*/

if (a) 
{
b(); } function a()
{}
for (;;)
{
b(); } try {} catch(a)
{}
不正确

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

js
/*eslint @stylistic/space-before-blocks: ["error", "never"]*/

if (a){
    b();
}

function a(){}

for (;;){
    b();
}

try{} catch(a){}

class Foo{
  constructor(){}
}
正确

此规则配置为 { "functions": "never", "keywords": "always", "classes": "never" } 时,不正确代码示例

js
/*eslint @stylistic/space-before-blocks: ["error", { "functions": "never", "keywords": "always", "classes": "never" }]*/
/*eslint-env es6*/

function a() 
{}
try {} catch(a)
{}
class Foo{ constructor()
{}
}
不正确

此规则配置为 { "functions": "never", "keywords": "always", "classes": "never" } 时,正确代码示例

js
/*eslint @stylistic/space-before-blocks: ["error", { "functions": "never", "keywords": "always", "classes": "never" }]*/
/*eslint-env es6*/

for (;;) {
  // ...
}

describe(function(){
  // ...
});

class Foo{
  constructor(){}
}
正确

此规则配置为 { "functions": "always", "keywords": "never", "classes": "never" } 时,不正确代码示例

js
/*eslint @stylistic/space-before-blocks: ["error", { "functions": "always", "keywords": "never", "classes": "never" }]*/
/*eslint-env es6*/

function a()
{}
try {} catch(a)
{}
class Foo
{
constructor()
{}
}
不正确

此规则配置为 { "functions": "always", "keywords": "never", "classes": "never" } 时,正确代码示例

js
/*eslint @stylistic/space-before-blocks: ["error", { "functions": "always", "keywords": "never", "classes": "never" }]*/
/*eslint-env es6*/

if (a){
  b();
}

var a = function() {}

class Foo{
  constructor() {}
}
正确

此规则配置为 { "functions": "never", "keywords": "never", "classes": "always" } 时,不正确代码示例

js
/*eslint @stylistic/space-before-blocks: ["error", { "functions": "never", "keywords": "never", "classes": "always" }]*/
/*eslint-env es6*/

class Foo
{
constructor(){} }
不正确

此规则配置为 { "functions": "never", "keywords": "never", "classes": "always" } 时,正确代码示例

js
/*eslint @stylistic/space-before-blocks: ["error", { "functions": "never", "keywords": "never", "classes": "always" }]*/
/*eslint-env es6*/

class Foo {
  constructor(){}
}
正确

何时不使用它

如果您不关心块之前空格的一致性,可以关闭此规则。

TypeScript 特定

ts/space-before-blocks

ts
/*eslint @stylistic/ts/space-before-blocks: "error"*/

enum Breakpoint{
  Large, Mediu
m
;
} interface State{ currentBreakpoint: Breakpoint; }
ts
/*eslint @stylistic/ts/space-before-blocks: "error"*/

enum Breakpoint {
  Large, Mediu
m
;
} interface State { currentBreakpoint: Breakpoint; }

选项

如果传递了更具体的选项对象,这些块将遵循 classes 配置选项。

正确
不正确