diff --git a/packages/eslint-plugin/src/rules/adjacent-overload-signatures.ts b/packages/eslint-plugin/src/rules/adjacent-overload-signatures.ts index 6f3f31c9c6e0..a72bd186e29c 100644 --- a/packages/eslint-plugin/src/rules/adjacent-overload-signatures.ts +++ b/packages/eslint-plugin/src/rules/adjacent-overload-signatures.ts @@ -55,13 +55,13 @@ export default util.createRule({ case AST_NODE_TYPES.FunctionDeclaration: return member.id && member.id.name; case AST_NODE_TYPES.TSMethodSignature: - return util.getNameFromPropertyName(member.key); + return util.getNameFromMember(member, sourceCode); case AST_NODE_TYPES.TSCallSignatureDeclaration: return 'call'; case AST_NODE_TYPES.TSConstructSignatureDeclaration: return 'new'; case AST_NODE_TYPES.MethodDefinition: - return util.getNameFromClassMember(member, sourceCode); + return util.getNameFromMember(member, sourceCode); } return null; diff --git a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts index 3d44d0b61acd..fe8c38c03413 100644 --- a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts +++ b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts @@ -125,10 +125,7 @@ export default util.createRule({ break; } - const methodName = util.getNameFromClassMember( - methodDefinition, - sourceCode, - ); + const methodName = util.getNameFromMember(methodDefinition, sourceCode); if (check === 'off' || ignoredMethodNames.has(methodName)) { return; @@ -163,7 +160,7 @@ export default util.createRule({ ): void { const nodeType = 'class property'; - const propertyName = util.getNameFromPropertyName(classProperty.key); + const propertyName = util.getNameFromMember(classProperty, sourceCode); if ( propCheck === 'no-public' && classProperty.accessibility === 'public' diff --git a/packages/eslint-plugin/src/rules/member-naming.ts b/packages/eslint-plugin/src/rules/member-naming.ts index d850ef69060e..f2e4567dcb40 100644 --- a/packages/eslint-plugin/src/rules/member-naming.ts +++ b/packages/eslint-plugin/src/rules/member-naming.ts @@ -99,7 +99,7 @@ export default util.createRule({ validate( node.key, - util.getNameFromClassMember(node, sourceCode), + util.getNameFromMember(node, sourceCode), node.accessibility, ); } diff --git a/packages/eslint-plugin/src/rules/member-ordering.ts b/packages/eslint-plugin/src/rules/member-ordering.ts index 56e3fae240cb..ffc8d9e90c17 100644 --- a/packages/eslint-plugin/src/rules/member-ordering.ts +++ b/packages/eslint-plugin/src/rules/member-ordering.ts @@ -231,12 +231,12 @@ export default util.createRule({ case AST_NODE_TYPES.TSMethodSignature: case AST_NODE_TYPES.TSAbstractClassProperty: case AST_NODE_TYPES.ClassProperty: - return util.getNameFromPropertyName(node.key); + return util.getNameFromMember(node, sourceCode); case AST_NODE_TYPES.TSAbstractMethodDefinition: case AST_NODE_TYPES.MethodDefinition: return node.kind === 'constructor' ? 'constructor' - : util.getNameFromClassMember(node, sourceCode); + : util.getNameFromMember(node, sourceCode); case AST_NODE_TYPES.TSConstructSignatureDeclaration: return 'new'; case AST_NODE_TYPES.TSIndexSignature: diff --git a/packages/eslint-plugin/src/util/misc.ts b/packages/eslint-plugin/src/util/misc.ts index bf65b97b898a..74bc37fabbb6 100644 --- a/packages/eslint-plugin/src/util/misc.ts +++ b/packages/eslint-plugin/src/util/misc.ts @@ -48,29 +48,6 @@ type InferMessageIdsTypeFromRule = T extends TSESLint.RuleModule< ? TMessageIds : unknown; -/** - * Gets a string representation of the name of the index signature. - */ -export function getNameFromIndexSignature( - node: TSESTree.TSIndexSignature, -): string { - const propName: TSESTree.PropertyName | undefined = node.parameters.find( - (parameter: TSESTree.Parameter): parameter is TSESTree.Identifier => - parameter.type === AST_NODE_TYPES.Identifier, - ); - return propName ? getNameFromPropertyName(propName) : '(index signature)'; -} - -/** - * Gets a string name representation of the given PropertyName node - */ -function getNameFromPropertyName(propertyName: TSESTree.PropertyName): string { - if (propertyName.type === AST_NODE_TYPES.Identifier) { - return propertyName.name; - } - return `${propertyName.value}`; -} - /** Return true if both parameters are equal. */ type Equal = (a: T, b: T) => boolean; @@ -102,31 +79,51 @@ function findFirstResult( return undefined; } +/** + * Gets a string representation of the name of the index signature. + */ +export function getNameFromIndexSignature( + node: TSESTree.TSIndexSignature, +): string { + const propName: TSESTree.PropertyName | undefined = node.parameters.find( + (parameter: TSESTree.Parameter): parameter is TSESTree.Identifier => + parameter.type === AST_NODE_TYPES.Identifier, + ); + return propName ? propName.name : '(index signature)'; +} + /** * Gets a string name representation of the name of the given MethodDefinition * or ClassProperty node, with handling for computed property names. */ -function getNameFromClassMember( - methodDefinition: +function getNameFromMember( + member: | TSESTree.MethodDefinition + | TSESTree.TSMethodSignature + | TSESTree.TSAbstractMethodDefinition | TSESTree.ClassProperty - | TSESTree.TSAbstractMethodDefinition, + | TSESTree.TSAbstractClassProperty + | TSESTree.Property + | TSESTree.TSPropertySignature, sourceCode: TSESLint.SourceCode, ): string { - if (keyCanBeReadAsPropertyName(methodDefinition.key)) { - return getNameFromPropertyName(methodDefinition.key); + if (isLiteralOrIdentifier(member.key)) { + if (member.key.type === AST_NODE_TYPES.Identifier) { + return member.key.name; + } + return `${member.key.value}`; } - return sourceCode.text.slice(...methodDefinition.key.range); + return sourceCode.text.slice(...member.key.range); } /** * This covers both actual property names, as well as computed properties that are either * an identifier or a literal at the top level. */ -function keyCanBeReadAsPropertyName( +function isLiteralOrIdentifier( node: TSESTree.Expression, -): node is TSESTree.PropertyName { +): node is TSESTree.Literal | TSESTree.Identifier { return ( node.type === AST_NODE_TYPES.Literal || node.type === AST_NODE_TYPES.Identifier @@ -147,11 +144,11 @@ export { Equal, ExcludeKeys, findFirstResult, - getNameFromClassMember, - getNameFromPropertyName, + getNameFromMember, InferMessageIdsTypeFromRule, InferOptionsTypeFromRule, isDefinitionFile, + isLiteralOrIdentifier, RequireKeys, upperCaseFirst, }; diff --git a/packages/typescript-estree/src/ts-estree/ts-estree.ts b/packages/typescript-estree/src/ts-estree/ts-estree.ts index a0e554ea67fd..438730ab8fcf 100644 --- a/packages/typescript-estree/src/ts-estree/ts-estree.ts +++ b/packages/typescript-estree/src/ts-estree/ts-estree.ts @@ -345,7 +345,6 @@ export type Modifier = export type ObjectLiteralElementLike = | MethodDefinition | Property - | RestElement | SpreadElement | TSAbstractMethodDefinition; export type Parameter = @@ -355,6 +354,13 @@ export type Parameter = | ObjectPattern | Identifier | TSParameterProperty; +export type DestructuringPattern = + | Identifier + | ObjectPattern + | ArrayPattern + | RestElement + | AssignmentPattern + | MemberExpression; export type PrimaryExpression = | ArrayExpression | ArrayPattern @@ -374,7 +380,7 @@ export type PrimaryExpression = | TemplateLiteral | ThisExpression | TSNullKeyword; -export type PropertyName = Identifier | Literal; +export type PropertyName = Expression; export type Statement = | BlockStatement | BreakStatement @@ -509,7 +515,7 @@ interface LiteralBase extends BaseNode { } interface MethodDefinitionBase extends BaseNode { - key: Expression; + key: PropertyName; value: FunctionExpression | TSEmptyBodyFunctionExpression; computed: boolean; static: boolean; @@ -542,7 +548,7 @@ export interface ArrayExpression extends BaseNode { export interface ArrayPattern extends BaseNode { type: AST_NODE_TYPES.ArrayPattern; - elements: Expression[]; + elements: DestructuringPattern[]; typeAnnotation?: TSTypeAnnotation; optional?: boolean; decorators?: Decorator[]; @@ -897,7 +903,7 @@ export interface ObjectExpression extends BaseNode { export interface ObjectPattern extends BaseNode { type: AST_NODE_TYPES.ObjectPattern; - properties: ObjectLiteralElementLike[]; + properties: (Property | RestElement)[]; typeAnnotation?: TSTypeAnnotation; optional?: boolean; decorators?: Decorator[]; @@ -923,7 +929,7 @@ export interface Property extends BaseNode { export interface RestElement extends BaseNode { type: AST_NODE_TYPES.RestElement; - argument: BindingName | Expression | PropertyName; + argument: DestructuringPattern; typeAnnotation?: TSTypeAnnotation; optional?: boolean; value?: AssignmentPattern; 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