Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/improve-define-macros-order-messages.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'eslint-plugin-vue': patch
---

Improved `vue/define-macros-order` error messages to distinguish between macro placement and ordering issues
25 changes: 19 additions & 6 deletions lib/rules/define-macros-order.js
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -392,8 +404,9 @@ module.exports = {
}
],
messages: {
macrosNotOnTop:
'{{macro}} should be the first statement in `<script setup>` (after any potential import statements or type definitions).',
macrosNotAtTop:
'{{macro}} should be placed at the top of `<script setup>` (after any potential import statements or type definitions).',
macrosUnordered: '{{macro}} should be above {{before}}.',
defineExposeNotTheLast:
'`defineExpose` should be the last statement in `<script setup>`.',
putExposeAtTheLast:
Expand Down
56 changes: 30 additions & 26 deletions tests/lib/rules/define-macros-order.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,12 @@ const optionsExposeLast = [
}
]

function message(macro) {
return `${macro} should be the first statement in \`<script setup>\` (after any potential import statements or type definitions).`
function notAtTopMessage(macro) {
return `${macro} should be placed at the top of \`<script setup>\` (after any potential import statements or type definitions).`
}

function unorderedMessage(macro, before) {
return `${macro} should be above ${before}.`
}

const defineExposeNotTheLast =
Expand Down Expand Up @@ -355,7 +359,7 @@ tester.run('define-macros-order', rule, {
options: optionsEmitsFirst,
errors: [
{
message: message('defineEmits'),
message: notAtTopMessage('defineEmits'),
line: 5,
column: 11,
endLine: 5,
Expand Down Expand Up @@ -394,7 +398,7 @@ tester.run('define-macros-order', rule, {
options: optionsPropsFirst,
errors: [
{
message: message('defineProps'),
message: notAtTopMessage('defineProps'),
line: 8,
column: 11,
endLine: 10,
Expand Down Expand Up @@ -430,7 +434,7 @@ tester.run('define-macros-order', rule, {
options: optionsPropsFirst,
errors: [
{
message: message('defineProps'),
message: unorderedMessage('defineProps', 'defineEmits'),
line: 6,
column: 11,
endLine: 8,
Expand Down Expand Up @@ -465,7 +469,7 @@ tester.run('define-macros-order', rule, {
options: optionsEmitsFirst,
errors: [
{
message: message('defineEmits'),
message: notAtTopMessage('defineEmits'),
line: 8,
column: 11,
endLine: 8,
Expand Down Expand Up @@ -502,7 +506,7 @@ tester.run('define-macros-order', rule, {
options: [{ order: ['definePage', 'defineProps'] }],
errors: [
{
message: message('definePage'),
message: notAtTopMessage('definePage'),
line: 8,
column: 11,
endLine: 10,
Expand Down Expand Up @@ -548,7 +552,7 @@ tester.run('define-macros-order', rule, {
},
errors: [
{
message: message('defineEmits'),
message: unorderedMessage('defineEmits', 'defineProps'),
line: 12,
column: 11,
endLine: 12,
Expand Down Expand Up @@ -606,7 +610,7 @@ tester.run('define-macros-order', rule, {
},
errors: [
{
message: message('definePage'),
message: unorderedMessage('definePage', 'defineProps'),
line: 15,
column: 11,
endLine: 17,
Expand Down Expand Up @@ -647,7 +651,7 @@ tester.run('define-macros-order', rule, {
},
errors: [
{
message: message('defineProps'),
message: notAtTopMessage('defineProps'),
line: 10,
column: 11,
endLine: 10,
Expand Down Expand Up @@ -705,7 +709,7 @@ tester.run('define-macros-order', rule, {
},
errors: [
{
message: message('defineEmits'),
message: notAtTopMessage('defineEmits'),
line: 16,
column: 11,
endLine: 16,
Expand All @@ -727,7 +731,7 @@ tester.run('define-macros-order', rule, {
options: optionsEmitsFirst,
errors: [
{
message: message('defineEmits'),
message: unorderedMessage('defineEmits', 'defineProps'),
line: 3,
column: 56,
endLine: 3,
Expand All @@ -749,7 +753,7 @@ tester.run('define-macros-order', rule, {
options: [{ order: ['definePage', 'defineProps'] }],
errors: [
{
message: message('definePage'),
message: unorderedMessage('definePage', 'defineProps'),
line: 3,
column: 56,
endLine: 3,
Expand Down Expand Up @@ -787,7 +791,7 @@ tester.run('define-macros-order', rule, {
`,
errors: [
{
message: message('defineProps'),
message: unorderedMessage('defineProps', 'defineEmits'),
line: 11,
column: 11,
endLine: 11,
Expand All @@ -805,7 +809,7 @@ tester.run('define-macros-order', rule, {
`,
errors: [
{
message: message('defineProps'),
message: unorderedMessage('defineProps', 'defineEmits'),
line: 2,
column: 52,
endLine: 2,
Expand All @@ -830,7 +834,7 @@ tester.run('define-macros-order', rule, {
options: optionsEmitsFirst,
errors: [
{
message: message('defineProps'),
message: notAtTopMessage('defineProps'),
line: 4,
column: 11,
endLine: 4,
Expand All @@ -857,7 +861,7 @@ tester.run('define-macros-order', rule, {
options: optionsEmitsFirst,
errors: [
{
message: message('defineProps'),
message: notAtTopMessage('defineProps'),
line: 5,
column: 11,
endLine: 5,
Expand All @@ -884,7 +888,7 @@ tester.run('define-macros-order', rule, {
options: [{ order: ['defineCustom', 'definePage'] }],
errors: [
{
message: message('defineCustom'),
message: unorderedMessage('defineCustom', 'definePage'),
line: 5,
column: 11,
endLine: 5,
Expand All @@ -911,7 +915,7 @@ tester.run('define-macros-order', rule, {
options: [{ order: ['defineCustom', 'definePage'] }],
errors: [
{
message: message('defineCustom'),
message: unorderedMessage('defineCustom', 'definePage'),
line: 5,
column: 11,
endLine: 5,
Expand Down Expand Up @@ -966,7 +970,7 @@ tester.run('define-macros-order', rule, {
],
errors: [
{
message: message('defineOptions'),
message: notAtTopMessage('defineOptions'),
line: 12,
column: 11,
endLine: 12,
Expand Down Expand Up @@ -1017,7 +1021,7 @@ tester.run('define-macros-order', rule, {
],
errors: [
{
message: message('defineOptions'),
message: unorderedMessage('defineOptions', 'defineSlots'),
line: 6,
column: 11,
endLine: 6,
Expand Down Expand Up @@ -1128,7 +1132,7 @@ tester.run('define-macros-order', rule, {
]
},
{
message: message('defineOptions'),
message: unorderedMessage('defineOptions', 'defineEmits'),
line: 8,
column: 11,
endLine: 8,
Expand Down Expand Up @@ -1163,7 +1167,7 @@ tester.run('define-macros-order', rule, {
],
errors: [
{
message: message('defineModel'),
message: unorderedMessage('defineModel', 'defineOptions'),
line: 6,
column: 11,
endLine: 6,
Expand Down Expand Up @@ -1194,7 +1198,7 @@ tester.run('define-macros-order', rule, {
],
errors: [
{
message: message('defineModel'),
message: unorderedMessage('defineModel', 'defineOptions'),
line: 5,
column: 11,
endLine: 5,
Expand Down Expand Up @@ -1235,7 +1239,7 @@ tester.run('define-macros-order', rule, {
],
errors: [
{
message: message('defineSomething'),
message: unorderedMessage('defineSomething', 'defineOptions'),
line: 5,
column: 11,
endLine: 5,
Expand Down Expand Up @@ -1271,7 +1275,7 @@ tester.run('define-macros-order', rule, {
],
errors: [
{
message: message('defineModel'),
message: unorderedMessage('defineModel', 'defineOptions'),
line: 5,
column: 11,
endLine: 5,
Expand Down