From 66d24c352072f0715381dbd1989513c1191a379e Mon Sep 17 00:00:00 2001 From: kzhrk Date: Tue, 11 Nov 2025 23:44:55 +0900 Subject: [PATCH 1/2] fix(define-macros-order): distinguish between macros placement and ordering errors (#2940) Separate error messages for two distinct cases: - macrosNotAtTop: when a macro comes after non-macro statements - macrosUnordered: when macros are not in the correct order relative to each other This provides clearer feedback to users about what needs to be fixed. --- .../improve-define-macros-order-messages.md | 5 ++ lib/rules/define-macros-order.js | 25 +++++++-- tests/lib/rules/define-macros-order.js | 56 ++++++++++--------- 3 files changed, 54 insertions(+), 32 deletions(-) create mode 100644 .changeset/improve-define-macros-order-messages.md diff --git a/.changeset/improve-define-macros-order-messages.md b/.changeset/improve-define-macros-order-messages.md new file mode 100644 index 000000000..086a7c999 --- /dev/null +++ b/.changeset/improve-define-macros-order-messages.md @@ -0,0 +1,5 @@ +--- +'eslint-plugin-vue': patch +--- + +Improved `vue/define-macros-order` error messages to distinguish between macro placement and ordering issues diff --git a/lib/rules/define-macros-order.js b/lib/rules/define-macros-order.js index bd49b7707..275c13169 100644 --- a/lib/rules/define-macros-order.js +++ b/lib/rules/define-macros-order.js @@ -220,13 +220,25 @@ function create(context) { * @param {ASTNode} before */ function reportNotOnTop(macro, nodes, before) { + // Determine if 'before' is a macro from the order list + let beforeMacro = null + for (const macroName of order) { + const macroNodes = macrosNodes.get(macroName) ?? [] + if (macroNodes.includes(before)) { + beforeMacro = macroName + break + } + } + + // Decide which message to use + const messageId = beforeMacro ? 'macrosUnordered' : 'macrosNotAtTop' + const data = beforeMacro ? { macro, before: beforeMacro } : { macro } + context.report({ node: nodes[0], loc: nodes[0].loc, - messageId: 'macrosNotOnTop', - data: { - macro - }, + messageId, + data, *fix(fixer) { for (const node of nodes) { yield* moveNodeBefore(fixer, node, before) @@ -392,8 +404,9 @@ module.exports = { } ], messages: { - macrosNotOnTop: - '{{macro}} should be the first statement in `