Skip to content

Commit b47d479

Browse files
kzhrkFloEdelmann
andauthored
fix(define-macros-order): improve report messages (#2953)
Co-authored-by: Flo Edelmann <git@flo-edelmann.de>
1 parent 9581472 commit b47d479

File tree

3 files changed

+49
-32
lines changed

3 files changed

+49
-32
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'eslint-plugin-vue': patch
3+
---
4+
5+
Improved `vue/define-macros-order` error messages to distinguish between macro placement and ordering issues

lib/rules/define-macros-order.js

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -220,13 +220,20 @@ function create(context) {
220220
* @param {ASTNode} before
221221
*/
222222
function reportNotOnTop(macro, nodes, before) {
223+
// Determine if 'before' is a macro from the order list
224+
const beforeMacro = order.find((macroName) =>
225+
(macrosNodes.get(macroName) ?? []).includes(before)
226+
)
227+
228+
// Decide which message to use
229+
const messageId = beforeMacro ? 'macrosUnordered' : 'macrosNotAtTop'
230+
const data = beforeMacro ? { macro, before: beforeMacro } : { macro }
231+
223232
context.report({
224233
node: nodes[0],
225234
loc: nodes[0].loc,
226-
messageId: 'macrosNotOnTop',
227-
data: {
228-
macro
229-
},
235+
messageId,
236+
data,
230237
*fix(fixer) {
231238
for (const node of nodes) {
232239
yield* moveNodeBefore(fixer, node, before)
@@ -392,8 +399,9 @@ module.exports = {
392399
}
393400
],
394401
messages: {
395-
macrosNotOnTop:
396-
'{{macro}} should be the first statement in `<script setup>` (after any potential import statements or type definitions).',
402+
macrosNotAtTop:
403+
'{{macro}} should be placed at the top of `<script setup>` (after any potential import statements or type definitions).',
404+
macrosUnordered: '{{macro}} should be above {{before}}.',
397405
defineExposeNotTheLast:
398406
'`defineExpose` should be the last statement in `<script setup>`.',
399407
putExposeAtTheLast:

tests/lib/rules/define-macros-order.js

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,12 @@ const optionsExposeLast = [
3333
}
3434
]
3535

36-
function message(macro) {
37-
return `${macro} should be the first statement in \`<script setup>\` (after any potential import statements or type definitions).`
36+
function notAtTopMessage(macro) {
37+
return `${macro} should be placed at the top of \`<script setup>\` (after any potential import statements or type definitions).`
38+
}
39+
40+
function unorderedMessage(macro, before) {
41+
return `${macro} should be above ${before}.`
3842
}
3943

4044
const defineExposeNotTheLast =
@@ -355,7 +359,7 @@ tester.run('define-macros-order', rule, {
355359
options: optionsEmitsFirst,
356360
errors: [
357361
{
358-
message: message('defineEmits'),
362+
message: notAtTopMessage('defineEmits'),
359363
line: 5,
360364
column: 11,
361365
endLine: 5,
@@ -394,7 +398,7 @@ tester.run('define-macros-order', rule, {
394398
options: optionsPropsFirst,
395399
errors: [
396400
{
397-
message: message('defineProps'),
401+
message: notAtTopMessage('defineProps'),
398402
line: 8,
399403
column: 11,
400404
endLine: 10,
@@ -430,7 +434,7 @@ tester.run('define-macros-order', rule, {
430434
options: optionsPropsFirst,
431435
errors: [
432436
{
433-
message: message('defineProps'),
437+
message: unorderedMessage('defineProps', 'defineEmits'),
434438
line: 6,
435439
column: 11,
436440
endLine: 8,
@@ -465,7 +469,7 @@ tester.run('define-macros-order', rule, {
465469
options: optionsEmitsFirst,
466470
errors: [
467471
{
468-
message: message('defineEmits'),
472+
message: notAtTopMessage('defineEmits'),
469473
line: 8,
470474
column: 11,
471475
endLine: 8,
@@ -502,7 +506,7 @@ tester.run('define-macros-order', rule, {
502506
options: [{ order: ['definePage', 'defineProps'] }],
503507
errors: [
504508
{
505-
message: message('definePage'),
509+
message: notAtTopMessage('definePage'),
506510
line: 8,
507511
column: 11,
508512
endLine: 10,
@@ -548,7 +552,7 @@ tester.run('define-macros-order', rule, {
548552
},
549553
errors: [
550554
{
551-
message: message('defineEmits'),
555+
message: unorderedMessage('defineEmits', 'defineProps'),
552556
line: 12,
553557
column: 11,
554558
endLine: 12,
@@ -606,7 +610,7 @@ tester.run('define-macros-order', rule, {
606610
},
607611
errors: [
608612
{
609-
message: message('definePage'),
613+
message: unorderedMessage('definePage', 'defineProps'),
610614
line: 15,
611615
column: 11,
612616
endLine: 17,
@@ -647,7 +651,7 @@ tester.run('define-macros-order', rule, {
647651
},
648652
errors: [
649653
{
650-
message: message('defineProps'),
654+
message: notAtTopMessage('defineProps'),
651655
line: 10,
652656
column: 11,
653657
endLine: 10,
@@ -705,7 +709,7 @@ tester.run('define-macros-order', rule, {
705709
},
706710
errors: [
707711
{
708-
message: message('defineEmits'),
712+
message: notAtTopMessage('defineEmits'),
709713
line: 16,
710714
column: 11,
711715
endLine: 16,
@@ -727,7 +731,7 @@ tester.run('define-macros-order', rule, {
727731
options: optionsEmitsFirst,
728732
errors: [
729733
{
730-
message: message('defineEmits'),
734+
message: unorderedMessage('defineEmits', 'defineProps'),
731735
line: 3,
732736
column: 56,
733737
endLine: 3,
@@ -749,7 +753,7 @@ tester.run('define-macros-order', rule, {
749753
options: [{ order: ['definePage', 'defineProps'] }],
750754
errors: [
751755
{
752-
message: message('definePage'),
756+
message: unorderedMessage('definePage', 'defineProps'),
753757
line: 3,
754758
column: 56,
755759
endLine: 3,
@@ -787,7 +791,7 @@ tester.run('define-macros-order', rule, {
787791
`,
788792
errors: [
789793
{
790-
message: message('defineProps'),
794+
message: unorderedMessage('defineProps', 'defineEmits'),
791795
line: 11,
792796
column: 11,
793797
endLine: 11,
@@ -805,7 +809,7 @@ tester.run('define-macros-order', rule, {
805809
`,
806810
errors: [
807811
{
808-
message: message('defineProps'),
812+
message: unorderedMessage('defineProps', 'defineEmits'),
809813
line: 2,
810814
column: 52,
811815
endLine: 2,
@@ -830,7 +834,7 @@ tester.run('define-macros-order', rule, {
830834
options: optionsEmitsFirst,
831835
errors: [
832836
{
833-
message: message('defineProps'),
837+
message: notAtTopMessage('defineProps'),
834838
line: 4,
835839
column: 11,
836840
endLine: 4,
@@ -857,7 +861,7 @@ tester.run('define-macros-order', rule, {
857861
options: optionsEmitsFirst,
858862
errors: [
859863
{
860-
message: message('defineProps'),
864+
message: notAtTopMessage('defineProps'),
861865
line: 5,
862866
column: 11,
863867
endLine: 5,
@@ -884,7 +888,7 @@ tester.run('define-macros-order', rule, {
884888
options: [{ order: ['defineCustom', 'definePage'] }],
885889
errors: [
886890
{
887-
message: message('defineCustom'),
891+
message: unorderedMessage('defineCustom', 'definePage'),
888892
line: 5,
889893
column: 11,
890894
endLine: 5,
@@ -911,7 +915,7 @@ tester.run('define-macros-order', rule, {
911915
options: [{ order: ['defineCustom', 'definePage'] }],
912916
errors: [
913917
{
914-
message: message('defineCustom'),
918+
message: unorderedMessage('defineCustom', 'definePage'),
915919
line: 5,
916920
column: 11,
917921
endLine: 5,
@@ -966,7 +970,7 @@ tester.run('define-macros-order', rule, {
966970
],
967971
errors: [
968972
{
969-
message: message('defineOptions'),
973+
message: notAtTopMessage('defineOptions'),
970974
line: 12,
971975
column: 11,
972976
endLine: 12,
@@ -1017,7 +1021,7 @@ tester.run('define-macros-order', rule, {
10171021
],
10181022
errors: [
10191023
{
1020-
message: message('defineOptions'),
1024+
message: unorderedMessage('defineOptions', 'defineSlots'),
10211025
line: 6,
10221026
column: 11,
10231027
endLine: 6,
@@ -1128,7 +1132,7 @@ tester.run('define-macros-order', rule, {
11281132
]
11291133
},
11301134
{
1131-
message: message('defineOptions'),
1135+
message: unorderedMessage('defineOptions', 'defineEmits'),
11321136
line: 8,
11331137
column: 11,
11341138
endLine: 8,
@@ -1163,7 +1167,7 @@ tester.run('define-macros-order', rule, {
11631167
],
11641168
errors: [
11651169
{
1166-
message: message('defineModel'),
1170+
message: unorderedMessage('defineModel', 'defineOptions'),
11671171
line: 6,
11681172
column: 11,
11691173
endLine: 6,
@@ -1194,7 +1198,7 @@ tester.run('define-macros-order', rule, {
11941198
],
11951199
errors: [
11961200
{
1197-
message: message('defineModel'),
1201+
message: unorderedMessage('defineModel', 'defineOptions'),
11981202
line: 5,
11991203
column: 11,
12001204
endLine: 5,
@@ -1235,7 +1239,7 @@ tester.run('define-macros-order', rule, {
12351239
],
12361240
errors: [
12371241
{
1238-
message: message('defineSomething'),
1242+
message: unorderedMessage('defineSomething', 'defineOptions'),
12391243
line: 5,
12401244
column: 11,
12411245
endLine: 5,
@@ -1271,7 +1275,7 @@ tester.run('define-macros-order', rule, {
12711275
],
12721276
errors: [
12731277
{
1274-
message: message('defineModel'),
1278+
message: unorderedMessage('defineModel', 'defineOptions'),
12751279
line: 5,
12761280
column: 11,
12771281
endLine: 5,

0 commit comments

Comments
 (0)