Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /