Skip to content

Commit

Permalink
Docs: Consistent example headings & text pt3 (refs #5446) (#6492)
Browse files Browse the repository at this point in the history
* Docs: Consistent example headings & text pt3 #5446

Just a single doc in this batch due to variance in changes:

Headings were already present, however they were
over-complicated; I separated out the old (ES3/5) feature
from the heading and put it in a block quote to distinguish
it from the new (Reflect API) feature.

As per previous batches, ensured text above examples is
consistent as per #5446

This PR does not attempt to address issues other than
those stated above; such issues will be dealt with on
subsequent sweeps of the docs detailed in #6444.

* Docs: space around fenced code

* Docs: Remove blockquotes (refs #6492)
  • Loading branch information
originalfoo authored and nzakas committed Jun 22, 2016
1 parent 1a328d9 commit 7bcf6e0
Showing 1 changed file with 82 additions and 55 deletions.
137 changes: 82 additions & 55 deletions docs/rules/prefer-reflect.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,22 @@ The prefer-reflect rule will flag usage of any older method, suggesting to inste
### Exceptions

```
"prefer-reflect": [<enabled>, { exceptions: [<...exceptions>] }]
"prefer-reflect": [<enabled>, { "exceptions": [<...exceptions>] }]
```

The `exceptions` option allows you to pass an array of methods names you'd like to continue to use in the old style.

For example if you wish to use all Reflect methods, except for `Function.prototype.apply` then your config would look like `prefer-reflect: [2, { exceptions: ["apply"] }]`.
For example if you wish to use all Reflect methods, except for `Function.prototype.apply` then your config would look like `prefer-reflect: [2, { "exceptions": ["apply"] }]`.

If you want to use Reflect methods, but keep using the `delete` keyword, then your config would look like `prefer-reflect: [2, { exceptions: ["delete"] }]`.
If you want to use Reflect methods, but keep using the `delete` keyword, then your config would look like `prefer-reflect: [2, { "exceptions": ["delete"] }]`.

These can be combined as much as you like. To make all methods exceptions (thereby rendering this rule useless), use `prefer-reflect: [2, { exceptions: ["apply", "call", "defineProperty", "getOwnPropertyDescriptor", "getPrototypeOf", "setPrototypeOf", "isExtensible", "getOwnPropertyNames", "preventExtensions", "delete"] }]`
These can be combined as much as you like. To make all methods exceptions (thereby rendering this rule useless), use `prefer-reflect: [2, { "exceptions": ["apply", "call", "defineProperty", "getOwnPropertyDescriptor", "getPrototypeOf", "setPrototypeOf", "isExtensible", "getOwnPropertyNames", "preventExtensions", "delete"] }]`

### Reflect.apply (Function.prototype.apply/Function.prototype.call)
### Reflect.apply

The following patterns are considered problems:
Deprecates `Function.prototype.apply()` and `Function.prototype.call()`

Examples of **incorrect** code for this rule when used without exceptions:

```js
/*eslint prefer-reflect: "error"*/
Expand All @@ -47,7 +49,7 @@ obj.foo.call(obj, arg);
obj.foo.call(other, arg);
```

The following patterns are not considered problems:
Examples of **correct** code for this rule when used without exceptions:

```js
/*eslint prefer-reflect: "error"*/
Expand All @@ -62,241 +64,266 @@ Reflect.apply(obj.foo, obj, [arg]);
Reflect.apply(obj.foo, other, [arg]);
```

Examples of **correct** code for this rule with the `{ "exceptions": ["apply"] }` option:

```js
/*eslint prefer-reflect: ["error", { exceptions: ["apply"] }]*/
/*eslint prefer-reflect: ["error", { "exceptions": ["apply"] }]*/

// in addition to Reflect.apply(...):
foo.apply(undefined, args);
foo.apply(null, args);
obj.foo.apply(obj, args);
obj.foo.apply(other, args);
Reflect.apply(undefined, args);
Reflect.apply(null, args);
Reflect.apply(obj.foo, obj, args);
Reflect.apply(obj.foo, other, args);
```

Examples of **correct** code for this rule with the `{ "exceptions": ["call"] }` option:

```js
/*eslint prefer-reflect: ["error", { exceptions: ["call"] }]*/
/*eslint prefer-reflect: ["error", { "exceptions": ["call"] }]*/

// in addition to Reflect.apply(...):
foo.call(undefined, arg);
foo.call(null, arg);
obj.foo.call(obj, arg);
obj.foo.call(other, arg);
Reflect.apply(undefined, [arg]);
Reflect.apply(null, [arg]);
Reflect.apply(obj.foo, obj, [arg]);
Reflect.apply(obj.foo, other, [arg]);
```

### Reflect.defineProperty (Object.defineProperty)
### Reflect.defineProperty

Deprecates `Object.defineProperty()`

The following patterns are considered problems:
Examples of **incorrect** code for this rule when used without exceptions:

```js
/*eslint prefer-reflect: "error"*/

Object.defineProperty({}, 'foo', {value: 1})
```

The following patterns are not considered problems:
Examples of **correct** code for this rule when used without exceptions:

```js
/*eslint prefer-reflect: "error"*/

Reflect.defineProperty({}, 'foo', {value: 1})
```

Examples of **correct** code for this rule with the `{ "exceptions": ["defineProperty"] }` option:

```js
/*eslint prefer-reflect: ["error", { exceptions: ["defineProperty"] }]*/
/*eslint prefer-reflect: ["error", { "exceptions": ["defineProperty"] }]*/

Object.defineProperty({}, 'foo', {value: 1})
Reflect.defineProperty({}, 'foo', {value: 1})
```

### Reflect.getOwnPropertyDescriptor (Object.getOwnPropertyDescriptor)
### Reflect.getOwnPropertyDescriptor

The following patterns are considered problems:
Deprecates `Object.getOwnPropertyDescriptor()`

Examples of **incorrect** code for this rule when used without exceptions:

```js
/*eslint prefer-reflect: "error"*/

Object.getOwnPropertyDescriptor({}, 'foo')
```

The following patterns are not considered problems:
Examples of **correct** code for this rule when used without exceptions:

```js
/*eslint prefer-reflect: "error"*/

Reflect.getOwnPropertyDescriptor({}, 'foo')
```

__config:__ `prefer-reflect: ["error", { exceptions: ["getOwnPropertyDescriptor"] }]`
Examples of **correct** code for this rule with the `{ "exceptions": ["getOwnPropertyDescriptor"] }` option:

```js
/*eslint prefer-reflect: ["error", { exceptions: ["getOwnPropertyDescriptor"] }]*/
/*eslint prefer-reflect: ["error", { "exceptions": ["getOwnPropertyDescriptor"] }]*/

Object.getOwnPropertyDescriptor({}, 'foo')
Reflect.getOwnPropertyDescriptor({}, 'foo')
```

### Reflect.getPrototypeOf (Object.getPrototypeOf)
### Reflect.getPrototypeOf

Deprecates `Object.getPrototypeOf()`

The following patterns are considered problems:
Examples of **incorrect** code for this rule when used without exceptions:

```js
/*eslint prefer-reflect: "error"*/

Object.getPrototypeOf({}, 'foo')
```

The following patterns are not considered problems:
Examples of **correct** code for this rule when used without exceptions:

```js
/*eslint prefer-reflect: "error"*/

Reflect.getPrototypeOf({}, 'foo')
```

Examples of **correct** code for this rule with the `{ "exceptions": ["getPrototypeOf"] }` option:

```js
/*eslint prefer-reflect: ["error", { exceptions: ["getPrototypeOf"] }]*/
/*eslint prefer-reflect: ["error", { "exceptions": ["getPrototypeOf"] }]*/

Object.getPrototypeOf({}, 'foo')
Reflect.getPrototypeOf({}, 'foo')
```

### Reflect.setPrototypeOf (Object.setPrototypeOf)
### Reflect.setPrototypeOf

Deprecates `Object.setPrototypeOf()`

The following patterns are considered problems:
Examples of **incorrect** code for this rule when used without exceptions:

```js
/*eslint prefer-reflect: "error"*/

Object.setPrototypeOf({}, Object.prototype)
```

The following patterns are not considered problems:
Examples of **correct** code for this rule when used without exceptions:

```js
/*eslint prefer-reflect: "error"*/

Reflect.setPrototypeOf({}, Object.prototype)
```

__config:__ `prefer-reflect: ["error", { exceptions: ["setPrototypeOf"] }]`
Examples of **correct** code for this rule with the `{ "exceptions": ["setPrototypeOf"] }` option:

```js
/*eslint prefer-reflect: ["error", { exceptions: ["setPrototypeOf"] }]*/
/*eslint prefer-reflect: ["error", { "exceptions": ["setPrototypeOf"] }]*/

Object.setPrototypeOf({}, Object.prototype)
Reflect.setPrototypeOf({}, Object.prototype)
```

### Reflect.isExtensible (Object.isExtensible)
### Reflect.isExtensible

The following patterns are considered problems:
Deprecates `Object.isExtensible`

Examples of **incorrect** code for this rule when used without exceptions:

```js
/*eslint prefer-reflect: "error"*/

Object.isExtensible({})
```

The following patterns are not considered problems:
Examples of **correct** code for this rule when used without exceptions:

```js
/*eslint prefer-reflect: "error"*/

Reflect.isExtensible({})
```

Examples of **correct** code for this rule with the `{ "exceptions": ["isExtensible"] }` option:

```js
/*eslint prefer-reflect: ["error", { exceptions: ["isExtensible"] }]*/
/*eslint prefer-reflect: ["error", { "exceptions": ["isExtensible"] }]*/

Object.isExtensible({})
Reflect.isExtensible({})
```

### Reflect.getOwnPropertyNames (Object.getOwnPropertyNames)
### Reflect.getOwnPropertyNames

Deprecates `Object.getOwnPropertyNames()`

The following patterns are considered problems:
Examples of **incorrect** code for this rule when used without exceptions:

```js
/*eslint prefer-reflect: "error"*/

Object.getOwnPropertyNames({})
```

The following patterns are not considered problems:
Examples of **correct** code for this rule when used without exceptions:

```js
/*eslint prefer-reflect: "error"*/

Reflect.getOwnPropertyNames({})
```

Examples of **correct** code for this rule with the `{ "exceptions": ["getOwnPropertyNames"] }` option:

```js
/*eslint prefer-reflect: ["error", { exceptions: ["getOwnPropertyNames"] }]*/
/*eslint prefer-reflect: ["error", { "exceptions": ["getOwnPropertyNames"] }]*/

Object.getOwnPropertyNames({})
Reflect.getOwnPropertyNames({})
```

### Reflect.preventExtensions (Object.preventExtensions)
### Reflect.preventExtensions

Deprecates `Object.preventExtensions()`

The following patterns are considered problems:
Examples of **incorrect** code for this rule when used without exceptions:

```js
/*eslint prefer-reflect: "error"*/

Object.preventExtensions({})
```

The following patterns are not considered problems:
Examples of **correct** code for this rule when used without exceptions:

```js
/*eslint prefer-reflect: "error"*/

Reflect.preventExtensions({})
```

Examples of **correct** code for this rule with the `{ "exceptions": ["preventExtensions"] }` option:

```js
/*eslint prefer-reflect: ["error", { exceptions: ["preventExtensions"] }]*/
/*eslint prefer-reflect: ["error", { "exceptions": ["preventExtensions"] }]*/

Object.preventExtensions({})
Reflect.preventExtensions({})
```

### Reflect.deleteProperty (The `delete` keyword)
### Reflect.deleteProperty

The following patterns are considered problems:
Deprecates the `delete` keyword

Examples of **incorrect** code for this rule when used without exceptions:

```js
/*eslint prefer-reflect: "error"*/

delete foo.bar;
delete foo.bar; // deleting object property
```

The following patterns are not considered problems:
Examples of **correct** code for this rule when used without exceptions:

```js
/*eslint prefer-reflect: "error"*/

delete bar; // Does not reference an object, just a var
delete bar; // deleting variable
Reflect.deleteProperty(foo, 'bar');
```

(Note: For a rule preventing deletion of variables, see [no-delete-var instead](no-delete-var.md))
Note: For a rule preventing deletion of variables, see [no-delete-var instead](no-delete-var.md)

Examples of **correct** code for this rule with the `{ "exceptions": ["delete"] }` option:

```js
/*eslint prefer-reflect: ["error", { exceptions: ["delete"] }]*/
/*eslint prefer-reflect: ["error", { "exceptions": ["delete"] }]*/

delete bar
delete foo.bar
Reflect.deleteProperty(foo, 'bar');
```


## When Not To Use It

This rule should not be used in ES3/5 environments.
Expand Down

0 comments on commit 7bcf6e0

Please sign in to comment.