Replacement/improvement of `func-name-matching` eslint rule
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- JavaScript
- Sterne
- 122k
- Forks
- 37.3k
- Ø Merge
- 4 T. 2 Std.
- Gemergte PRs (30 T.)
- 283
Beschreibung
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: https://github.com/nodejs/node/blob/cb5f671a34da32e3c2d70d7f3e7f869cda6b806b/lib/test/reporters.js#L56
I think, it would be nice to have a custom linter rule that:
- works the same way as
func-name-matchingeverywhere 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()
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Lies zuerst ESLints verknüpfte Regel func-name-matching und das verknüpfte Node.js-Beispiel reporters.js und vergleiche anschließend, wie die Deskriptoren von ObjectDefineProperty, ObjectDefineProperties und ReflectDefineProperty dargestellt werden. Erledigt ist die Aufgabe, wenn eine benutzerdefinierte Regel das normale Matching an anderer Stelle beibehält, Deskriptorfunktionen ablehnt, die zu named value werden, und einfache Zeichenketten als Eigenschaftsnamen wie angegeben behandelt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- eslint, javascript
- Bereich
- tooling
- Issue-Typ
- Feature
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Aktiv
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100