@@ -29,6 +29,7 @@ const { isTypeNode } = require('./ts-ast-utils')
29
29
* @typedef {import('@typescript-eslint/types').TSESTree.TSImportEqualsDeclaration } TSImportEqualsDeclaration
30
30
* @typedef {import('@typescript-eslint/types').TSESTree.TSAbstractMethodDefinition } TSAbstractMethodDefinition
31
31
* @typedef {import('@typescript-eslint/types').TSESTree.TSAbstractPropertyDefinition } TSAbstractPropertyDefinition
32
+ * @typedef {import('@typescript-eslint/types').TSESTree.TSAbstractAccessorProperty } TSAbstractAccessorProperty
32
33
* @typedef {import('@typescript-eslint/types').TSESTree.TSEnumMember } TSEnumMember
33
34
* @typedef {import('@typescript-eslint/types').TSESTree.TSPropertySignature } TSPropertySignature
34
35
* @typedef {import('@typescript-eslint/types').TSESTree.TSIndexSignature } TSIndexSignature
@@ -50,6 +51,10 @@ const { isTypeNode } = require('./ts-ast-utils')
50
51
* @typedef {import('@typescript-eslint/types').TSESTree.TSInferType } TSInferType
51
52
* @typedef {import('@typescript-eslint/types').TSESTree.TSOptionalType } TSOptionalType
52
53
* @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
53
58
* @typedef {import('@typescript-eslint/types').TSESTree.JSXChild } JSXChild
54
59
* @typedef {import('@typescript-eslint/types').TSESTree.TypeNode } TypeNode
55
60
*
@@ -206,15 +211,16 @@ function defineVisitor({
206
211
* | TSImportEqualsDeclaration
207
212
* | TSAbstractMethodDefinition
208
213
* | TSAbstractPropertyDefinition
209
- * | TSAbstractClassProperty
214
+ * | TSAbstractAccessorProperty
210
215
* | TSEnumMember
211
- * | ClassProperty
212
216
* | TSPropertySignature
213
217
* | TSIndexSignature
214
- * | TSMethodSignature} node
218
+ * | TSMethodSignature
219
+ * | ClassProperty
220
+ * | TSAbstractClassProperty} node
215
221
*/
216
222
[ 'TSTypeAliasDeclaration, TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSImportEqualsDeclaration,' +
217
- 'TSAbstractMethodDefinition, TSAbstractPropertyDefinition, TSEnumMember,' +
223
+ 'TSAbstractMethodDefinition, TSAbstractPropertyDefinition, TSAbstractAccessorProperty, TSEnumMember,' +
218
224
'TSPropertySignature, TSIndexSignature, TSMethodSignature,' +
219
225
// Deprecated in @typescript -eslint/parser v5
220
226
'ClassProperty, TSAbstractClassProperty' ] ( node ) {
@@ -279,40 +285,57 @@ function defineVisitor({
279
285
}
280
286
} ,
281
287
/**
282
- * Process as expression
288
+ * Process as expression or satisfies expression
283
289
*
284
290
* e.g.
285
291
* ```
286
292
* var foo = bar as boolean
287
293
* // ^^^^^^^^^^^^^^
288
294
* ```
295
+ *
296
+ * e.g.
297
+ * ```
298
+ * var foo = bar satisfies Bar
299
+ * // ^^^^^^^^^^^^^^^^^
300
+ * ```
301
+ *
302
+ * @param {TSAsExpression | TSSatisfiesExpression } node
289
303
*/
290
- TSAsExpression ( node ) {
304
+ ' TSAsExpression, TSSatisfiesExpression' ( node ) {
291
305
const expressionTokens = getFirstAndLastTokens ( node . expression )
292
- const asToken = tokenStore . getTokenAfter ( expressionTokens . lastToken )
306
+ const asOrSatisfiesToken = tokenStore . getTokenAfter (
307
+ expressionTokens . lastToken
308
+ )
293
309
setOffset (
294
- [ asToken , getFirstAndLastTokens ( node . typeAnnotation ) . firstToken ] ,
310
+ [
311
+ asOrSatisfiesToken ,
312
+ getFirstAndLastTokens ( node . typeAnnotation ) . firstToken
313
+ ] ,
295
314
1 ,
296
315
expressionTokens . firstToken
297
316
)
298
317
} ,
299
318
/**
300
- * Process type reference
319
+ * Process type reference and instantiation expression
301
320
*
302
321
* e.g.
303
322
* ```
304
323
* const foo: Type<P>
305
324
* // ^^^^^^^
306
325
* ```
326
+ *
327
+ * e.g.
328
+ * ```
329
+ * const ErrorMap = Map<string, Error>;
330
+ * // ^^^^^^^^^^^^^^^^^^
331
+ * ```
332
+ *
333
+ * @param {TSTypeReference | TSInstantiationExpression } node
307
334
*/
308
- TSTypeReference ( node ) {
335
+ ' TSTypeReference, TSInstantiationExpression' ( node ) {
309
336
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 )
316
339
}
317
340
} ,
318
341
/**
@@ -1053,10 +1076,10 @@ function defineVisitor({
1053
1076
* // ^^^^^^^
1054
1077
* ```
1055
1078
*
1056
- * @param {TSAbstractMethodDefinition | TSAbstractPropertyDefinition | TSEnumMember | TSAbstractClassProperty | ClassProperty } node
1079
+ * @param {TSAbstractMethodDefinition | TSAbstractPropertyDefinition | TSAbstractAccessorProperty | TSEnumMember | TSAbstractClassProperty | ClassProperty } node
1057
1080
*
1058
1081
*/
1059
- [ 'TSAbstractMethodDefinition, TSAbstractPropertyDefinition, TSEnumMember,' +
1082
+ [ 'TSAbstractMethodDefinition, TSAbstractPropertyDefinition, TSAbstractAccessorProperty, TSEnumMember,' +
1060
1083
// Deprecated in @typescript -eslint/parser v5
1061
1084
'ClassProperty, TSAbstractClassProperty' ] ( node ) {
1062
1085
const { keyNode, valueNode } =
@@ -1302,6 +1325,42 @@ function defineVisitor({
1302
1325
setOffset ( atToken , 0 , tokenStore . getFirstToken ( decorators [ 0 ] ) )
1303
1326
}
1304
1327
} ,
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
+ } ,
1305
1364
ImportAttribute ( node ) {
1306
1365
const firstToken = tokenStore . getFirstToken ( node )
1307
1366
const keyTokens = getFirstAndLastTokens ( node . key )
0 commit comments