Skip to content

Commit 30f890c

Browse files
committed
support es6 template strings in filter parser
1 parent 2dc2d06 commit 30f890c

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

src/compiler/parser/filter-parser.js

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
export function parseFilters (exp: string): string {
44
let inSingle = false
55
let inDouble = false
6+
let inTemplateString = false
67
let curly = 0
78
let square = 0
89
let paren = 0
@@ -18,6 +19,9 @@ export function parseFilters (exp: string): string {
1819
} else if (inDouble) {
1920
// check double quote
2021
if (c === 0x22 && prev !== 0x5C) inDouble = !inDouble
22+
} else if (inTemplateString) {
23+
// check template literal
24+
if (c === 0x60 && prev !== 0x5C) inTemplateString = !inTemplateString
2125
} else if (
2226
c === 0x7C && // pipe
2327
exp.charCodeAt(i + 1) !== 0x7C &&
@@ -33,14 +37,15 @@ export function parseFilters (exp: string): string {
3337
}
3438
} else {
3539
switch (c) {
36-
case 0x22: inDouble = true; break // "
37-
case 0x27: inSingle = true; break // '
38-
case 0x28: paren++; break // (
39-
case 0x29: paren--; break // )
40-
case 0x5B: square++; break // [
41-
case 0x5D: square--; break // ]
42-
case 0x7B: curly++; break // {
43-
case 0x7D: curly--; break // }
40+
case 0x22: inDouble = true; break // "
41+
case 0x27: inSingle = true; break // '
42+
case 0x60: inTemplateString = true; break // `
43+
case 0x28: paren++; break // (
44+
case 0x29: paren--; break // )
45+
case 0x5B: square++; break // [
46+
case 0x5D: square--; break // ]
47+
case 0x7B: curly++; break // {
48+
case 0x7D: curly--; break // }
4449
}
4550
}
4651
}

test/unit/features/filter/filter.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Vue from 'vue'
2+
import { parseFilters } from 'compiler/parser/filter-parser'
23

34
describe('Filters', () => {
45
it('basic usage', () => {
@@ -96,4 +97,8 @@ describe('Filters', () => {
9697
}).$mount()
9798
expect('Failed to resolve filter: upper').toHaveBeenWarned()
9899
})
100+
101+
it('support template string', () => {
102+
expect(parseFilters('`a | ${b}c` | d')).toBe('_f("d")(`a | ${b}c`)')
103+
})
99104
})

0 commit comments

Comments
 (0)