Skip to content

Commit 0880857

Browse files
louybasarat
authored andcommitted
Fix a bug in stringConcatToTemplate quick fix (#1051)
* Fix a bug in stringConcatToTemplate quickfix * Don't store finalOutput as a class property
1 parent c70a256 commit 0880857

File tree

2 files changed

+17
-16
lines changed

2 files changed

+17
-16
lines changed

dist/main/lang/fixmyts/quickFixes/stringConcatToTemplate.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ var StringConcatToTemplate = (function () {
2525
this.backTickCharacter = '`';
2626
this.backTick = new RegExp(this.backTickCharacter, 'g');
2727
this.$regex = /\$/g;
28-
this.finalOutput = [];
2928
this.key = StringConcatToTemplate.name;
3029
}
3130
StringConcatToTemplate.prototype.canProvideFix = function (info) {
@@ -35,21 +34,22 @@ var StringConcatToTemplate = (function () {
3534
}
3635
};
3736
StringConcatToTemplate.prototype.provideFix = function (info) {
37+
var finalOutput = [];
3838
var strRoot = isAPartOfAChainOfStringAdditions(info.positionNode, info.typeChecker);
3939
var current = strRoot;
4040
while (true) {
4141
if (current.kind == ts.SyntaxKind.BinaryExpression) {
4242
var binary = current;
43-
this.appendToFinal(binary.right);
43+
this.appendToFinal(finalOutput, binary.right);
4444
current = binary.left;
4545
}
4646
else {
47-
this.appendToFinal(current);
47+
this.appendToFinal(finalOutput, current);
4848
break;
4949
}
5050
}
5151
var newText = this.backTickCharacter +
52-
this.finalOutput.join('') +
52+
finalOutput.join('') +
5353
this.backTickCharacter;
5454
var refactoring = {
5555
span: {
@@ -61,7 +61,7 @@ var StringConcatToTemplate = (function () {
6161
};
6262
return [refactoring];
6363
};
64-
StringConcatToTemplate.prototype.appendToFinal = function (node) {
64+
StringConcatToTemplate.prototype.appendToFinal = function (finalOutput, node) {
6565
if (node.kind == ts.SyntaxKind.StringLiteral) {
6666
var text = node.getText();
6767
var quoteCharacter = text.trim()[0];
@@ -72,16 +72,16 @@ var StringConcatToTemplate = (function () {
7272
.replace(escapedQuoteRegex, quoteCharacter)
7373
.replace(this.$regex, '\\$');
7474
newText = newText.substr(1, newText.length - 2);
75-
this.finalOutput.unshift(newText);
75+
finalOutput.unshift(newText);
7676
}
7777
else if (node.kind == ts.SyntaxKind.TemplateExpression || node.kind == ts.SyntaxKind.NoSubstitutionTemplateLiteral) {
7878
var text = node.getText();
7979
text = text.trim();
8080
text = text.substr(1, text.length - 2);
81-
this.finalOutput.unshift(text);
81+
finalOutput.unshift(text);
8282
}
8383
else {
84-
this.finalOutput.unshift('${' + node.getText() + '}');
84+
finalOutput.unshift('${' + node.getText() + '}');
8585
}
8686
};
8787
return StringConcatToTemplate;

lib/main/lang/fixmyts/quickFixes/stringConcatToTemplate.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ export class StringConcatToTemplate implements QuickFix {
3636
backTickCharacter = '`';
3737
backTick = new RegExp(this.backTickCharacter, 'g');
3838
$regex = /\$/g;
39-
finalOutput: string[] = [];
4039
key = StringConcatToTemplate.name;
4140

4241
canProvideFix(info: QuickFixQueryInformation): CanProvideFixResponse {
@@ -53,6 +52,8 @@ export class StringConcatToTemplate implements QuickFix {
5352
}
5453

5554
provideFix(info: QuickFixQueryInformation): Refactoring[] {
55+
const finalOutput: string[] = [];
56+
5657
var strRoot = isAPartOfAChainOfStringAdditions(info.positionNode, info.typeChecker);
5758
let current: ts.Node = strRoot;
5859

@@ -61,19 +62,19 @@ export class StringConcatToTemplate implements QuickFix {
6162
// if we are still in some sequence of additions
6263
if (current.kind == ts.SyntaxKind.BinaryExpression) {
6364
let binary = <ts.BinaryExpression>current;
64-
this.appendToFinal(binary.right);
65+
this.appendToFinal(finalOutput, binary.right);
6566

6667
// Continue with left
6768
current = binary.left;
6869
}
6970
else {
70-
this.appendToFinal(current);
71+
this.appendToFinal(finalOutput, current);
7172
break;
7273
}
7374
}
7475

7576
let newText = this.backTickCharacter +
76-
this.finalOutput.join('') +
77+
finalOutput.join('') +
7778
this.backTickCharacter;
7879

7980
var refactoring: Refactoring = {
@@ -88,7 +89,7 @@ export class StringConcatToTemplate implements QuickFix {
8889
return [refactoring];
8990
}
9091

91-
private appendToFinal(node: ts.Node) {
92+
private appendToFinal(finalOutput: string[], node: ts.Node) {
9293
// Each string literal needs :
9394
// to be checked that it doesn't contain (`) and those need to be escaped.
9495
// Also `$` needs escaping
@@ -106,17 +107,17 @@ export class StringConcatToTemplate implements QuickFix {
106107
.replace(this.$regex, '\\$');
107108

108109
newText = newText.substr(1, newText.length - 2);
109-
this.finalOutput.unshift(newText);
110+
finalOutput.unshift(newText);
110111
}
111112
else if (node.kind == ts.SyntaxKind.TemplateExpression || node.kind == ts.SyntaxKind.NoSubstitutionTemplateLiteral) {
112113
let text = node.getText();
113114
text = text.trim();
114115
text = text.substr(1, text.length - 2);
115-
this.finalOutput.unshift(text);
116+
finalOutput.unshift(text);
116117
}
117118
// Each expression that isn't a string literal will just be escaped `${}`
118119
else {
119-
this.finalOutput.unshift('${' + node.getText() + '}');
120+
finalOutput.unshift('${' + node.getText() + '}');
120121
}
121122
}
122123
}

0 commit comments

Comments
 (0)