From b7ccbbd40ec4646a58eef4133913669e7eac833f Mon Sep 17 00:00:00 2001 From: ntnyq Date: Wed, 31 Jan 2024 18:33:56 +0800 Subject: [PATCH 1/3] fix(no-unused-emit-declarations): error in render functions (#2388) --- lib/rules/no-unused-emit-declarations.js | 1 + .../lib/rules/no-unused-emit-declarations.js | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/lib/rules/no-unused-emit-declarations.js b/lib/rules/no-unused-emit-declarations.js index 1a88d2417..146438935 100644 --- a/lib/rules/no-unused-emit-declarations.js +++ b/lib/rules/no-unused-emit-declarations.js @@ -63,6 +63,7 @@ function hasReferenceId(value, setupContext) { * @returns {boolean} */ function isEmitVariableName(name, emitReferenceIds) { + if (emitReferenceIds.size === 0) return false const emitVariable = emitReferenceIds.values().next().value.name return emitVariable === name } diff --git a/tests/lib/rules/no-unused-emit-declarations.js b/tests/lib/rules/no-unused-emit-declarations.js index 17b2f441b..cccbcbb98 100644 --- a/tests/lib/rules/no-unused-emit-declarations.js +++ b/tests/lib/rules/no-unused-emit-declarations.js @@ -369,6 +369,19 @@ tester.run('no-unused-emit-declarations', rule, { const m = defineModel('foo') ` + }, + { + filename: 'test.vue', + code: ` + + ` } ], invalid: [ @@ -750,6 +763,27 @@ tester.run('no-unused-emit-declarations', rule, { line: 3 } ] + }, + { + filename: 'test.vue', + code: ` + + `, + errors: [ + { + messageId: 'unused', + line: 4, + column: 19, + endColumn: 24 + } + ] } ] }) From 7cb78d1cc80d7cad0bc40f99783fb963dbd52112 Mon Sep 17 00:00:00 2001 From: Hendrik Heil Date: Thu, 1 Feb 2024 01:18:05 +0100 Subject: [PATCH 2/3] fix: support multiple macro calls in vue/define-macros-order (#2386) Co-authored-by: Flo Edelmann --- lib/rules/define-macros-order.js | 20 +++-- tests/lib/rules/define-macros-order.js | 113 +++++++++++++++++++++++++ 2 files changed, 126 insertions(+), 7 deletions(-) diff --git a/lib/rules/define-macros-order.js b/lib/rules/define-macros-order.js index 7c915ca80..f24c58af7 100644 --- a/lib/rules/define-macros-order.js +++ b/lib/rules/define-macros-order.js @@ -104,7 +104,7 @@ function create(context) { const order = (options[0] && options[0].order) || DEFAULT_ORDER /** @type {boolean} */ const defineExposeLast = (options[0] && options[0].defineExposeLast) || false - /** @type {Map} */ + /** @type {Map} */ const macrosNodes = new Map() /** @type {ASTNode} */ let defineExposeNode @@ -112,19 +112,21 @@ function create(context) { return utils.compositingVisitors( utils.defineScriptSetupVisitor(context, { onDefinePropsExit(node) { - macrosNodes.set(MACROS_PROPS, getDefineMacrosStatement(node)) + macrosNodes.set(MACROS_PROPS, [getDefineMacrosStatement(node)]) }, onDefineEmitsExit(node) { - macrosNodes.set(MACROS_EMITS, getDefineMacrosStatement(node)) + macrosNodes.set(MACROS_EMITS, [getDefineMacrosStatement(node)]) }, onDefineOptionsExit(node) { - macrosNodes.set(MACROS_OPTIONS, getDefineMacrosStatement(node)) + macrosNodes.set(MACROS_OPTIONS, [getDefineMacrosStatement(node)]) }, onDefineSlotsExit(node) { - macrosNodes.set(MACROS_SLOTS, getDefineMacrosStatement(node)) + macrosNodes.set(MACROS_SLOTS, [getDefineMacrosStatement(node)]) }, onDefineModelExit(node) { - macrosNodes.set(MACROS_MODEL, getDefineMacrosStatement(node)) + const currentModelMacros = macrosNodes.get(MACROS_MODEL) ?? [] + currentModelMacros.push(getDefineMacrosStatement(node)) + macrosNodes.set(MACROS_MODEL, currentModelMacros) }, onDefineExposeExit(node) { defineExposeNode = getDefineMacrosStatement(node) @@ -142,7 +144,10 @@ function create(context) { program ) const orderedList = order - .map((name) => ({ name, node: macrosNodes.get(name) })) + .flatMap((name) => { + const nodes = macrosNodes.get(name) ?? [] + return nodes.map((node) => ({ name, node })) + }) .filter( /** @returns {data is OrderedData} */ (data) => utils.isDef(data.node) @@ -165,6 +170,7 @@ function create(context) { .map(({ node }) => node) const targetStatementIndex = moveTargetNodes.indexOf(targetStatement) + if (targetStatementIndex >= 0) { moveTargetNodes = moveTargetNodes.slice(0, targetStatementIndex) } diff --git a/tests/lib/rules/define-macros-order.js b/tests/lib/rules/define-macros-order.js index 09ac0208d..78c3637d2 100644 --- a/tests/lib/rules/define-macros-order.js +++ b/tests/lib/rules/define-macros-order.js @@ -238,6 +238,22 @@ tester.run('define-macros-order', rule, { parser: require.resolve('@typescript-eslint/parser') } } + }, + { + filename: 'test.vue', + code: ` + + `, + options: [ + { + order: ['defineModel', 'defineSlots'] + } + ] } ], invalid: [ @@ -818,6 +834,103 @@ tester.run('define-macros-order', rule, { line: 8 } ] + }, + { + filename: 'test.vue', + code: ` + + `, + output: ` + + `, + options: [ + { + order: ['defineModel', 'defineOptions'] + } + ], + errors: [ + { + message: message('defineModel'), + line: 6 + } + ] + }, + { + filename: 'test.vue', + code: ` + + `, + output: ` + + `, + options: [ + { + order: ['defineModel', 'defineOptions'] + } + ], + errors: [ + { + message: message('defineModel'), + line: 5 + } + ] + }, + { + filename: 'test.vue', + code: ` + + `, + output: ` + + `, + options: [ + { + order: ['defineModel', 'defineOptions'], + defineExposeLast: true + } + ], + errors: [ + { + message: message('defineModel'), + line: 5 + }, + { + message: defineExposeNotTheLast, + line: 6 + } + ] } ] }) From e936a1524c3bde167e68a365bd6fcd1b86a059b2 Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Thu, 1 Feb 2024 09:21:41 +0900 Subject: [PATCH 3/3] 9.21.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 63cb12306..329e025f4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-vue", - "version": "9.21.0", + "version": "9.21.1", "description": "Official ESLint plugin for Vue.js", "main": "lib/index.js", "scripts": {