跳至内容

@stylistic/

brace-style

花括号样式与编程中的缩进样式密切相关,描述了花括号相对于其控制语句和语句体的放置位置。世界上可能存在十几个甚至更多种花括号样式。

唯一正确的花括号样式是 JavaScript 中最常见的花括号样式之一,其中块的左花括号与其对应的语句或声明放在同一行。例如

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

唯一正确的花括号样式的一个常见变体称为 Stroustrup,其中 if-else 结构中的 else 语句以及 catchfinally 必须在其前面的右花括号之后单独占一行。例如

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

另一种样式称为Allman,其中所有花括号都应单独占一行,并且不进行额外的缩进。例如

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

虽然没有哪种样式比其他样式更好,但大多数开发人员都同意,在整个项目中保持一致的样式对于项目的长期可维护性至关重要。

规则详细信息

此规则强制执行块的一致花括号样式。

选项

此规则有一个字符串选项

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

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

  • "allowSingleLine": true(默认值为 false)允许块的开括号和闭括号在同一行上

1tbs

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

js
/*eslint @stylistic/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" 选项的正确代码示例

js
/*eslint @stylistic/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 } 选项的正确代码示例

js
/*eslint @stylistic/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" 选项的不正确代码示例

js
/*eslint @stylistic/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" 选项的正确代码示例

js
/*eslint @stylistic/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 } 选项的正确代码示例

js
/*eslint @stylistic/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" 选项的不正确代码示例

js
/*eslint @stylistic/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" 选项的正确代码示例

js
/*eslint @stylistic/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 } 选项的正确代码示例

js
/*eslint @stylistic/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(); } }
正确

何时不使用它

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

TypeScript 特定

ts/brace-style