Skip to content

Commit b8535d3

Browse files
Omit empty template tail literals.
1 parent aabfebd commit b8535d3

8 files changed

+205
-3
lines changed

src/compiler/emitter.ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -852,8 +852,13 @@ module ts {
852852
write(")");
853853
}
854854

855-
write(" + ")
856-
emitLiteral(templateSpan.literal);
855+
// Only emit if the literal is non-empty.
856+
// The binary '+' operator is left-associative, so the first string concatenation will force
857+
// the result up to this point to be a string. Emitting a '+ ""' has no semantic effect.
858+
if (templateSpan.literal.text.length !== 0) {
859+
write(" + ")
860+
emitLiteral(templateSpan.literal);
861+
}
857862
});
858863

859864
if (templateNeedsParens) {

tests/baselines/reference/templateStringInInOperator.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
var x = `${ "hi" }` in { hi: 10, hello: 20};
33

44
//// [templateStringInInOperator.js]
5-
var x = "" + "hi" + "" in { hi: 10, hello: 20 };
5+
var x = "" + "hi" in { hi: 10, hello: 20 };
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
//// [templateStringWithEmptyLiteralPortions.ts]
2+
var a = ``;
3+
4+
var b = `${ 0 }`;
5+
6+
var c = `1${ 0 }`;
7+
8+
var d = `${ 0 }2`;
9+
10+
var e = `1${ 0 }2`;
11+
12+
var f = `${ 0 }${ 0 }`;
13+
14+
var g = `1${ 0 }${ 0 }`;
15+
16+
var h = `${ 0 }2${ 0 }`;
17+
18+
var i = `1${ 0 }2${ 0 }`;
19+
20+
var j = `${ 0 }${ 0 }3`;
21+
22+
var k = `1${ 0 }${ 0 }3`;
23+
24+
var l = `1${ 0 }2${ 0 }3`;
25+
26+
//// [templateStringWithEmptyLiteralPortions.js]
27+
var a = "";
28+
var b = "" + 0;
29+
var c = "1" + 0;
30+
var d = "" + 0 + "2";
31+
var e = "1" + 0 + "2";
32+
var f = "" + 0 + 0;
33+
var g = "1" + 0 + 0;
34+
var h = "" + 0 + "2" + 0;
35+
var i = "1" + 0 + "2" + 0;
36+
var j = "" + 0 + 0 + "3";
37+
var k = "1" + 0 + 0 + "3";
38+
var l = "1" + 0 + "2" + 0 + "3";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
=== tests/cases/conformance/es6/templates/templateStringWithEmptyLiteralPortions.ts ===
2+
var a = ``;
3+
>a : string
4+
5+
var b = `${ 0 }`;
6+
>b : string
7+
8+
var c = `1${ 0 }`;
9+
>c : string
10+
11+
var d = `${ 0 }2`;
12+
>d : string
13+
14+
var e = `1${ 0 }2`;
15+
>e : string
16+
17+
var f = `${ 0 }${ 0 }`;
18+
>f : string
19+
20+
var g = `1${ 0 }${ 0 }`;
21+
>g : string
22+
23+
var h = `${ 0 }2${ 0 }`;
24+
>h : string
25+
26+
var i = `1${ 0 }2${ 0 }`;
27+
>i : string
28+
29+
var j = `${ 0 }${ 0 }3`;
30+
>j : string
31+
32+
var k = `1${ 0 }${ 0 }3`;
33+
>k : string
34+
35+
var l = `1${ 0 }2${ 0 }3`;
36+
>l : string
37+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
//// [templateStringWithEmptyLiteralPortionsES6.ts]
2+
var a = ``;
3+
4+
var b = `${ 0 }`;
5+
6+
var c = `1${ 0 }`;
7+
8+
var d = `${ 0 }2`;
9+
10+
var e = `1${ 0 }2`;
11+
12+
var f = `${ 0 }${ 0 }`;
13+
14+
var g = `1${ 0 }${ 0 }`;
15+
16+
var h = `${ 0 }2${ 0 }`;
17+
18+
var i = `1${ 0 }2${ 0 }`;
19+
20+
var j = `${ 0 }${ 0 }3`;
21+
22+
var k = `1${ 0 }${ 0 }3`;
23+
24+
var l = `1${ 0 }2${ 0 }3`;
25+
26+
//// [templateStringWithEmptyLiteralPortionsES6.js]
27+
var a = ``;
28+
var b = `${0}`;
29+
var c = `1${0}`;
30+
var d = `${0}2`;
31+
var e = `1${0}2`;
32+
var f = `${0}${0}`;
33+
var g = `1${0}${0}`;
34+
var h = `${0}2${0}`;
35+
var i = `1${0}2${0}`;
36+
var j = `${0}${0}3`;
37+
var k = `1${0}${0}3`;
38+
var l = `1${0}2${0}3`;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
=== tests/cases/conformance/es6/templates/templateStringWithEmptyLiteralPortionsES6.ts ===
2+
var a = ``;
3+
>a : string
4+
5+
var b = `${ 0 }`;
6+
>b : string
7+
8+
var c = `1${ 0 }`;
9+
>c : string
10+
11+
var d = `${ 0 }2`;
12+
>d : string
13+
14+
var e = `1${ 0 }2`;
15+
>e : string
16+
17+
var f = `${ 0 }${ 0 }`;
18+
>f : string
19+
20+
var g = `1${ 0 }${ 0 }`;
21+
>g : string
22+
23+
var h = `${ 0 }2${ 0 }`;
24+
>h : string
25+
26+
var i = `1${ 0 }2${ 0 }`;
27+
>i : string
28+
29+
var j = `${ 0 }${ 0 }3`;
30+
>j : string
31+
32+
var k = `1${ 0 }${ 0 }3`;
33+
>k : string
34+
35+
var l = `1${ 0 }2${ 0 }3`;
36+
>l : string
37+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
var a = ``;
2+
3+
var b = `${ 0 }`;
4+
5+
var c = `1${ 0 }`;
6+
7+
var d = `${ 0 }2`;
8+
9+
var e = `1${ 0 }2`;
10+
11+
var f = `${ 0 }${ 0 }`;
12+
13+
var g = `1${ 0 }${ 0 }`;
14+
15+
var h = `${ 0 }2${ 0 }`;
16+
17+
var i = `1${ 0 }2${ 0 }`;
18+
19+
var j = `${ 0 }${ 0 }3`;
20+
21+
var k = `1${ 0 }${ 0 }3`;
22+
23+
var l = `1${ 0 }2${ 0 }3`;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// @target: ES6
2+
var a = ``;
3+
4+
var b = `${ 0 }`;
5+
6+
var c = `1${ 0 }`;
7+
8+
var d = `${ 0 }2`;
9+
10+
var e = `1${ 0 }2`;
11+
12+
var f = `${ 0 }${ 0 }`;
13+
14+
var g = `1${ 0 }${ 0 }`;
15+
16+
var h = `${ 0 }2${ 0 }`;
17+
18+
var i = `1${ 0 }2${ 0 }`;
19+
20+
var j = `${ 0 }${ 0 }3`;
21+
22+
var k = `1${ 0 }${ 0 }3`;
23+
24+
var l = `1${ 0 }2${ 0 }3`;

0 commit comments

Comments
 (0)