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..1e32d7f18 100644 --- a/lib/rules/define-macros-order.js +++ b/lib/rules/define-macros-order.js @@ -220,13 +220,20 @@ function create(context) { * @param {ASTNode} before */ function reportNotOnTop(macro, nodes, before) { + // Determine if 'before' is a macro from the order list + const beforeMacro = order.find((macroName) => + (macrosNodes.get(macroName) ?? []).includes(before) + ) + + // 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 +399,9 @@ module.exports = { } ], messages: { - macrosNotOnTop: - '{{macro}} should be the first statement in `