Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9b52acc

Browse files
committed
TS: Handle export * as ns
1 parent 7f939fe commit 9b52acc

6 files changed

Lines changed: 22 additions & 5 deletions

File tree

javascript/extractor/src/com/semmle/js/parser/TypeScriptASTConverter.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import com.semmle.js.ast.ExportDeclaration;
3535
import com.semmle.js.ast.ExportDefaultDeclaration;
3636
import com.semmle.js.ast.ExportNamedDeclaration;
37+
import com.semmle.js.ast.ExportNamespaceSpecifier;
3738
import com.semmle.js.ast.ExportSpecifier;
3839
import com.semmle.js.ast.Expression;
3940
import com.semmle.js.ast.ExpressionStatement;
@@ -507,6 +508,8 @@ private Node convertNodeUntyped(JsonObject node, String defaultKind) throws Pars
507508
return convertNamespaceDeclaration(node, loc);
508509
case "ModuleBlock":
509510
return convertModuleBlock(node, loc);
511+
case "NamespaceExport":
512+
return convertNamespaceExport(node, loc);
510513
case "NamespaceExportDeclaration":
511514
return convertNamespaceExportDeclaration(node, loc);
512515
case "NamespaceImport":
@@ -1170,11 +1173,11 @@ private Node convertExportAssignment(JsonObject node, SourceLocation loc) throws
11701173
private Node convertExportDeclaration(JsonObject node, SourceLocation loc) throws ParseError {
11711174
Literal source = tryConvertChild(node, "moduleSpecifier", Literal.class);
11721175
if (hasChild(node, "exportClause")) {
1173-
return new ExportNamedDeclaration(
1174-
loc,
1175-
null,
1176-
convertChildren(node.get("exportClause").getAsJsonObject(), "elements"),
1177-
source);
1176+
List<ExportSpecifier> specifiers =
1177+
hasKind(node.get("exportClause"), "NamespaceExport")
1178+
? Collections.singletonList(convertChild(node, "exportClause"))
1179+
: convertChildren(node.get("exportClause").getAsJsonObject(), "elements");
1180+
return new ExportNamedDeclaration(loc, null, specifiers, source);
11781181
} else {
11791182
return new ExportAllDeclaration(loc, source);
11801183
}
@@ -1187,6 +1190,11 @@ private Node convertExportSpecifier(JsonObject node, SourceLocation loc) throws
11871190
convertChild(node, "name"));
11881191
}
11891192

1193+
private Node convertNamespaceExport(JsonObject node, SourceLocation loc) throws ParseError {
1194+
// Convert the "* as ns" from an export declaration.
1195+
return new ExportNamespaceSpecifier(loc, convertChild(node, "name"));
1196+
}
1197+
11901198
private Node convertExpressionStatement(JsonObject node, SourceLocation loc) throws ParseError {
11911199
Expression expression = convertChild(node, "expression");
11921200
return new ExpressionStatement(loc, expression);
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { ns } from "./reexport";
2+
3+
ns.foo();
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export function foo() {}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * as ns from "./lib";
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
| reexport.ts:1:13:1:14 | ns |
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import javascript
2+
3+
query ExportNamespaceSpecifier test_ExportNamespaceSpecifier() { any() }

0 commit comments

Comments
 (0)