@@ -26,6 +26,10 @@ const { getScope } = require('./scope')
26
26
* @typedef {import('../../typings/eslint-plugin-vue/util-types/utils').ComponentInferTypeEmit } ComponentInferTypeEmit
27
27
* @typedef {import('../../typings/eslint-plugin-vue/util-types/utils').ComponentUnknownEmit } ComponentUnknownEmit
28
28
* @typedef {import('../../typings/eslint-plugin-vue/util-types/utils').ComponentEmit } ComponentEmit
29
+ * @typedef {import('../../typings/eslint-plugin-vue/util-types/utils').ComponentTypeSlot } ComponentTypeSlot
30
+ * @typedef {import('../../typings/eslint-plugin-vue/util-types/utils').ComponentInferTypeSlot } ComponentInferTypeSlot
31
+ * @typedef {import('../../typings/eslint-plugin-vue/util-types/utils').ComponentUnknownSlot } ComponentUnknownSlot
32
+ * @typedef {import('../../typings/eslint-plugin-vue/util-types/utils').ComponentSlot } ComponentSlot
29
33
* @typedef {import('../../typings/eslint-plugin-vue/util-types/utils').ComponentModelName } ComponentModelName
30
34
* @typedef {import('../../typings/eslint-plugin-vue/util-types/utils').ComponentModel } ComponentModel
31
35
*/
@@ -70,6 +74,7 @@ const {
70
74
const {
71
75
getComponentPropsFromTypeDefine,
72
76
getComponentEmitsFromTypeDefine,
77
+ getComponentSlotsFromTypeDefine,
73
78
isTypeNode
74
79
} = require ( './ts-utils' )
75
80
@@ -1435,7 +1440,7 @@ module.exports = {
1435
1440
'onDefineSlotsEnter' ,
1436
1441
'onDefineSlotsExit' ,
1437
1442
( candidateMacro , node ) => candidateMacro === node ,
1438
- ( ) => undefined
1443
+ getComponentSlotsFromDefineSlots
1439
1444
) ,
1440
1445
new MacroListener (
1441
1446
'defineExpose' ,
@@ -3372,6 +3377,28 @@ function getComponentEmitsFromDefineEmits(context, node) {
3372
3377
}
3373
3378
]
3374
3379
}
3380
+
3381
+ /**
3382
+ * Get all slots from `defineSlots` call expression.
3383
+ * @param {RuleContext } context The rule context object.
3384
+ * @param {CallExpression } node `defineSlots` call expression
3385
+ * @return {ComponentSlot[] } Array of component slots
3386
+ */
3387
+ function getComponentSlotsFromDefineSlots ( context , node ) {
3388
+ const typeArguments =
3389
+ 'typeArguments' in node ? node . typeArguments : node . typeParameters
3390
+ if ( typeArguments && typeArguments . params . length > 0 ) {
3391
+ return getComponentSlotsFromTypeDefine ( context , typeArguments . params [ 0 ] )
3392
+ }
3393
+ return [
3394
+ {
3395
+ type : 'unknown' ,
3396
+ slotName : null ,
3397
+ node : null
3398
+ }
3399
+ ]
3400
+ }
3401
+
3375
3402
/**
3376
3403
* Get model info from `defineModel` call expression.
3377
3404
* @param {RuleContext } _context The rule context object.
@@ -3414,6 +3441,7 @@ function getComponentModelFromDefineModel(_context, node) {
3414
3441
typeNode : null
3415
3442
}
3416
3443
}
3444
+
3417
3445
/**
3418
3446
* Get all props by looking at all component's properties
3419
3447
* @param {ObjectExpression|ArrayExpression } propsNode Object with props definition
0 commit comments