@@ -26,6 +26,10 @@ const { getScope } = require('./scope')
2626 * @typedef {import('../../typings/eslint-plugin-vue/util-types/utils').ComponentInferTypeEmit } ComponentInferTypeEmit
2727 * @typedef {import('../../typings/eslint-plugin-vue/util-types/utils').ComponentUnknownEmit } ComponentUnknownEmit
2828 * @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
2933 * @typedef {import('../../typings/eslint-plugin-vue/util-types/utils').ComponentModelName } ComponentModelName
3034 * @typedef {import('../../typings/eslint-plugin-vue/util-types/utils').ComponentModel } ComponentModel
3135 */
@@ -70,6 +74,7 @@ const {
7074const {
7175 getComponentPropsFromTypeDefine,
7276 getComponentEmitsFromTypeDefine,
77+ getComponentSlotsFromTypeDefine,
7378 isTypeNode
7479} = require ( './ts-utils' )
7580
@@ -1435,7 +1440,7 @@ module.exports = {
14351440 'onDefineSlotsEnter' ,
14361441 'onDefineSlotsExit' ,
14371442 ( candidateMacro , node ) => candidateMacro === node ,
1438- ( ) => undefined
1443+ getComponentSlotsFromDefineSlots
14391444 ) ,
14401445 new MacroListener (
14411446 'defineExpose' ,
@@ -3372,6 +3377,28 @@ function getComponentEmitsFromDefineEmits(context, node) {
33723377 }
33733378 ]
33743379}
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+
33753402/**
33763403 * Get model info from `defineModel` call expression.
33773404 * @param {RuleContext } _context The rule context object.
@@ -3414,6 +3441,7 @@ function getComponentModelFromDefineModel(_context, node) {
34143441 typeNode : null
34153442 }
34163443}
3444+
34173445/**
34183446 * Get all props by looking at all component's properties
34193447 * @param {ObjectExpression|ArrayExpression } propsNode Object with props definition
0 commit comments