diff --git a/projects/lint/src/eslint/internals/slots.test.ts b/projects/lint/src/eslint/internals/slots.test.ts index 2691dd277..b2f5b18f3 100644 --- a/projects/lint/src/eslint/internals/slots.test.ts +++ b/projects/lint/src/eslint/internals/slots.test.ts @@ -16,6 +16,8 @@ describe('noUnexpectedSlotValue', () => { expect(hasSlot('nve-badge', '')).toBe(true); expect(hasSlot('nve-tabs-group', 'overview')).toBe(true); expect(hasSlot('nve-tabs-group', 'details')).toBe(true); + expect(hasSlot('nve-select', 'option-1')).toBe(true); + expect(hasSlot('nve-select', '')).toBe(true); }); }); @@ -25,4 +27,8 @@ describe('getRecommendedSlotName', () => { expect(getRecommendedSlotName('default', 'nve-card')).toBe(''); expect(getRecommendedSlotName('icon', 'nve-badge')).toBe('prefix-icon'); }); + + it('should recommend the unnamed slot when it is not listed first', () => { + expect(getRecommendedSlotName('default', 'nve-alert')).toBe(''); + }); }); diff --git a/projects/lint/src/eslint/internals/slots.ts b/projects/lint/src/eslint/internals/slots.ts index 58b2496ed..cf6bbda07 100644 --- a/projects/lint/src/eslint/internals/slots.ts +++ b/projects/lint/src/eslint/internals/slots.ts @@ -25,10 +25,11 @@ export function isKnownElement(tagName: string) { export function getRecommendedSlotName(slot: string, tagName: string) { const element = elements.find(el => el.name === tagName); const slots = element?.manifest?.slots?.map(s => s.name)?.filter(s => s !== undefined) ?? []; - const hasUnnamedSlot = slots.find(s => s === ''); + const hasUnnamedSlot = slots.includes(''); let recommendedSlot = slots[0]; - if (tagName === 'default' && hasUnnamedSlot) { + // the unnamed slot is not always listed first, so slot="default" must map to it explicitly + if (slot === 'default' && hasUnnamedSlot) { recommendedSlot = ''; } diff --git a/projects/lint/src/eslint/rules/no-unexpected-slot-value.test.ts b/projects/lint/src/eslint/rules/no-unexpected-slot-value.test.ts index befa13cba..ccb99781f 100644 --- a/projects/lint/src/eslint/rules/no-unexpected-slot-value.test.ts +++ b/projects/lint/src/eslint/rules/no-unexpected-slot-value.test.ts @@ -113,6 +113,23 @@ describe('noUnexpectedSlotValue', () => { ] } ] + }, + { + // nve-alert lists named slots before its unnamed slot + code: '
', + errors: [ + { + messageId: 'unexpected-slot-value', + data: { slotName: 'default', tagName: 'div', parentTagName: 'nve-alert' }, + suggestions: [ + { + messageId: 'suggest-remove-slot-value', + data: { slotName: 'default', alternative: '' }, + output: '
' + } + ] + } + ] } ] });