diff --git a/vue-transformations/__test__/v-for-template-key.spec.ts b/vue-transformations/__test__/v-for-template-key.spec.ts
index 60e3004..8576368 100644
--- a/vue-transformations/__test__/v-for-template-key.spec.ts
+++ b/vue-transformations/__test__/v-for-template-key.spec.ts
@@ -7,3 +7,10 @@ runTest(
'vue',
'vue'
)
+runTest(
+ ':key is not the attribute of v-for template child',
+ 'v-for-template-key',
+ 'without-v-for-template',
+ 'vue',
+ 'vue'
+)
diff --git a/vue-transformations/__testfixtures__/v-for-template-key/without-v-for-template.input.vue b/vue-transformations/__testfixtures__/v-for-template-key/without-v-for-template.input.vue
new file mode 100644
index 0000000..cdc3673
--- /dev/null
+++ b/vue-transformations/__testfixtures__/v-for-template-key/without-v-for-template.input.vue
@@ -0,0 +1,12 @@
+
+
+
diff --git a/vue-transformations/__testfixtures__/v-for-template-key/without-v-for-template.output.vue b/vue-transformations/__testfixtures__/v-for-template-key/without-v-for-template.output.vue
new file mode 100644
index 0000000..cdc3673
--- /dev/null
+++ b/vue-transformations/__testfixtures__/v-for-template-key/without-v-for-template.output.vue
@@ -0,0 +1,12 @@
+
+
+
diff --git a/vue-transformations/v-for-template-key.ts b/vue-transformations/v-for-template-key.ts
index 6cbe9c3..f7d280e 100644
--- a/vue-transformations/v-for-template-key.ts
+++ b/vue-transformations/v-for-template-key.ts
@@ -66,7 +66,7 @@ function fix(node: any): Operation[] {
const target: any = node!.parent!.parent
// The current node has no attribute that is v-for
- let havaForBrother: boolean = false
+ let hasForAttr: boolean = false
target.startTag.attributes
.filter(
(attr: any) =>
@@ -74,21 +74,23 @@ function fix(node: any): Operation[] {
attr.key.type === 'VDirectiveKey' &&
attr.key.name.name === 'for'
)
- .forEach((element: any) => {
- havaForBrother = true
+ .forEach(() => {
+ hasForAttr = true
})
- if (havaForBrother) {
+ if (hasForAttr) {
return fixOperations
}
let elder: any = null
- let elderHasKey: any = false
- let tmp: any = target.parent
+ let elderHasKey: boolean = false
+ let elderHasFor: boolean = false
+ let tmp: any = target
// find template parent
while (elder == null && tmp != null) {
elderHasKey = false
- if (tmp.type != 'VElement' || tmp.name != 'template') {
- tmp = tmp.parent
+ elderHasFor = false
+ tmp = tmp.parent
+ if (tmp == null || tmp.type != 'VElement' || tmp.name != 'template') {
continue
}
@@ -97,36 +99,42 @@ function fix(node: any): Operation[] {
(attr: any) =>
attr.type === 'VAttribute' &&
attr.key.type === 'VDirectiveKey' &&
- attr.key.name.name === 'bind' &&
- attr.key.argument?.type === 'VIdentifier' &&
- attr.key.argument?.name === 'key'
+ attr.key.name.name === 'for'
)
.forEach((element: any) => {
- elderHasKey = true
+ elderHasFor = true
+ elder = element
})
- if (elderHasKey) {
- break
- }
-
tmp.startTag.attributes
.filter(
(attr: any) =>
attr.type === 'VAttribute' &&
attr.key.type === 'VDirectiveKey' &&
- attr.key.name.name === 'for'
+ attr.key.name.name === 'bind' &&
+ attr.key.argument?.type === 'VIdentifier' &&
+ attr.key.argument?.name === 'key'
)
- .forEach((element: any) => {
- elder = element
+ .forEach(() => {
+ elderHasKey = true
})
+
+ if (elderHasFor) {
+ break
+ }
+ }
+
+ if (!elderHasFor) {
+ return fixOperations
}
let expression: string = getExpression(node.value)
fixOperations.push(OperationUtils.remove(node))
if (
+ !elderHasKey &&
util.inspect(operatingParentElements).indexOf(util.inspect(elder.range)) ==
- -1
+ -1
) {
operatingParentElements.push(elder.range)
fixOperations.push(