]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(compiler-sfc): fix parsing error when `lang=""` is used on plain element (#2569)
authoredison <daiwei521@126.com>
Mon, 30 Nov 2020 19:45:26 +0000 (03:45 +0800)
committerGitHub <noreply@github.com>
Mon, 30 Nov 2020 19:45:26 +0000 (14:45 -0500)
fix #2566

packages/compiler-sfc/__tests__/parse.spec.ts
packages/compiler-sfc/src/parse.ts

index a782bc837793cecc65ec1dfe8267e15fcbdf5637..dd16251e220ee7965459fdd2fc1bd2a1481ef5db 100644 (file)
@@ -144,6 +144,18 @@ h1 { color: red }
     expect(descriptor.template!.content).toBe(content)
   })
 
+  //#2566
+  test('div lang should not be treated as plain text', () => {
+    const { errors } = parse(`
+    <template lang="pug">
+      <div lang="">
+        <div></div>
+      </div>
+    </template>
+    `)
+    expect(errors.length).toBe(0)
+  })
+
   test('error tolerance', () => {
     const { errors } = parse(`<template>`)
     expect(errors.length).toBe(1)
index 9a065a457e82c251a785caec8f77ac50f04f46c1..dcdd720c3de058e81ae0bed494a55fbe9da0014c 100644 (file)
@@ -115,13 +115,14 @@ export function parse(
       if (
         (!parent && tag !== 'template') ||
         // <template lang="xxx"> should also be treated as raw text
-        props.some(
-          p =>
-            p.type === NodeTypes.ATTRIBUTE &&
-            p.name === 'lang' &&
-            p.value &&
-            p.value.content !== 'html'
-        )
+        (tag === 'template' &&
+          props.some(
+            p =>
+              p.type === NodeTypes.ATTRIBUTE &&
+              p.name === 'lang' &&
+              p.value &&
+              p.value.content !== 'html'
+          ))
       ) {
         return TextModes.RAWTEXT
       } else {