# brace-style

对块执行一致的大括号样式

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

大括号样式与编程中的 缩进风格 密切相关,描述了大括号相对于其控制语句和主体的位置。世界上可能有十几种(如果不是更多的话)牙套样式。

一种真正的大括号样式是 JavaScript 中最常见的大括号样式之一,其中块的左大括号与其对应的语句或声明位于同一行。例如:

if (foo) {
  bar();
} else {
  baz();
}

一种真正的大括号样式的一种常见变体称为 Stroustrup,其中 if-else 构造中的 else 语句,以及 catchfinally,必须在前一个右大括号之后单独一行。例如:

if (foo) {
  bar();
}
else {
  baz();
}

另一种风格称为 Allman,其中所有的大括号都应该在自己的行上,没有任何额外的缩进。例如:

if (foo)
{
  bar();
}
else
{
  baz();
}

虽然没有一种风格被认为比另一种更好,但大多数开发人员都同意在整个项目中保持一致的风格对于其长期可维护性很重要。

# 规则详情

此规则强制块的大括号样式一致。

# 选项

此规则有一个字符串选项:

  • "1tbs"(默认)强制使用一种真正的大括号样式
  • "stroustrup" 强制执行 Stroustrup 风格
  • "allman" 强制执行 Allman 风格

此规则有一个异常的对象选项:

  • "allowSingleLine": true(默认 false)允许一个块的左大括号和右大括号在同一行

# 1tbs

此规则使用默认 "1tbs" 选项的错误代码示例:

/*eslint brace-style: "error"*/

function foo()
{
  return true;
}

if (foo)
{
  bar();
}

try
{
  somethingRisky();
} catch(e)
{
  handleError();
}

if (foo) {
  bar();
}
else {
  baz();
}

class C
{
    static
    {
        foo();
    }
}

此规则使用默认 "1tbs" 选项的正确代码示例:

/*eslint brace-style: "error"*/

function foo() {
  return true;
}

if (foo) {
  bar();
}

if (foo) {
  bar();
} else {
  baz();
}

try {
  somethingRisky();
} catch(e) {
  handleError();
}

class C {
    static {
        foo();
    }
}

// when there are no braces, there are no problems
if (foo) bar();
else if (baz) boom();

此规则使用 "1tbs", { "allowSingleLine": true } 选项的正确代码示例:

/*eslint brace-style: ["error", "1tbs", { "allowSingleLine": true }]*/

function nop() { return; }

if (foo) { bar(); }

if (foo) { bar(); } else { baz(); }

try { somethingRisky(); } catch(e) { handleError(); }

if (foo) { baz(); } else {
  boom();
}

if (foo) { baz(); } else if (bar) {
  boom();
}

if (foo) { baz(); } else
if (bar) {
  boom();
}

if (foo) { baz(); } else if (bar) {
  boom();
}

try { somethingRisky(); } catch(e) {
  handleError();
}

class C {
    static { foo(); }
}

class D { static { foo(); } }

# stroustrup

此规则使用 "stroustrup" 选项的错误代码示例:

/*eslint brace-style: ["error", "stroustrup"]*/

function foo()
{
  return true;
}

if (foo)
{
  bar();
}

try
{
  somethingRisky();
} catch(e)
{
  handleError();
}

class C
{
    static
    {
        foo();
    }
}

if (foo) {
  bar();
} else {
  baz();
}

此规则使用 "stroustrup" 选项的正确代码示例:

/*eslint brace-style: ["error", "stroustrup"]*/

function foo() {
  return true;
}

if (foo) {
  bar();
}

if (foo) {
  bar();
}
else {
  baz();
}

try {
  somethingRisky();
}
catch(e) {
  handleError();
}

class C {
    static {
        foo();
    }
}

// when there are no braces, there are no problems
if (foo) bar();
else if (baz) boom();

此规则使用 "stroustrup", { "allowSingleLine": true } 选项的正确代码示例:

/*eslint brace-style: ["error", "stroustrup", { "allowSingleLine": true }]*/

function nop() { return; }

if (foo) { bar(); }

if (foo) { bar(); }
else { baz(); }

try { somethingRisky(); }
catch(e) { handleError(); }

class C {
    static { foo(); }
}

class D { static { foo(); } }

# allman

此规则使用 "allman" 选项的错误代码示例:

/*eslint brace-style: ["error", "allman"]*/

function foo() {
  return true;
}

if (foo)
{
  bar(); }

try
{
  somethingRisky();
} catch(e)
{
  handleError();
}

class C {
    static {
        foo();
    }
}

if (foo) {
  bar();
} else {
  baz();
}

此规则使用 "allman" 选项的正确代码示例:

/*eslint brace-style: ["error", "allman"]*/

function foo()
{
  return true;
}

if (foo)
{
  bar();
}

if (foo)
{
  bar();
}
else
{
  baz();
}

try
{
  somethingRisky();
}
catch(e)
{
  handleError();
}

class C
{
    static
    {
        foo();
    }
}

// when there are no braces, there are no problems
if (foo) bar();
else if (baz) boom();

此规则使用 "allman", { "allowSingleLine": true } 选项的正确代码示例:

/*eslint brace-style: ["error", "allman", { "allowSingleLine": true }]*/

function nop() { return; }

if (foo) { bar(); }

if (foo) { bar(); }
else { baz(); }

try { somethingRisky(); }
catch(e) { handleError(); }

class C
{
    static { foo(); }

    static
    { foo(); }
}

class D { static { foo(); } }

# 何时不使用

如果您不想强制执行特定的大括号样式,请不要启用此规则。

Last Updated: 5/13/2023, 8:55:38 PM