]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(compiler-core): keep whitespaces between interpolation and comment (#6828)
authorRudy <xuhaodong66@foxmail.com>
Tue, 8 Nov 2022 14:50:43 +0000 (22:50 +0800)
committerGitHub <noreply@github.com>
Tue, 8 Nov 2022 14:50:43 +0000 (09:50 -0500)
fix #6352

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

index 4154e306c79dfa43cf0bb317267f99af2b1a1e98..8979e8fb0e1dc10ea87452e1297bc615953f3449 100644 (file)
@@ -1980,6 +1980,17 @@ foo
       expect(ast.children[2].type).toBe(NodeTypes.INTERPOLATION)
     })
 
+    it('should NOT remove whitespaces w/ newline between interpolation and comment', () => {
+      const ast = parse(`<!-- foo --> \n {{msg}}`)
+      expect(ast.children.length).toBe(3)
+      expect(ast.children[0].type).toBe(NodeTypes.COMMENT)
+      expect(ast.children[1]).toMatchObject({
+        type: NodeTypes.TEXT,
+        content: ' '
+      })
+      expect(ast.children[2].type).toBe(NodeTypes.INTERPOLATION)
+    })
+    
     it('should NOT remove whitespaces w/o newline between elements', () => {
       const ast = parse(`<div/> <div/> <div/>`)
       expect(ast.children.length).toBe(5)
index 2f904098e60672472dd67b2d4218bb85017a3460..642f3edafd776dcb7503fbd86384b9ccf8603f97 100644 (file)
@@ -264,14 +264,19 @@ function parseChildren(
             const next = nodes[i + 1]
             // Remove if:
             // - the whitespace is the first or last node, or:
-            // - (condense mode) the whitespace is adjacent to a comment, or:
+            // - (condense mode) the whitespace is between twos comments, or:
+            // - (condense mode) the whitespace is between comment and element, or:
             // - (condense mode) the whitespace is between two elements AND contains newline
             if (
               !prev ||
               !next ||
               (shouldCondense &&
-                (prev.type === NodeTypes.COMMENT ||
-                  next.type === NodeTypes.COMMENT ||
+                ((prev.type === NodeTypes.COMMENT &&
+                  next.type === NodeTypes.COMMENT) ||
+                  (prev.type === NodeTypes.COMMENT && 
+                  next.type === NodeTypes.ELEMENT) ||
+                  (prev.type === NodeTypes.ELEMENT &&
+                  next.type === NodeTypes.COMMENT) ||
                   (prev.type === NodeTypes.ELEMENT &&
                     next.type === NodeTypes.ELEMENT &&
                     /[\r\n]/.test(node.content))))