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:
|
value: function value() { |
I think, it would be nice to have a custom linter rule that:
- works the same way as
func-name-matching everywhere outside of ObjectDefineProperty, ObjectDefineProperties, and ReflectDefineProperty
- 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()
There are quite a few places where a property is defined like this:
As result, we end up with quite a few functions named
value:There is a
func-name-matchingrule 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 namedvalue, to the point that in some places we have them explicitly named like this:node/lib/test/reporters.js
Line 56 in cb5f671
I think, it would be nice to have a custom linter rule that:
func-name-matchingeverywhere outside ofObjectDefineProperty,ObjectDefineProperties, andReflectDefinePropertyvalueI'm not familiar with eslint rules definitions but the original
func-name-matchingrule seems to be defined here: https://github.com/eslint/eslint/blob/e8f8d57bd6c0d95f9f25db8c5b3ff72de42488b7/lib/rules/func-name-matching.js.The rule already has
considerPropertyDescriptoroption, but it's not applicable here because:Object.defineProperty) but not primordials (ObjectDefineProperty)value: function() {) and concise notation (value() {)Object.create()