Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions lib/rules/no-unused-emit-declarations.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,17 @@ function hasReferenceId(value, setupContext) {
)
}

/**
* Check if the given name matches emitReferenceIds variable name
* @param {string} name
* @param {Set<Identifier>} emitReferenceIds
* @returns {boolean}
*/
function verifyEmitVariableName(name, emitReferenceIds) {
const emitVariable = emitReferenceIds.values().next().value.name
return emitVariable === name
}

module.exports = {
meta: {
type: 'suggestion',
Expand Down Expand Up @@ -191,6 +202,15 @@ module.exports = {
}

const { contextReferenceIds, emitReferenceIds } = setupContext

// verify defineEmits variable in template
if (
callee.type === 'Identifier' &&
verifyEmitVariableName(callee.name, emitReferenceIds)
) {
addEmitCall(node)
}

// verify setup(props,{emit}) {emit()}
addEmitCallByReference(callee, emitReferenceIds, node)
if (emit && emit.name === 'emit') {
Expand Down
34 changes: 32 additions & 2 deletions tests/lib/rules/no-unused-emit-declarations.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,17 @@ tester.run('no-unused-emit-declarations', rule, {
}
`
},
{
filename: 'test.vue',
code: `
<template>
<button @click="emits('bar')">Bar</button>
</template>
<script setup>
const emits = defineEmits(['bar'])
</script>
`
},
{
filename: 'test.vue',
code: `
Expand Down Expand Up @@ -237,7 +248,7 @@ tester.run('no-unused-emit-declarations', rule, {
export default {
emits: ['foo'],
setup(_, context) {
useCustomComposable({ emit: context.emit })
useCustomComposable({ emit: context.emit })
}
}
</script>
Expand Down Expand Up @@ -282,7 +293,7 @@ tester.run('no-unused-emit-declarations', rule, {
export default {
emits: ['foo'],
setup(_, { emit }) {
useCustomComposable({ emit: emit })
useCustomComposable({ emit: emit })
}
}
</script>
Expand Down Expand Up @@ -453,6 +464,25 @@ tester.run('no-unused-emit-declarations', rule, {
}
]
},
{
filename: 'test.vue',
code: `
<template>
<button @click="emit('bar')">Bar</button>
</template>
<script setup>
const emit = defineEmits(['foo', 'bar'])
</script>
`,
errors: [
{
messageId: 'unused',
line: 6,
column: 35,
endColumn: 40
}
]
},
{
filename: 'test.vue',
code: `
Expand Down