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 101cabf

Browse files
Improve docs and error message for vue/no-dupe-keys (#2260)
1 parent 28efd94 commit 101cabf

File tree

5 files changed

+82
-45
lines changed

5 files changed

+82
-45
lines changed

‎docs/rules/no-dupe-keys.md‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ since: v3.9.0
1111
1212
- :gear: This rule is included in all of `"plugin:vue/vue3-essential"`, `"plugin:vue/essential"`, `"plugin:vue/vue3-strongly-recommended"`, `"plugin:vue/strongly-recommended"`, `"plugin:vue/vue3-recommended"` and `"plugin:vue/recommended"`.
1313

14-
This rule prevents to use duplicated names.
14+
This rule prevents using duplicate key names.
1515

1616
## :book: Rule Details
1717

18-
This rule is aimed at preventing duplicated property names.
18+
This rule prevents duplicate `props`/`data`/`methods`/etc. key names defined on a component.
19+
Even if a key name does not conflict in the `<script>` tag itself, it still may lead to a conflict in the `<template>` since Vue allows directly accessing these keys from there.
1920

2021
<eslint-code-block :rules="{'vue/no-dupe-keys': ['error']}">
2122

‎docs/rules/no-duplicate-attr-inheritance.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ since: v7.0.0
1111
1212
## :book: Rule Details
1313

14-
This rule aims to prevent duplicated attribute inheritance.
14+
This rule aims to prevent duplicate attribute inheritance.
1515
This rule to warn to apply `inheritAttrs: false` when it detects `v-bind="$attrs"` being used.
1616

1717
<eslint-code-block :rules="{'vue/no-duplicate-attr-inheritance': ['error']}">

‎docs/rules/no-duplicate-attributes.md‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,12 @@ since: v3.0.0
1111
1212
- :gear: This rule is included in all of `"plugin:vue/vue3-essential"`, `"plugin:vue/essential"`, `"plugin:vue/vue3-strongly-recommended"`, `"plugin:vue/strongly-recommended"`, `"plugin:vue/vue3-recommended"` and `"plugin:vue/recommended"`.
1313

14-
When duplicate arguments exist, only the last one is valid.
15-
It's possibly mistakes.
14+
When there are multiple attributes with the same name on a component, only the last one is used and the rest are ignored, so this is usually a mistake.
1615

1716
## :book: Rule Details
1817

1918
This rule reports duplicate attributes.
20-
`v-bind:foo` directives are handled as the attributes `foo`.
19+
`v-bind:foo` directives are handled as the attribute `foo`.
2120

2221
<eslint-code-block :rules="{'vue/no-duplicate-attributes': ['error']}">
2322

‎lib/rules/no-dupe-keys.js‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ module.exports = {
7979
}
8080
],
8181
messages: {
82-
duplicatedKey: "Duplicated key '{{name}}'."
82+
duplicateKey:
83+
"Duplicate key '{{name}}'. May cause name collision in script or template tag."
8384
}
8485
},
8586
/** @param {RuleContext} context */
@@ -96,7 +97,7 @@ module.exports = {
9697
if (usedNames.has(o.name)) {
9798
context.report({
9899
node: o.node,
99-
messageId: 'duplicatedKey',
100+
messageId: 'duplicateKey',
100101
data: {
101102
name: o.name
102103
}
@@ -131,7 +132,7 @@ module.exports = {
131132

132133
context.report({
133134
node: variable.defs[0].node,
134-
messageId: 'duplicatedKey',
135+
messageId: 'duplicateKey',
135136
data: {
136137
name: prop.propName
137138
}

‎tests/lib/rules/no-dupe-keys.js‎

Lines changed: 72 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -529,19 +529,23 @@ ruleTester.run('no-dupe-keys', rule, {
529529
`,
530530
errors: [
531531
{
532-
message: "Duplicated key 'foo'.",
532+
message:
533+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
533534
line: 5
534535
},
535536
{
536-
message: "Duplicated key 'foo'.",
537+
message:
538+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
537539
line: 10
538540
},
539541
{
540-
message: "Duplicated key 'foo'.",
542+
message:
543+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
541544
line: 14
542545
},
543546
{
544-
message: "Duplicated key 'foo'.",
547+
message:
548+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
545549
line: 21
546550
}
547551
]
@@ -575,19 +579,23 @@ ruleTester.run('no-dupe-keys', rule, {
575579
`,
576580
errors: [
577581
{
578-
message: "Duplicated key 'foo'.",
582+
message:
583+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
579584
line: 5
580585
},
581586
{
582-
message: "Duplicated key 'foo'.",
587+
message:
588+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
583589
line: 10
584590
},
585591
{
586-
message: "Duplicated key 'foo'.",
592+
message:
593+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
587594
line: 14
588595
},
589596
{
590-
message: "Duplicated key 'foo'.",
597+
message:
598+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
591599
line: 21
592600
}
593601
]
@@ -612,15 +620,18 @@ ruleTester.run('no-dupe-keys', rule, {
612620
`,
613621
errors: [
614622
{
615-
message: "Duplicated key 'foo'.",
623+
message:
624+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
616625
line: 5
617626
},
618627
{
619-
message: "Duplicated key 'foo'.",
628+
message:
629+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
620630
line: 9
621631
},
622632
{
623-
message: "Duplicated key 'foo'.",
633+
message:
634+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
624635
line: 12
625636
}
626637
]
@@ -656,19 +667,23 @@ ruleTester.run('no-dupe-keys', rule, {
656667
`,
657668
errors: [
658669
{
659-
message: "Duplicated key 'foo'.",
670+
message:
671+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
660672
line: 7
661673
},
662674
{
663-
message: "Duplicated key 'foo'.",
675+
message:
676+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
664677
line: 13
665678
},
666679
{
667-
message: "Duplicated key 'foo'.",
680+
message:
681+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
668682
line: 16
669683
},
670684
{
671-
message: "Duplicated key 'foo'.",
685+
message:
686+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
672687
line: 23
673688
}
674689
]
@@ -688,7 +703,8 @@ ruleTester.run('no-dupe-keys', rule, {
688703
options: [{ groups: ['foo'] }],
689704
errors: [
690705
{
691-
message: "Duplicated key 'bar'.",
706+
message:
707+
"Duplicate key 'bar'. May cause name collision in script or template tag.",
692708
line: 7
693709
}
694710
]
@@ -713,7 +729,8 @@ ruleTester.run('no-dupe-keys', rule, {
713729
`,
714730
errors: [
715731
{
716-
message: "Duplicated key 'foo'.",
732+
message:
733+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
717734
line: 12
718735
}
719736
]
@@ -736,7 +753,8 @@ ruleTester.run('no-dupe-keys', rule, {
736753
`,
737754
errors: [
738755
{
739-
message: "Duplicated key 'foo'.",
756+
message:
757+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
740758
line: 10
741759
}
742760
]
@@ -757,7 +775,8 @@ ruleTester.run('no-dupe-keys', rule, {
757775
`,
758776
errors: [
759777
{
760-
message: "Duplicated key 'foo'.",
778+
message:
779+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
761780
line: 9
762781
}
763782
]
@@ -778,7 +797,8 @@ ruleTester.run('no-dupe-keys', rule, {
778797
`,
779798
errors: [
780799
{
781-
message: "Duplicated key 'foo'.",
800+
message:
801+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
782802
line: 9
783803
}
784804
]
@@ -799,7 +819,8 @@ ruleTester.run('no-dupe-keys', rule, {
799819
`,
800820
errors: [
801821
{
802-
message: "Duplicated key 'foo'.",
822+
message:
823+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
803824
line: 9
804825
}
805826
]
@@ -820,7 +841,8 @@ ruleTester.run('no-dupe-keys', rule, {
820841
`,
821842
errors: [
822843
{
823-
message: "Duplicated key 'foo'.",
844+
message:
845+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
824846
line: 9
825847
}
826848
]
@@ -840,7 +862,8 @@ ruleTester.run('no-dupe-keys', rule, {
840862
options: [{ groups: ['foo'] }],
841863
errors: [
842864
{
843-
message: "Duplicated key 'bar'.",
865+
message:
866+
"Duplicate key 'bar'. May cause name collision in script or template tag.",
844867
line: 7
845868
}
846869
]
@@ -860,7 +883,8 @@ ruleTester.run('no-dupe-keys', rule, {
860883
options: [{ groups: ['foo'] }],
861884
errors: [
862885
{
863-
message: "Duplicated key 'bar'.",
886+
message:
887+
"Duplicate key 'bar'. May cause name collision in script or template tag.",
864888
line: 7
865889
}
866890
]
@@ -884,7 +908,8 @@ ruleTester.run('no-dupe-keys', rule, {
884908
`,
885909
errors: [
886910
{
887-
message: "Duplicated key 'foo'.",
911+
message:
912+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
888913
line: 6
889914
}
890915
]
@@ -904,7 +929,8 @@ ruleTester.run('no-dupe-keys', rule, {
904929
`,
905930
errors: [
906931
{
907-
message: "Duplicated key 'foo'.",
932+
message:
933+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
908934
line: 7
909935
}
910936
]
@@ -923,7 +949,8 @@ ruleTester.run('no-dupe-keys', rule, {
923949
`,
924950
errors: [
925951
{
926-
message: "Duplicated key 'foo'.",
952+
message:
953+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
927954
line: 6
928955
}
929956
]
@@ -943,7 +970,8 @@ ruleTester.run('no-dupe-keys', rule, {
943970
`,
944971
errors: [
945972
{
946-
message: "Duplicated key 'foo'.",
973+
message:
974+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
947975
line: 7
948976
}
949977
]
@@ -963,7 +991,8 @@ ruleTester.run('no-dupe-keys', rule, {
963991
`,
964992
errors: [
965993
{
966-
message: "Duplicated key 'foo'.",
994+
message:
995+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
967996
line: 7
968997
}
969998
]
@@ -981,7 +1010,8 @@ ruleTester.run('no-dupe-keys', rule, {
9811010
parser: require.resolve('vue-eslint-parser'),
9821011
errors: [
9831012
{
984-
message: "Duplicated key 'foo'.",
1013+
message:
1014+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
9851015
line: 6
9861016
}
9871017
]
@@ -1008,15 +1038,18 @@ ruleTester.run('no-dupe-keys', rule, {
10081038
parser: require.resolve('vue-eslint-parser'),
10091039
errors: [
10101040
{
1011-
message: "Duplicated key 'baz'.",
1041+
message:
1042+
"Duplicate key 'baz'. May cause name collision in script or template tag.",
10121043
line: 4
10131044
},
10141045
{
1015-
message: "Duplicated key 'foo'.",
1046+
message:
1047+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
10161048
line: 12
10171049
},
10181050
{
1019-
message: "Duplicated key 'bar'.",
1051+
message:
1052+
"Duplicate key 'bar'. May cause name collision in script or template tag.",
10201053
line: 15
10211054
}
10221055
]
@@ -1038,11 +1071,13 @@ ruleTester.run('no-dupe-keys', rule, {
10381071
parserOptions: { parser: require.resolve('@typescript-eslint/parser') },
10391072
errors: [
10401073
{
1041-
message: "Duplicated key 'foo'.",
1074+
message:
1075+
"Duplicate key 'foo'. May cause name collision in script or template tag.",
10421076
line: 8
10431077
},
10441078
{
1045-
message: "Duplicated key 'bar'.",
1079+
message:
1080+
"Duplicate key 'bar'. May cause name collision in script or template tag.",
10461081
line: 9
10471082
}
10481083
]
@@ -1059,7 +1094,8 @@ ruleTester.run('no-dupe-keys', rule, {
10591094
parser: require.resolve('vue-eslint-parser'),
10601095
errors: [
10611096
{
1062-
message: "Duplicated key 'bar'.",
1097+
message:
1098+
"Duplicate key 'bar'. May cause name collision in script or template tag.",
10631099
line: 5
10641100
}
10651101
]

0 commit comments

Comments
(0)

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