1 # Enforces getter/setter pairs in objects and classes (accessor-pairs)
3 It's a common mistake in JavaScript to create an object with just a setter for a property but never have a corresponding getter defined for it. Without a getter, you cannot read the property, so it ends up not being used.
5 Here are some examples:
27 This rule warns if setters are defined without getters. Using an option `getWithoutSet`, it will warn if you have a getter without a setter also.
31 This rule enforces a style where it requires to have a getter for every property which has a setter defined.
33 By activating the option `getWithoutSet` it enforces the presence of a setter for every property which has a getter defined.
35 This rule always checks object literals and property descriptors. By default, it also checks class declarations and class expressions.
39 * `setWithoutGet` set to `true` will warn for setters without getters (Default `true`).
40 * `getWithoutSet` set to `true` will warn for getters without setters (Default `false`).
41 * `enforceForClassMembers` set to `true` additionally applies this rule to class getters/setters (Default `true`). Set `enforceForClassMembers` to `false` if you want this rule to ignore class declarations and class expressions.
45 Examples of **incorrect** code for the default `{ "setWithoutGet": true }` option:
48 /*eslint accessor-pairs: "error"*/
57 Object.defineProperty(o, 'c', {
58 set: function(value) {
64 Examples of **correct** code for the default `{ "setWithoutGet": true }` option:
67 /*eslint accessor-pairs: "error"*/
79 Object.defineProperty(o, 'c', {
80 set: function(value) {
92 Examples of **incorrect** code for the `{ "getWithoutSet": true }` option:
95 /*eslint accessor-pairs: ["error", { "getWithoutSet": true }]*/
110 Object.defineProperty(o, 'c', {
111 set: function(value) {
117 Object.defineProperty(o, 'c', {
124 Examples of **correct** code for the `{ "getWithoutSet": true }` option:
127 /*eslint accessor-pairs: ["error", { "getWithoutSet": true }]*/
138 Object.defineProperty(o, 'c', {
139 set: function(value) {
149 ### enforceForClassMembers
151 When `enforceForClassMembers` is set to `true` (default):
153 * `"getWithoutSet": true` will also warn for getters without setters in classes.
154 * `"setWithoutGet": true` will also warn for setters without getters in classes.
156 Examples of **incorrect** code for `{ "getWithoutSet": true, "enforceForClassMembers": true }`:
159 /*eslint accessor-pairs: ["error", { "getWithoutSet": true, "enforceForClassMembers": true }]*/
177 static set a(value) {
183 Examples of **incorrect** code for `{ "setWithoutGet": true, "enforceForClassMembers": true }`:
186 /*eslint accessor-pairs: ["error", { "setWithoutGet": true, "enforceForClassMembers": true }]*/
195 static set a(value) {
201 When `enforceForClassMembers` is set to `false`, this rule ignores classes.
203 Examples of **correct** code for `{ "getWithoutSet": true, "setWithoutGet": true, "enforceForClassMembers": false }`:
206 /*eslint accessor-pairs: ["error", {
207 "getWithoutSet": true, "setWithoutGet": true, "enforceForClassMembers": false
217 static set a(value) {
238 Due to the limits of static analysis, this rule does not account for possible side effects and in certain cases
239 might not report a missing pair for a getter/setter that has a computed key, like in the following example:
242 /*eslint accessor-pairs: "error"*/
257 Also, this rule does not disallow duplicate keys in object literals and class definitions, and in certain cases with duplicate keys
258 might not report a missing pair for a getter/setter, like in the following example:
261 /*eslint accessor-pairs: "error"*/
275 The code above creates an object with just a setter for the property `"a"`.
277 See [no-dupe-keys](no-dupe-keys.md) if you also want to disallow duplicate keys in object literals.
279 See [no-dupe-class-members](no-dupe-class-members.md) if you also want to disallow duplicate names in class definitions.
281 ## When Not To Use It
283 You can turn this rule off if you are not concerned with the simultaneous presence of setters and getters on objects.
287 * [Object Setters](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set)
288 * [Object Getters](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get)
289 * [Working with Objects](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects)