Description
There are quite a few places where a property is defined like this:
ObjectDefineProperty(someObject, 'someFunction', {
__proto__: null,
value: function() {
/* `someObject.someFunction`'s body */
},
});
As result, we end up with quite a few functions named value
:
someObject.someFunction.name === 'value'
There is a func-name-matching
rule in eslint that enforces function names to match the property names. However, in these cases, this rule rejects correct code and insists that these functions must be named value
, to the point that in some places we have them explicitly named like this:
Line 56 in cb5f671
I think, it would be nice to have a custom linter rule that:
- works the same way as
func-name-matching
everywhere outside ofObjectDefineProperty
,ObjectDefineProperties
, andReflectDefineProperty
- in the descriptors in these functions, the rule should be reversed: it should not allow the function to end up with a name
value
- (ideally) if property name(s) is defined as plain string, the function name must match this string
I'm not familiar with eslint rules definitions but the original func-name-matching
rule seems to be defined here: https://github.com/eslint/eslint/blob/e8f8d57bd6c0d95f9f25db8c5b3ff72de42488b7/lib/rules/func-name-matching.js.
The rule already has considerPropertyDescriptor
option, but it's not applicable here because:
- it recognizes the normal form of these functions (
Object.defineProperty
) but not primordials (ObjectDefineProperty
) - it still allows both implicitly inherited name (
value: function() {
) and concise notation (value() {
) - it also disables the rule inside of
Object.create()