From 1b7145b917d5422fe638d305147c90c356ec915c Mon Sep 17 00:00:00 2001 From: waynzh Date: Sat, 2 Dec 2023 20:56:50 +0800 Subject: [PATCH 1/3] fix(no-unused-emit-declarations): detect emits in templates --- lib/rules/no-unused-emit-declarations.js | 20 ++++++++++++ .../lib/rules/no-unused-emit-declarations.js | 32 +++++++++++++++++-- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/lib/rules/no-unused-emit-declarations.js b/lib/rules/no-unused-emit-declarations.js index f96004a36..37b7e6fc0 100644 --- a/lib/rules/no-unused-emit-declarations.js +++ b/lib/rules/no-unused-emit-declarations.js @@ -56,6 +56,17 @@ function hasReferenceId(value, setupContext) { ) } +/** + * Check if the given name matches emitReferenceIds variable name + * @param {string} name + * @param {Set} emitReferenceIds + * @returns {boolean} + */ +function verifyEmitVariableName(name, emitReferenceIds) { + const emitVariable = emitReferenceIds.values().next().value.name + return emitVariable === name +} + module.exports = { meta: { type: 'suggestion', @@ -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') { diff --git a/tests/lib/rules/no-unused-emit-declarations.js b/tests/lib/rules/no-unused-emit-declarations.js index 0667ad464..de38d1aac 100644 --- a/tests/lib/rules/no-unused-emit-declarations.js +++ b/tests/lib/rules/no-unused-emit-declarations.js @@ -98,6 +98,16 @@ tester.run('no-unused-emit-declarations', rule, { } ` }, + { + filename: 'test.vue', + code: ` + + @@ -282,7 +292,7 @@ tester.run('no-unused-emit-declarations', rule, { export default { emits: ['foo'], setup(_, { emit }) { - useCustomComposable({ emit: emit }) + useCustomComposable({ emit: emit }) } } @@ -453,6 +463,24 @@ tester.run('no-unused-emit-declarations', rule, { } ] }, + { + filename: 'test.vue', + code: ` + + ` }, { @@ -471,6 +472,7 @@ tester.run('no-unused-emit-declarations', rule, { `, errors: [ { From 00b7bc4145d40119d3e7a733e6f8c5f57e7cdd3a Mon Sep 17 00:00:00 2001 From: Flo Edelmann Date: Wed, 13 Dec 2023 18:02:29 +0100 Subject: [PATCH 3/3] Rename function --- lib/rules/no-unused-emit-declarations.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/rules/no-unused-emit-declarations.js b/lib/rules/no-unused-emit-declarations.js index 37b7e6fc0..ee43248cb 100644 --- a/lib/rules/no-unused-emit-declarations.js +++ b/lib/rules/no-unused-emit-declarations.js @@ -62,7 +62,7 @@ function hasReferenceId(value, setupContext) { * @param {Set} emitReferenceIds * @returns {boolean} */ -function verifyEmitVariableName(name, emitReferenceIds) { +function isEmitVariableName(name, emitReferenceIds) { const emitVariable = emitReferenceIds.values().next().value.name return emitVariable === name } @@ -206,7 +206,7 @@ module.exports = { // verify defineEmits variable in template if ( callee.type === 'Identifier' && - verifyEmitVariableName(callee.name, emitReferenceIds) + isEmitVariableName(callee.name, emitReferenceIds) ) { addEmitCall(node) }