-
-
Notifications
You must be signed in to change notification settings - Fork 4.7k
New: the prefer-reflect
rule (fixes #2939)
#2996
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
] | ||
}, | ||
{ | ||
code: "(function(){}).apply(null, 1, 2)", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Apply only takes two arguments.
Overall looks good. I would like to change the options to be more in line with how we've defined exceptions in other rules. I can see two possible options:
Kinda leaning towards the second, but could be convinced otherwise. |
@nzakas The second permits a tri-state with different falsey values (false and undefined) meaning different things. That's not a good interface in my opinion. |
I went more inline with a ruleset similar to |
Rebased, fixed tests and changed rule options to be |
io.js travis build seems to be stuck, but I cant stop or restart it: https://travis-ci.org/eslint/eslint/jobs/71037738 |
Failure is down to travis timing out trying to install iojs:
Force pushed to trigger a new build. Should pass now. |
Oops, forgot to update docs in respect to change to using Docs updated now. This should be good to go. |
|
||
var exceptions = (context.options[0] || {}).exceptions || []; | ||
|
||
function report(node, existing, substitute) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please add JSDoc comments here
Added jsdoc block for @nzakas is there anything else you'd like me to change? |
Fixed lint errors JSDoc. |
}, | ||
{ | ||
code: "Object.isExtensible({})", | ||
args: [2, { exceptions: "apply" }], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you use options
instead of args
?
options: [{exceptions: "apply"}]
You can leave off the initial 2, and any place with args: 2
can just be removed.
All done @nzakas. Anything else? |
|
||
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"]` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think there's an extra closing brace inside the array and one missing at the end of the line.
LGTM. Btw, awesome documentation! |
😄 thanks @ilyavolodin |
|
||
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"]] }`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Closing square brace is in the wrong place.
Can you rebase? |
Rebased @nzakas |
Thanks @keithamus for sticking with this! |
New: the `prefer-reflect` rule (fixes #2939)
🎉 |
This PR adds a rule to warn when the user is using "effectively deprecated" methods - which Reflect.* replaces, as discussed in #2939. Fixes #2939.
As the docs/tests suggest, each section can be disabled - meaning the user can configure this how they need to, for example if they want to use reflect for all but the
delete
operator, then they can configure it as[2, "delete"]
.Let me know if you need anything else from me to merge this.
Oh, also, so close!
