Skip to content

eslint/grouped-accessor-pairs Style

🚧 An auto-fix is still under development.

What it does

Require grouped accessor pairs in object literals and classes

Why is this bad?

While it is allowed to define the pair for a getter or a setter anywhere in an object or class definition, it’s considered a best practice to group accessor functions for the same property.

Examples

Examples of incorrect code for this rule:

js
const foo = {
  get a() {
    return this.val;
  },
  b: 1,
  set a(value) {
    this.val = value;
  },
};

Examples of correct code for this rule:

js
const foo = {
  get a() {
    return this.val;
  },
  set a(value) {
    this.val = value;
  },
  b: 1,
};

Examples of incorrect code for this rule with the getBeforeSet option:

js
const foo = {
  set a(value) {
    this.val = value;
  },
  get a() {
    return this.val;
  },
};

Examples of correct code for this rule with the getBeforeSet option:

js
const foo = {
  get a() {
    return this.val;
  },
  set a(value) {
    this.val = value;
  },
};

Examples of incorrect code for this rule with the setBeforeGet option:

js
const foo = {
  get a() {
    return this.val;
  },
  set a(value) {
    this.val = value;
  },
};

Examples of correct code for this rule with the setBeforeGet option:

js
const foo = {
  set a(value) {
    this.val = value;
  },
  get a() {
    return this.val;
  },
};

Options

This rule accepts two arguments:

  1. A string value to control the order of the getter/setter pairs:
    • "anyOrder" (default): Accessors can be in any order
    • "getBeforeSet": Getters must come before setters
    • "setBeforeGet": Setters must come before getters
  2. An object with the following option:
    • enforceForTSTypes (boolean, default: false): When enabled, also checks TypeScript interfaces and type aliases for grouped accessor pairs

TypeScript

When enforceForTSTypes is enabled, this rule also applies to TypeScript interfaces and type aliases:

Examples of incorrect TypeScript code:

ts
interface Foo {
  get a(): string;
  someProperty: string;
  set a(value: string);
}

type Bar = {
  get b(): string;
  someProperty: string;
  set b(value: string);
};

Examples of correct TypeScript code:

ts
interface Foo {
  get a(): string;
  set a(value: string);
  someProperty: string;
}

type Bar = {
  get b(): string;
  set b(value: string);
  someProperty: string;
};

How to use

To enable this rule in the CLI or using the config file, you can use:

bash
oxlint --deny grouped-accessor-pairs
json
{
  "rules": {
    "grouped-accessor-pairs": "error"
  }
}

References

Released under the MIT License.