版本

lines-between-class-members

要求或禁止類別成員之間有空行

🔧 可修正

此規則回報的一些問題可透過 --fix 命令列選項自動修正

此規則已在 ESLint v8.53.0 中被棄用。請使用 @stylistic/eslint-plugin-js 中的對應規則

此規則透過在類別成員之間強制加入空行來提高可讀性。它不會檢查第一個成員之前和最後一個成員之後的空行,因為這已經由 padded-blocks 處理。

規則詳細資訊

此規則的不正確程式碼範例

在遊樂場中開啟
/* eslint lines-between-class-members: ["error", "always"]*/
class MyClass {
  x;
  foo() {
    //...
  }
  bar() {
    //...
  }
}

此規則的正確程式碼範例

在遊樂場中開啟
/* eslint lines-between-class-members: ["error", "always"]*/
class MyClass {
  x;

  foo() {
    //...
  }

  bar() {
    //...
  }
}

此規則的其他正確程式碼範例

在遊樂場中開啟
/* eslint lines-between-class-members: ["error", "always"]*/
class MyClass {
  x = 1

  ;in = 2
}

選項

此規則有兩個選項,第一個選項可以是字串或物件,第二個選項是物件。

第一個選項可以是字串 "always""never" 或具有名為 enforce 的屬性的物件

  • "always"(預設)要求在類別成員之後有空行
  • "never" 禁止在類別成員之後有空行
  • Object:具有名為 enforce 屬性的物件。enforce 屬性應該是一個物件陣列,每個物件都指定在特定類別成員配對之間強制執行空行的設定。
    • enforce:您可以提供任意數量的設定。如果成員配對符合多個設定,則將使用最後一個符合的設定。如果成員配對不符合任何設定,則將忽略它。每個物件都應具有以下屬性
      • blankLine:可以設定為 "always""never",表示是否應要求或禁止在指定成員之間使用空行。
      • prev:指定前一個類別成員的類型。它可以是類別方法的 "method"、類別欄位的 "field" 或任何類別成員的 "*"
      • next:指定下一個類別成員的類型。它遵循與 prev 相同的選項。

第二個選項是一個具有名為 exceptAfterSingleLine 屬性的物件

  • "exceptAfterSingleLine": false(預設)不要跳過檢查單行類別成員之後的空行
  • "exceptAfterSingleLine": true 跳過檢查單行類別成員之後的空行

使用字串選項時此規則的不正確程式碼範例

在遊樂場中開啟
/* eslint lines-between-class-members: ["error", "always"]*/
class Foo{
  x;
  bar(){}
  baz(){}
}
在遊樂場中開啟
/* eslint lines-between-class-members: ["error", "never"]*/
class Bar{
  x;

  bar(){}

  baz(){}
}

使用字串選項時此規則的正確程式碼範例

在遊樂場中開啟
/* eslint lines-between-class-members: ["error", "always"]*/
class Foo{
  x;

  bar(){}

  baz(){}
}
在遊樂場中開啟
/* eslint lines-between-class-members: ["error", "never"]*/
class Bar{
  x;
  bar(){}
  baz(){}
}

使用設定陣列選項時此規則的不正確程式碼範例

在遊樂場中開啟
// disallows blank lines between methods
/*eslint lines-between-class-members: [
    "error",
    {
      enforce: [
        { blankLine: "never", prev: "method", next: "method" }
      ]
    },
]*/

class MyClass {
  constructor(height, width) {
      this.height = height;
      this.width = width;
  }

  fieldA = 'Field A';
  #fieldB = 'Field B';

  method1() {}

  get area() {
    return this.method1();
  }

  method2() {}
}
在遊樂場中開啟
// requires blank lines around fields, disallows blank lines between methods
/*eslint lines-between-class-members: [
    "error",
    {
      enforce: [
        { blankLine: "always", prev: "*", next: "field" },
        { blankLine: "always", prev: "field", next: "*" },
        { blankLine: "never", prev: "method", next: "method" }
      ]
    },
]*/

class MyClass {
  constructor(height, width) {
      this.height = height;
      this.width = width;
  }
  fieldA = 'Field A';
  #fieldB = 'Field B';
  method1() {}

  get area() {
    return this.method1();
  }

  method2() {}
}

使用設定陣列選項時此規則的正確程式碼範例

在遊樂場中開啟
// disallows blank lines between methods
/*eslint lines-between-class-members: [
    "error",
    {
      enforce: [
        { blankLine: "never", prev: "method", next: "method" }
      ]
    },
]*/

class MyClass {
  constructor(height, width) {
      this.height = height;
      this.width = width;
  }

  fieldA = 'Field A';

  #fieldB = 'Field B';

  method1() {}
  get area() {
    return this.method1();
  }
  method2() {}
}
在遊樂場中開啟
// requires blank lines around fields, disallows blank lines between methods
/*eslint lines-between-class-members: [
    "error",
    {
      enforce: [
        { blankLine: "always", prev: "*", next: "field" },
        { blankLine: "always", prev: "field", next: "*" },
        { blankLine: "never", prev: "method", next: "method" }
      ]
    },
]*/

class MyClass {
  constructor(height, width) {
      this.height = height;
      this.width = width;
  }

  fieldA = 'Field A';

  #fieldB = 'Field B';

  method1() {}
  get area() {
    return this.method1();
  }
  method2() {}
}

使用物件選項時此規則的正確程式碼範例

在遊樂場中開啟
/* eslint lines-between-class-members: ["error", "always", { "exceptAfterSingleLine": true }]*/
class Foo{
  x; // single line class member
  bar(){} // single line class member
  baz(){
    // multi line class member
  }

  qux(){}
}
在遊樂場中開啟
/*eslint lines-between-class-members: [
    "error",
    {
      enforce: [
        { blankLine: "always", prev: "*", next: "method" },
        { blankLine: "always", prev: "method", next: "*" },
        { blankLine: "always", prev: "field", next: "field" }
      ]
    },
    { exceptAfterSingleLine: true }
]*/

class MyClass {
  constructor(height, width) {
      this.height = height;
      this.width = width;
  }

  fieldA = 'Field A';
  #fieldB = 'Field B';
  method1() {}
  get area() {
    return this.method1();
  }

  method2() {}
}

何時不使用它

如果您不想在類別成員之間強制執行空行,則可以停用此規則。

相容性

版本

此規則是在 ESLint v4.9.0 中引入的。

資源

變更語言