@@ -29,6 +29,7 @@ const { isTypeNode } = require('./ts-ast-utils')
2929 * @typedef {import('@typescript-eslint/types').TSESTree.TSImportEqualsDeclaration } TSImportEqualsDeclaration
3030 * @typedef {import('@typescript-eslint/types').TSESTree.TSAbstractMethodDefinition } TSAbstractMethodDefinition
3131 * @typedef {import('@typescript-eslint/types').TSESTree.TSAbstractPropertyDefinition } TSAbstractPropertyDefinition
32+ * @typedef {import('@typescript-eslint/types').TSESTree.TSAbstractAccessorProperty } TSAbstractAccessorProperty
3233 * @typedef {import('@typescript-eslint/types').TSESTree.TSEnumMember } TSEnumMember
3334 * @typedef {import('@typescript-eslint/types').TSESTree.TSPropertySignature } TSPropertySignature
3435 * @typedef {import('@typescript-eslint/types').TSESTree.TSIndexSignature } TSIndexSignature
@@ -50,6 +51,10 @@ const { isTypeNode } = require('./ts-ast-utils')
5051 * @typedef {import('@typescript-eslint/types').TSESTree.TSInferType } TSInferType
5152 * @typedef {import('@typescript-eslint/types').TSESTree.TSOptionalType } TSOptionalType
5253 * @typedef {import('@typescript-eslint/types').TSESTree.TSNonNullExpression } TSNonNullExpression
54+ * @typedef {import('@typescript-eslint/types').TSESTree.TSAsExpression } TSAsExpression
55+ * @typedef {import('@typescript-eslint/types').TSESTree.TSSatisfiesExpression } TSSatisfiesExpression
56+ * @typedef {import('@typescript-eslint/types').TSESTree.TSTypeReference } TSTypeReference
57+ * @typedef {import('@typescript-eslint/types').TSESTree.TSInstantiationExpression } TSInstantiationExpression
5358 * @typedef {import('@typescript-eslint/types').TSESTree.JSXChild } JSXChild
5459 * @typedef {import('@typescript-eslint/types').TSESTree.TypeNode } TypeNode
5560 *
@@ -206,15 +211,16 @@ function defineVisitor({
206211 * | TSImportEqualsDeclaration
207212 * | TSAbstractMethodDefinition
208213 * | TSAbstractPropertyDefinition
209- * | TSAbstractClassProperty
214+ * | TSAbstractAccessorProperty
210215 * | TSEnumMember
211- * | ClassProperty
212216 * | TSPropertySignature
213217 * | TSIndexSignature
214- * | TSMethodSignature} node
218+ * | TSMethodSignature
219+ * | ClassProperty
220+ * | TSAbstractClassProperty} node
215221 */
216222 [ 'TSTypeAliasDeclaration, TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSImportEqualsDeclaration,' +
217- 'TSAbstractMethodDefinition, TSAbstractPropertyDefinition, TSEnumMember,' +
223+ 'TSAbstractMethodDefinition, TSAbstractPropertyDefinition, TSAbstractAccessorProperty, TSEnumMember,' +
218224 'TSPropertySignature, TSIndexSignature, TSMethodSignature,' +
219225 // Deprecated in @typescript -eslint/parser v5
220226 'ClassProperty, TSAbstractClassProperty' ] ( node ) {
@@ -279,40 +285,57 @@ function defineVisitor({
279285 }
280286 } ,
281287 /**
282- * Process as expression
288+ * Process as expression or satisfies expression
283289 *
284290 * e.g.
285291 * ```
286292 * var foo = bar as boolean
287293 * // ^^^^^^^^^^^^^^
288294 * ```
295+ *
296+ * e.g.
297+ * ```
298+ * var foo = bar satisfies Bar
299+ * // ^^^^^^^^^^^^^^^^^
300+ * ```
301+ *
302+ * @param {TSAsExpression | TSSatisfiesExpression } node
289303 */
290- TSAsExpression ( node ) {
304+ ' TSAsExpression, TSSatisfiesExpression' ( node ) {
291305 const expressionTokens = getFirstAndLastTokens ( node . expression )
292- const asToken = tokenStore . getTokenAfter ( expressionTokens . lastToken )
306+ const asOrSatisfiesToken = tokenStore . getTokenAfter (
307+ expressionTokens . lastToken
308+ )
293309 setOffset (
294- [ asToken , getFirstAndLastTokens ( node . typeAnnotation ) . firstToken ] ,
310+ [
311+ asOrSatisfiesToken ,
312+ getFirstAndLastTokens ( node . typeAnnotation ) . firstToken
313+ ] ,
295314 1 ,
296315 expressionTokens . firstToken
297316 )
298317 } ,
299318 /**
300- * Process type reference
319+ * Process type reference and instantiation expression
301320 *
302321 * e.g.
303322 * ```
304323 * const foo: Type<P>
305324 * // ^^^^^^^
306325 * ```
326+ *
327+ * e.g.
328+ * ```
329+ * const ErrorMap = Map<string, Error>;
330+ * // ^^^^^^^^^^^^^^^^^^
331+ * ```
332+ *
333+ * @param {TSTypeReference | TSInstantiationExpression } node
307334 */
308- TSTypeReference ( node ) {
335+ ' TSTypeReference, TSInstantiationExpression' ( node ) {
309336 if ( node . typeParameters ) {
310- const typeNameTokens = getFirstAndLastTokens ( node . typeName )
311- setOffset (
312- tokenStore . getFirstToken ( node . typeParameters ) ,
313- 1 ,
314- typeNameTokens . firstToken
315- )
337+ const firstToken = tokenStore . getFirstToken ( node )
338+ setOffset ( tokenStore . getFirstToken ( node . typeParameters ) , 1 , firstToken )
316339 }
317340 } ,
318341 /**
@@ -1053,10 +1076,10 @@ function defineVisitor({
10531076 * // ^^^^^^^
10541077 * ```
10551078 *
1056- * @param {TSAbstractMethodDefinition | TSAbstractPropertyDefinition | TSEnumMember | TSAbstractClassProperty | ClassProperty } node
1079+ * @param {TSAbstractMethodDefinition | TSAbstractPropertyDefinition | TSAbstractAccessorProperty | TSEnumMember | TSAbstractClassProperty | ClassProperty } node
10571080 *
10581081 */
1059- [ 'TSAbstractMethodDefinition, TSAbstractPropertyDefinition, TSEnumMember,' +
1082+ [ 'TSAbstractMethodDefinition, TSAbstractPropertyDefinition, TSAbstractAccessorProperty, TSEnumMember,' +
10601083 // Deprecated in @typescript -eslint/parser v5
10611084 'ClassProperty, TSAbstractClassProperty' ] ( node ) {
10621085 const { keyNode, valueNode } =
@@ -1302,6 +1325,42 @@ function defineVisitor({
13021325 setOffset ( atToken , 0 , tokenStore . getFirstToken ( decorators [ 0 ] ) )
13031326 }
13041327 } ,
1328+ AccessorProperty ( node ) {
1329+ const keyNode = node . key
1330+ const valueNode = node . value
1331+ const firstToken = tokenStore . getFirstToken ( node )
1332+ const keyTokens = getFirstAndLastTokens ( keyNode )
1333+ const prefixTokens = tokenStore . getTokensBetween (
1334+ firstToken ,
1335+ keyTokens . firstToken
1336+ )
1337+ if ( node . computed ) {
1338+ prefixTokens . pop ( ) // pop opening bracket character (`[`)
1339+ }
1340+ setOffset ( prefixTokens , 0 , firstToken )
1341+ let lastKeyToken
1342+ if ( node . computed ) {
1343+ const leftBracketToken = tokenStore . getTokenBefore ( keyTokens . firstToken )
1344+ const rightBracketToken = ( lastKeyToken = tokenStore . getTokenAfter (
1345+ keyTokens . lastToken
1346+ ) )
1347+ setOffset ( leftBracketToken , 0 , firstToken )
1348+ processNodeList ( [ keyNode ] , leftBracketToken , rightBracketToken , 1 )
1349+ } else {
1350+ setOffset ( keyTokens . firstToken , 0 , firstToken )
1351+ lastKeyToken = keyTokens . lastToken
1352+ }
1353+
1354+ if ( valueNode != null ) {
1355+ const initToken = tokenStore . getFirstToken ( valueNode )
1356+ setOffset (
1357+ [ ...tokenStore . getTokensBetween ( lastKeyToken , initToken ) , initToken ] ,
1358+ 1 ,
1359+ lastKeyToken
1360+ )
1361+ }
1362+ processSemicolons ( node )
1363+ } ,
13051364 ImportAttribute ( node ) {
13061365 const firstToken = tokenStore . getFirstToken ( node )
13071366 const keyTokens = getFirstAndLastTokens ( node . key )
0 commit comments