Skip to content

Commit 22dbaf2

Browse files
authored
Merge pull request #4709 from asgerf/js/typescript-4.1
JS: Support for TypeScript 4.1
2 parents b4be722 + e66a49b commit 22dbaf2

File tree

22 files changed

+2638
-257
lines changed

22 files changed

+2638
-257
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
lgtm,codescanning
2+
* TypeScript 4.1 is now supported.

javascript/extractor/lib/typescript/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "typescript-parser-wrapper",
33
"private": true,
44
"dependencies": {
5-
"typescript": "4.0.2"
5+
"typescript": "4.1.2"
66
},
77
"scripts": {
88
"build": "tsc --project tsconfig.json",

javascript/extractor/lib/typescript/yarn.lock

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
version "12.7.11"
77
resolved node-12.7.11.tgz#be879b52031cfb5d295b047f5462d8ef1a716446
88

9-
typescript@4.0.2:
10-
version "4.0.2"
11-
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.2.tgz#7ea7c88777c723c681e33bf7988be5d008d05ac2"
9+
typescript@4.1.2:
10+
version "4.1.2"
11+
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.2.tgz#6369ef22516fe5e10304aae5a5c4862db55380e9"
12+
integrity sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ==

javascript/extractor/src/com/semmle/js/ast/DefaultVisitor.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import com.semmle.ts.ast.ParenthesizedTypeExpr;
4444
import com.semmle.ts.ast.PredicateTypeExpr;
4545
import com.semmle.ts.ast.RestTypeExpr;
46+
import com.semmle.ts.ast.TemplateLiteralTypeExpr;
4647
import com.semmle.ts.ast.TupleTypeExpr;
4748
import com.semmle.ts.ast.TypeAliasDeclaration;
4849
import com.semmle.ts.ast.TypeAssertion;
@@ -368,6 +369,11 @@ public R visit(TemplateLiteral nd, C c) {
368369
return visit((Expression) nd, c);
369370
}
370371

372+
@Override
373+
public R visit(TemplateLiteralTypeExpr nd, C c) {
374+
return visit((TypeExpression) nd, c);
375+
}
376+
371377
@Override
372378
public R visit(TaggedTemplateExpression nd, C c) {
373379
return visit((Expression) nd, c);

javascript/extractor/src/com/semmle/js/ast/NodeCopier.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import com.semmle.ts.ast.ParenthesizedTypeExpr;
4040
import com.semmle.ts.ast.PredicateTypeExpr;
4141
import com.semmle.ts.ast.RestTypeExpr;
42+
import com.semmle.ts.ast.TemplateLiteralTypeExpr;
4243
import com.semmle.ts.ast.TupleTypeExpr;
4344
import com.semmle.ts.ast.TypeAliasDeclaration;
4445
import com.semmle.ts.ast.TypeAssertion;
@@ -419,6 +420,11 @@ public TemplateLiteral visit(TemplateLiteral nd, Void q) {
419420
return new TemplateLiteral(visit(nd.getLoc()), copy(nd.getExpressions()), copy(nd.getQuasis()));
420421
}
421422

423+
@Override
424+
public TemplateLiteralTypeExpr visit(TemplateLiteralTypeExpr nd, Void q) {
425+
return new TemplateLiteralTypeExpr(visit(nd.getLoc()), copy(nd.getExpressions()), copy(nd.getQuasis()));
426+
}
427+
422428
@Override
423429
public TaggedTemplateExpression visit(TaggedTemplateExpression nd, Void q) {
424430
return new TaggedTemplateExpression(

javascript/extractor/src/com/semmle/js/ast/TemplateLiteral.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,23 @@ public TemplateLiteral(
2121
super("TemplateLiteral", loc);
2222
this.expressions = expressions;
2323
this.quasis = quasis;
24-
this.children = mergeChildren(expressions, quasis);
24+
this.children = TemplateLiteral.<Expression>mergeChildren(expressions, quasis);
2525
}
2626

2727
/*
2828
* Merge quasis and expressions into a single array in textual order.
2929
* Also filter out the empty constant strings that the parser likes to generate.
3030
*/
31-
private List<Expression> mergeChildren(
32-
List<Expression> expressions, List<TemplateElement> quasis) {
33-
List<Expression> children = new ArrayList<Expression>();
31+
@SuppressWarnings("unchecked")
32+
public static <E extends INode> List<E> mergeChildren(
33+
List<? extends INode> expressions,
34+
List<TemplateElement> quasis) {
35+
36+
List<INode> children = new ArrayList<INode>();
3437
int j = 0, n = quasis.size();
3538

3639
for (int i = 0, m = expressions.size(); i < m; ++i) {
37-
Expression expr = expressions.get(i);
40+
INode expr = expressions.get(i);
3841
for (; j < n; ++j) {
3942
TemplateElement quasi = quasis.get(j);
4043
if (quasi.getLoc().getStart().compareTo(expr.getLoc().getStart()) > 0) break;
@@ -48,7 +51,7 @@ private List<Expression> mergeChildren(
4851
if (!quasi.getRaw().isEmpty()) children.add(quasi);
4952
}
5053

51-
return children;
54+
return (List<E>)children;
5255
}
5356

5457
@Override

javascript/extractor/src/com/semmle/js/ast/Visitor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import com.semmle.ts.ast.ParenthesizedTypeExpr;
4040
import com.semmle.ts.ast.PredicateTypeExpr;
4141
import com.semmle.ts.ast.RestTypeExpr;
42+
import com.semmle.ts.ast.TemplateLiteralTypeExpr;
4243
import com.semmle.ts.ast.TupleTypeExpr;
4344
import com.semmle.ts.ast.TypeAliasDeclaration;
4445
import com.semmle.ts.ast.TypeAssertion;
@@ -157,6 +158,8 @@ public interface Visitor<C, R> {
157158

158159
public R visit(TemplateLiteral nd, C q);
159160

161+
public R visit(TemplateLiteralTypeExpr nd, C q);
162+
160163
public R visit(TaggedTemplateExpression nd, C q);
161164

162165
public R visit(ArrowFunctionExpression nd, C q);

javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@
143143
import com.semmle.ts.ast.ParenthesizedTypeExpr;
144144
import com.semmle.ts.ast.PredicateTypeExpr;
145145
import com.semmle.ts.ast.RestTypeExpr;
146+
import com.semmle.ts.ast.TemplateLiteralTypeExpr;
146147
import com.semmle.ts.ast.TupleTypeExpr;
147148
import com.semmle.ts.ast.TypeAliasDeclaration;
148149
import com.semmle.ts.ast.TypeAssertion;
@@ -1270,6 +1271,13 @@ public Label visit(TemplateLiteral nd, Context c) {
12701271
return key;
12711272
}
12721273

1274+
@Override
1275+
public Label visit(TemplateLiteralTypeExpr nd, Context c) {
1276+
Label key = super.visit(nd, c);
1277+
visitAll(nd.getChildren(), key, IdContext.typeBind, 0);
1278+
return key;
1279+
}
1280+
12731281
@Override
12741282
public Label visit(TemplateElement nd, Context c) {
12751283
Label key = super.visit(nd, c);

javascript/extractor/src/com/semmle/js/extractor/TypeExprKinds.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.semmle.js.ast.Identifier;
77
import com.semmle.js.ast.Literal;
88
import com.semmle.js.ast.MemberExpression;
9+
import com.semmle.js.ast.TemplateElement;
910
import com.semmle.js.extractor.ASTExtractor.IdContext;
1011
import com.semmle.ts.ast.ArrayTypeExpr;
1112
import com.semmle.ts.ast.ConditionalTypeExpr;
@@ -22,6 +23,7 @@
2223
import com.semmle.ts.ast.ParenthesizedTypeExpr;
2324
import com.semmle.ts.ast.PredicateTypeExpr;
2425
import com.semmle.ts.ast.RestTypeExpr;
26+
import com.semmle.ts.ast.TemplateLiteralTypeExpr;
2527
import com.semmle.ts.ast.TupleTypeExpr;
2628
import com.semmle.ts.ast.TypeParameter;
2729
import com.semmle.ts.ast.TypeofTypeExpr;
@@ -67,6 +69,7 @@ public class TypeExprKinds {
6769
private static final int restTypeExpr = 34;
6870
private static final int bigintLiteralTypeExpr = 35;
6971
private static final int readonlyTypeExpr = 36;
72+
private static final int templateLiteralTypeExpr = 37;
7073

7174
public static int getTypeExprKind(final INode type, final IdContext idcontext) {
7275
Integer kind =
@@ -241,6 +244,16 @@ public Integer visit(OptionalTypeExpr nd, Void c) {
241244
public Integer visit(RestTypeExpr nd, Void c) {
242245
return restTypeExpr;
243246
}
247+
248+
@Override
249+
public Integer visit(TemplateLiteralTypeExpr nd, Void c) {
250+
return templateLiteralTypeExpr;
251+
}
252+
253+
@Override
254+
public Integer visit(TemplateElement nd, Void c) {
255+
return stringLiteralTypeExpr;
256+
}
244257
},
245258
null);
246259
if (kind == null)
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.semmle.ts.ast;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
import com.semmle.js.ast.Expression;
7+
import com.semmle.js.ast.INode;
8+
import com.semmle.js.ast.Node;
9+
import com.semmle.js.ast.SourceLocation;
10+
import com.semmle.js.ast.TemplateElement;
11+
import com.semmle.js.ast.TemplateLiteral;
12+
import com.semmle.js.ast.Visitor;
13+
14+
/**
15+
* A template literal used in a type, such as in <code>type T = `Hello, ${name}!`</code>.
16+
*/
17+
public class TemplateLiteralTypeExpr extends TypeExpression {
18+
private final List<ITypeExpression> expressions;
19+
private final List<TemplateElement> quasis;
20+
private final List<Node> children;
21+
22+
public TemplateLiteralTypeExpr(
23+
SourceLocation loc, List<ITypeExpression> expressions, List<TemplateElement> quasis) {
24+
super("TemplateLiteralTypeExpr", loc);
25+
this.expressions = expressions;
26+
this.quasis = quasis;
27+
this.children = TemplateLiteral.<Node>mergeChildren(expressions, quasis);
28+
}
29+
30+
@Override
31+
public <Q, A> A accept(Visitor<Q, A> v, Q q) {
32+
return v.visit(this, q);
33+
}
34+
35+
/** The type expressions in this template. */
36+
public List<ITypeExpression> getExpressions() {
37+
return expressions;
38+
}
39+
40+
/** The template elements in this template. */
41+
public List<TemplateElement> getQuasis() {
42+
return quasis;
43+
}
44+
45+
/** All type expressions and template elements in this template, in lexical order. */
46+
public List<Node> getChildren() {
47+
return children;
48+
}
49+
}

0 commit comments

Comments
 (0)