版本

space-before-blocks

强制块之前的统一间距

🔧 可修复

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

重要

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

了解更多

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

规则详情

此规则将强制块之前间距的一致性。它仅适用于不以新行开头的块。

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

选项

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

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

默认值为 "always"

“always”

使用 “always” 选项时,此规则的 错误 代码示例

在游乐场中打开
/*eslint space-before-blocks: "error"*/

if (a){
    b();
}

function a(){}

for (;;){
    b();
}

try {} catch(a){}

class Foo{
  constructor(){}
}

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

在游乐场中打开
/*eslint 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" 选项时,此规则的 错误 代码示例

在游乐场中打开
/*eslint space-before-blocks: ["error", "never"]*/

if (a) {
    b();
}

function a() {}

for (;;) {
    b();
}

try {} catch(a) {}

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

在游乐场中打开
/*eslint space-before-blocks: ["error", "never"]*/

if (a){
    b();
}

function a(){}

for (;;){
    b();
}

try{} catch(a){}

class Foo{
  constructor(){}
}

当配置为 { "functions": "never", "keywords": "always", "classes": "never" } 时,此规则的 错误 代码示例

在游乐场中打开
/*eslint space-before-blocks: ["error", { "functions": "never", "keywords": "always", "classes": "never" }]*/

function a() {}

try {} catch(a){}

class Foo{
  constructor() {}
}

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

在游乐场中打开
/*eslint space-before-blocks: ["error", { "functions": "never", "keywords": "always", "classes": "never" }]*/

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

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

class Foo{
  constructor(){}
}

当配置为 { "functions": "always", "keywords": "never", "classes": "never" } 时,此规则的 错误 代码示例

在游乐场中打开
/*eslint space-before-blocks: ["error", { "functions": "always", "keywords": "never", "classes": "never" }]*/

function a(){}

try {} catch(a) {}

class Foo {
  constructor(){}
}

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

在游乐场中打开
/*eslint space-before-blocks: ["error", { "functions": "always", "keywords": "never", "classes": "never" }]*/

if (a){
  b();
}

var a = function() {}

class Foo{
  constructor() {}
}

当配置为 { "functions": "never", "keywords": "never", "classes": "always" } 时,此规则的 错误 代码示例

在游乐场中打开
/*eslint space-before-blocks: ["error", { "functions": "never", "keywords": "never", "classes": "always" }]*/

class Foo{
  constructor(){}
}

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

在游乐场中打开
/*eslint space-before-blocks: ["error", { "functions": "never", "keywords": "never", "classes": "always" }]*/

class Foo {
  constructor(){}
}

何时不使用

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

版本

此规则在 ESLint v0.9.0 中引入。

资源

更改语言