From 426f87e89e09810a695c3be6356546ba41542a5e Mon Sep 17 00:00:00 2001 From: Olivier Zalmanski <88216225+OlivierZal@users.noreply.github.com> Date: Sat, 10 Aug 2024 22:59:29 +0200 Subject: [PATCH 1/5] fix: handle accessor names --- packages/eslint-plugin/src/rules/member-ordering.ts | 8 ++++++-- packages/eslint-plugin/src/util/misc.ts | 2 ++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/eslint-plugin/src/rules/member-ordering.ts b/packages/eslint-plugin/src/rules/member-ordering.ts index 4713192770a7..2ca0aa175b2a 100644 --- a/packages/eslint-plugin/src/rules/member-ordering.ts +++ b/packages/eslint-plugin/src/rules/member-ordering.ts @@ -390,7 +390,9 @@ function getNodeType(node: Member): MemberKind | null { case AST_NODE_TYPES.TSConstructSignatureDeclaration: return 'constructor'; case AST_NODE_TYPES.TSAbstractPropertyDefinition: + case AST_NODE_TYPES.TSPropertySignature: return node.readonly ? 'readonly-field' : 'field'; + case AST_NODE_TYPES.TSAbstractAccessorProperty: case AST_NODE_TYPES.AccessorProperty: return 'accessor'; case AST_NODE_TYPES.PropertyDefinition: @@ -399,8 +401,6 @@ function getNodeType(node: Member): MemberKind | null { : node.readonly ? 'readonly-field' : 'field'; - case AST_NODE_TYPES.TSPropertySignature: - return node.readonly ? 'readonly-field' : 'field'; case AST_NODE_TYPES.TSIndexSignature: return node.readonly ? 'readonly-signature' : 'signature'; case AST_NODE_TYPES.StaticBlock: @@ -416,9 +416,11 @@ function getNodeType(node: Member): MemberKind | null { function getMemberRawName( member: | TSESTree.MethodDefinition + | TSESTree.AccessorProperty | TSESTree.Property | TSESTree.PropertyDefinition | TSESTree.TSAbstractMethodDefinition + | TSESTree.TSAbstractAccessorProperty | TSESTree.TSAbstractPropertyDefinition | TSESTree.TSMethodSignature | TSESTree.TSPropertySignature, @@ -447,7 +449,9 @@ function getMemberName( switch (node.type) { case AST_NODE_TYPES.TSPropertySignature: case AST_NODE_TYPES.TSMethodSignature: + case AST_NODE_TYPES.TSAbstractAccessorProperty: case AST_NODE_TYPES.TSAbstractPropertyDefinition: + case AST_NODE_TYPES.AccessorProperty: case AST_NODE_TYPES.PropertyDefinition: return getMemberRawName(node, sourceCode); case AST_NODE_TYPES.TSAbstractMethodDefinition: diff --git a/packages/eslint-plugin/src/util/misc.ts b/packages/eslint-plugin/src/util/misc.ts index c175bb736882..46ad05c3a0e1 100644 --- a/packages/eslint-plugin/src/util/misc.ts +++ b/packages/eslint-plugin/src/util/misc.ts @@ -110,9 +110,11 @@ enum MemberNameType { function getNameFromMember( member: | TSESTree.MethodDefinition + | TSESTree.AccessorProperty | TSESTree.Property | TSESTree.PropertyDefinition | TSESTree.TSAbstractMethodDefinition + | TSESTree.TSAbstractAccessorProperty | TSESTree.TSAbstractPropertyDefinition | TSESTree.TSMethodSignature | TSESTree.TSPropertySignature, From a1b711a6ee9f6cb5d6c0a1e2c93d126f9c1933f6 Mon Sep 17 00:00:00 2001 From: Olivier Zalmanski <88216225+OlivierZal@users.noreply.github.com> Date: Sun, 11 Aug 2024 23:20:01 +0200 Subject: [PATCH 2/5] fix: abstract not taken into account for accessors --- packages/eslint-plugin/src/rules/member-ordering.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/eslint-plugin/src/rules/member-ordering.ts b/packages/eslint-plugin/src/rules/member-ordering.ts index 2ca0aa175b2a..a5a0ff325450 100644 --- a/packages/eslint-plugin/src/rules/member-ordering.ts +++ b/packages/eslint-plugin/src/rules/member-ordering.ts @@ -483,7 +483,9 @@ function isMemberOptional(node: Member): boolean { switch (node.type) { case AST_NODE_TYPES.TSPropertySignature: case AST_NODE_TYPES.TSMethodSignature: + case AST_NODE_TYPES.TSAbstractAccessorProperty: case AST_NODE_TYPES.TSAbstractPropertyDefinition: + case AST_NODE_TYPES.AccessorProperty: case AST_NODE_TYPES.PropertyDefinition: case AST_NODE_TYPES.TSAbstractMethodDefinition: case AST_NODE_TYPES.MethodDefinition: @@ -553,6 +555,7 @@ function getRank( } const abstract = + node.type === AST_NODE_TYPES.TSAbstractAccessorProperty || node.type === AST_NODE_TYPES.TSAbstractPropertyDefinition || node.type === AST_NODE_TYPES.TSAbstractMethodDefinition; From 1ccff9a607a3291744cb67b7e64a40aac908562e Mon Sep 17 00:00:00 2001 From: Olivier Zalmanski <88216225+OlivierZal@users.noreply.github.com> Date: Sun, 11 Aug 2024 23:28:48 +0200 Subject: [PATCH 3/5] fix: decorator not taken into account for accessors --- packages/eslint-plugin/src/rules/member-ordering.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/eslint-plugin/src/rules/member-ordering.ts b/packages/eslint-plugin/src/rules/member-ordering.ts index a5a0ff325450..3e1eef9deea6 100644 --- a/packages/eslint-plugin/src/rules/member-ordering.ts +++ b/packages/eslint-plugin/src/rules/member-ordering.ts @@ -578,6 +578,7 @@ function getRank( (type === 'readonly-field' || type === 'field' || type === 'method' || + type === 'accessor' || type === 'get' || type === 'set') ) { From f4e36c78eee21f91d32b185795dcf19338f59971 Mon Sep 17 00:00:00 2001 From: Olivier Zalmanski <88216225+OlivierZal@users.noreply.github.com> Date: Mon, 12 Aug 2024 09:48:27 +0200 Subject: [PATCH 4/5] Add tests --- ...mber-ordering-alphabetically-order.test.ts | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/packages/eslint-plugin/tests/rules/member-ordering/member-ordering-alphabetically-order.test.ts b/packages/eslint-plugin/tests/rules/member-ordering/member-ordering-alphabetically-order.test.ts index 7a6f9d2a9d92..1cd4d98089db 100644 --- a/packages/eslint-plugin/tests/rules/member-ordering/member-ordering-alphabetically-order.test.ts +++ b/packages/eslint-plugin/tests/rules/member-ordering/member-ordering-alphabetically-order.test.ts @@ -2609,6 +2609,86 @@ class Foo { }, ], }, + // default option + accessors + { + code: ` +class Foo { + @Dec() accessor b; + @Dec() accessor a; + + accessor d; + accessor c; + + abstract accessor f; + abstract accessor e; +} + `, + options: [ + { default: { memberTypes: defaultOrder, order: 'alphabetically' } }, + ], + errors: [ + { + messageId: 'incorrectOrder', + data: { + member: 'a', + beforeMember: 'b', + }, + }, + { + messageId: 'incorrectOrder', + data: { + member: 'c', + beforeMember: 'd', + }, + }, + { + messageId: 'incorrectOrder', + data: { + member: 'e', + beforeMember: 'f', + }, + }, + ], + }, + // accessors with wrong group order + { + code: ` +class Foo { + accessor a; + abstract accessor b; + accessor c; + @Dec() accessor d; +} + `, + options: [ + { + default: { + memberTypes: [ + 'decorated-accessor', + 'accessor', + 'abstract-accessor', + ], + order: 'alphabetically', + }, + }, + ], + errors: [ + { + messageId: 'incorrectGroupOrder', + data: { + name: 'c', + rank: 'abstract accessor', + }, + }, + { + messageId: 'incorrectGroupOrder', + data: { + name: 'd', + rank: 'accessor', + }, + }, + ], + }, ], }; From d2f31472102f2922fee5ddc028aa78a5cec5d651 Mon Sep 17 00:00:00 2001 From: Olivier Zalmanski <88216225+OlivierZal@users.noreply.github.com> Date: Mon, 12 Aug 2024 10:23:08 +0200 Subject: [PATCH 5/5] fix format --- .../eslint-plugin/src/rules/no-unnecessary-type-parameters.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/eslint-plugin/src/rules/no-unnecessary-type-parameters.ts b/packages/eslint-plugin/src/rules/no-unnecessary-type-parameters.ts index 5307c4bfd0cc..d8c1853eca3b 100644 --- a/packages/eslint-plugin/src/rules/no-unnecessary-type-parameters.ts +++ b/packages/eslint-plugin/src/rules/no-unnecessary-type-parameters.ts @@ -122,9 +122,7 @@ function isTypeParameterRepeatedInAST( // If the type parameter is being used as a type argument, then we // know the type parameter is being reused and can't be reported. - if ( - reference.identifier.parent.type === AST_NODE_TYPES.TSTypeReference - ) { + if (reference.identifier.parent.type === AST_NODE_TYPES.TSTypeReference) { const grandparent = skipConstituentsUpward( reference.identifier.parent.parent, ); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy