From aaa8bfb874961c04f581f48a1e514196636eda42 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 20 Mar 2019 10:08:45 +0000 Subject: [PATCH 1/4] TS: allow namespace imports as types --- .../src/com/semmle/js/extractor/ASTExtractor.java | 9 +-------- .../extractor/src/com/semmle/js/extractor/Main.java | 2 +- .../src/com/semmle/js/extractor/ScopeManager.java | 5 +---- javascript/ql/src/semmle/javascript/TypeScript.qll | 2 +- .../Declarations/UnusedVariable/UnusedVariable.expected | 1 + .../Declarations/UnusedVariable/namespaceImportAsType.ts | 9 +++++++++ 6 files changed, 14 insertions(+), 14 deletions(-) create mode 100644 javascript/ql/test/query-tests/Declarations/UnusedVariable/namespaceImportAsType.ts diff --git a/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java b/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java index 662fbefca02e..b37657b85b4f 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java +++ b/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java @@ -42,7 +42,6 @@ import com.semmle.js.ast.Identifier; import com.semmle.js.ast.IfStatement; import com.semmle.js.ast.ImportDeclaration; -import com.semmle.js.ast.ImportNamespaceSpecifier; import com.semmle.js.ast.ImportSpecifier; import com.semmle.js.ast.InvokeExpression; import com.semmle.js.ast.JumpStatement; @@ -1449,13 +1448,7 @@ public Label visit(ImportDeclaration nd, Context c) { public Label visit(ImportSpecifier nd, Context c) { Label lbl = super.visit(nd, c); visit(nd.getImported(), lbl, 0, IdContext.label); - visit( - nd.getLocal(), - lbl, - 1, - nd instanceof ImportNamespaceSpecifier - ? IdContext.varAndNamespaceDecl - : IdContext.varAndTypeAndNamespaceDecl); + visit(nd.getLocal(), lbl, 1, IdContext.varAndTypeAndNamespaceDecl); return lbl; } diff --git a/javascript/extractor/src/com/semmle/js/extractor/Main.java b/javascript/extractor/src/com/semmle/js/extractor/Main.java index 1a5f92ca4ae5..7b0700a55cf1 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/Main.java +++ b/javascript/extractor/src/com/semmle/js/extractor/Main.java @@ -37,7 +37,7 @@ public class Main { * A version identifier that should be updated every time the extractor changes in such a way that * it may produce different tuples for the same file under the same {@link ExtractorConfig}. */ - public static final String EXTRACTOR_VERSION = "2019-03-13"; + public static final String EXTRACTOR_VERSION = "2019-03-20"; public static final Pattern NEWLINE = Pattern.compile("\n"); diff --git a/javascript/extractor/src/com/semmle/js/extractor/ScopeManager.java b/javascript/extractor/src/com/semmle/js/extractor/ScopeManager.java index 8c9902c03bf7..1270b0a94092 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/ScopeManager.java +++ b/javascript/extractor/src/com/semmle/js/extractor/ScopeManager.java @@ -17,7 +17,6 @@ import com.semmle.js.ast.Identifier; import com.semmle.js.ast.IfStatement; import com.semmle.js.ast.ImportDeclaration; -import com.semmle.js.ast.ImportNamespaceSpecifier; import com.semmle.js.ast.ImportSpecifier; import com.semmle.js.ast.LabeledStatement; import com.semmle.js.ast.LetExpression; @@ -559,9 +558,7 @@ public Void visit(ImportDeclaration nd, Void c) { @Override public Void visit(ImportSpecifier nd, Void c) { - return visit( - nd.getLocal(), - nd instanceof ImportNamespaceSpecifier ? DeclKind.varAndNamespace : DeclKind.all); + return visit(nd.getLocal(), DeclKind.all); } @Override diff --git a/javascript/ql/src/semmle/javascript/TypeScript.qll b/javascript/ql/src/semmle/javascript/TypeScript.qll index eae336817718..9104d4d343f8 100644 --- a/javascript/ql/src/semmle/javascript/TypeScript.qll +++ b/javascript/ql/src/semmle/javascript/TypeScript.qll @@ -359,7 +359,7 @@ class TypeDecl extends Identifier, TypeRef, LexicalDecl { TypeDecl() { this = any(ClassOrInterface ci).getIdentifier() or this = any(TypeParameter tp).getIdentifier() or - this = any(ImportSpecifier im | not im instanceof ImportNamespaceSpecifier).getLocal() or + this = any(ImportSpecifier im).getLocal() or this = any(ImportEqualsDeclaration im).getId() or this = any(TypeAliasDeclaration td).getIdentifier() or this = any(EnumDeclaration ed).getIdentifier() or diff --git a/javascript/ql/test/query-tests/Declarations/UnusedVariable/UnusedVariable.expected b/javascript/ql/test/query-tests/Declarations/UnusedVariable/UnusedVariable.expected index 30ab3133bca8..9db0d903c2d0 100644 --- a/javascript/ql/test/query-tests/Declarations/UnusedVariable/UnusedVariable.expected +++ b/javascript/ql/test/query-tests/Declarations/UnusedVariable/UnusedVariable.expected @@ -7,6 +7,7 @@ | importWithoutPragma.jsx:1:1:1:27 | import ... react'; | Unused import h. | | multi-imports.js:1:1:1:29 | import ... om 'x'; | Unused imports a, b, d. | | multi-imports.js:2:1:2:42 | import ... om 'x'; | Unused imports alphabetically, ordered. | +| namespaceImportAsType.ts:3:1:3:23 | import ... om "z"; | Unused import Z. | | require-react-in-other-scope.js:2:9:2:13 | React | Unused variable React. | | typeoftype.ts:9:7:9:7 | y | Unused variable y. | | underscore.js:6:7:6:7 | e | Unused variable e. | diff --git a/javascript/ql/test/query-tests/Declarations/UnusedVariable/namespaceImportAsType.ts b/javascript/ql/test/query-tests/Declarations/UnusedVariable/namespaceImportAsType.ts new file mode 100644 index 000000000000..8749b3b059e4 --- /dev/null +++ b/javascript/ql/test/query-tests/Declarations/UnusedVariable/namespaceImportAsType.ts @@ -0,0 +1,9 @@ +import * as X from "x"; // OK +import * as Y from "y"; // OK +import * as Z from "z"; // NOT OK + +function f(x: X) {} +function g(x: Y.T) {} + +f(null); +g(null); From 8201e7ea27f55d0633b007f66f7d63823be37875 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 20 Mar 2019 10:23:28 +0000 Subject: [PATCH 2/4] TS: update trap test output --- .../tests/es2015/output/trap/import5.js.trap | 74 +++---- .../esnext/output/trap/yield-import.js.trap | 188 +++--------------- .../tests/ts/output/trap/importExport.ts.trap | 164 +++++++-------- 3 files changed, 150 insertions(+), 276 deletions(-) diff --git a/javascript/extractor/tests/es2015/output/trap/import5.js.trap b/javascript/extractor/tests/es2015/output/trap/import5.js.trap index ea5ea8a38363..c686a83cb668 100644 --- a/javascript/extractor/tests/es2015/output/trap/import5.js.trap +++ b/javascript/extractor/tests/es2015/output/trap/import5.js.trap @@ -65,45 +65,49 @@ isModule(#20001) isES2015Module(#20001) #20021=@"var;{foo};{#20020}" variables(#20021,"foo",#20020) -#20022=@"local_namespace_name;{foo};{#20020}" -local_namespace_names(#20022,"foo",#20020) +#20022=@"local_type_name;{foo};{#20020}" +local_type_names(#20022,"foo",#20020) +#20023=@"local_namespace_name;{foo};{#20020}" +local_namespace_names(#20023,"foo",#20020) variables(#20021,"foo",#20020) -local_namespace_names(#20022,"foo",#20020) -#20023=* -stmts(#20023,27,#20001,0,"import ... 'foo';") -hasLocation(#20023,#20003) -stmtContainers(#20023,#20001) +local_type_names(#20022,"foo",#20020) +local_namespace_names(#20023,"foo",#20020) #20024=* -exprs(#20024,4,#20023,-1,"'foo'") -hasLocation(#20024,#20015) -enclosingStmt(#20024,#20023) -exprContainers(#20024,#20001) -literals("foo","'foo'",#20024) +stmts(#20024,27,#20001,0,"import ... 'foo';") +hasLocation(#20024,#20003) +stmtContainers(#20024,#20001) #20025=* -exprs(#20025,85,#20023,0,"* as foo") -#20026=@"loc,{#10000},1,8,1,15" -locations_default(#20026,#10000,1,8,1,15) -hasLocation(#20025,#20026) -enclosingStmt(#20025,#20023) +exprs(#20025,4,#20024,-1,"'foo'") +hasLocation(#20025,#20015) +enclosingStmt(#20025,#20024) exprContainers(#20025,#20001) -#20027=* -exprs(#20027,78,#20025,1,"foo") -hasLocation(#20027,#20011) -enclosingStmt(#20027,#20023) -exprContainers(#20027,#20001) -literals("foo","foo",#20027) -decl(#20027,#20021) -namespacedecl(#20027,#20022) +literals("foo","'foo'",#20025) +#20026=* +exprs(#20026,85,#20024,0,"* as foo") +#20027=@"loc,{#10000},1,8,1,15" +locations_default(#20027,#10000,1,8,1,15) +hasLocation(#20026,#20027) +enclosingStmt(#20026,#20024) +exprContainers(#20026,#20001) #20028=* -entry_cfg_node(#20028,#20001) -#20029=@"loc,{#10000},1,1,1,0" -locations_default(#20029,#10000,1,1,1,0) -hasLocation(#20028,#20029) -#20030=* -exit_cfg_node(#20030,#20001) -hasLocation(#20030,#20019) -successor(#20023,#20030) -successor(#20025,#20023) -successor(#20028,#20025) +exprs(#20028,78,#20026,1,"foo") +hasLocation(#20028,#20011) +enclosingStmt(#20028,#20024) +exprContainers(#20028,#20001) +literals("foo","foo",#20028) +decl(#20028,#20021) +typedecl(#20028,#20022) +namespacedecl(#20028,#20023) +#20029=* +entry_cfg_node(#20029,#20001) +#20030=@"loc,{#10000},1,1,1,0" +locations_default(#20030,#10000,1,1,1,0) +hasLocation(#20029,#20030) +#20031=* +exit_cfg_node(#20031,#20001) +hasLocation(#20031,#20019) +successor(#20024,#20031) +successor(#20026,#20024) +successor(#20029,#20026) numlines(#10000,1,1,0) filetype(#10000,"javascript") diff --git a/javascript/extractor/tests/esnext/output/trap/yield-import.js.trap b/javascript/extractor/tests/esnext/output/trap/yield-import.js.trap index 54996ba291ed..1dc036e0f15d 100644 --- a/javascript/extractor/tests/esnext/output/trap/yield-import.js.trap +++ b/javascript/extractor/tests/esnext/output/trap/yield-import.js.trap @@ -9,169 +9,35 @@ hasLocation(#10000,#10002) #20000=@"global_scope" scopes(#20000,0) #20001=@"script;{#10000},1,1" -#20002=* -lines(#20002,#20001,"function* f() {"," +toplevels(#20001,0) +#20002=@"loc,{#10000},1,1,1,1" +locations_default(#20002,#10000,1,1,1,1) +hasLocation(#20001,#20002) +#20003=* +jsParseErrors(#20003,#20001,"Error: Unexpected token"," yield import(""foo"") +") +#20004=@"loc,{#10000},2,9,2,9" +locations_default(#20004,#10000,2,9,2,9) +hasLocation(#20003,#20004) +#20005=* +lines(#20005,#20001,"function* f() {"," ") -#20003=@"loc,{#10000},1,1,1,15" -locations_default(#20003,#10000,1,1,1,15) -hasLocation(#20002,#20003) -#20004=* -lines(#20004,#20001," yield import(""foo"")"," +#20006=@"loc,{#10000},1,1,1,15" +locations_default(#20006,#10000,1,1,1,15) +hasLocation(#20005,#20006) +#20007=* +lines(#20007,#20001," yield import(""foo"")"," ") -#20005=@"loc,{#10000},2,1,2,21" -locations_default(#20005,#10000,2,1,2,21) -hasLocation(#20004,#20005) +#20008=@"loc,{#10000},2,1,2,21" +locations_default(#20008,#10000,2,1,2,21) +hasLocation(#20007,#20008) indentation(#10000,2," ",2) -#20006=* -lines(#20006,#20001,"}"," +#20009=* +lines(#20009,#20001,"}"," ") -#20007=@"loc,{#10000},3,1,3,1" -locations_default(#20007,#10000,3,1,3,1) -hasLocation(#20006,#20007) -numlines(#20001,3,3,0) -#20008=* -tokeninfo(#20008,7,#20001,0,"function") -#20009=@"loc,{#10000},1,1,1,8" -locations_default(#20009,#10000,1,1,1,8) -hasLocation(#20008,#20009) -#20010=* -tokeninfo(#20010,8,#20001,1,"*") -#20011=@"loc,{#10000},1,9,1,9" -locations_default(#20011,#10000,1,9,1,9) -hasLocation(#20010,#20011) -#20012=* -tokeninfo(#20012,6,#20001,2,"f") -#20013=@"loc,{#10000},1,11,1,11" -locations_default(#20013,#10000,1,11,1,11) -hasLocation(#20012,#20013) -#20014=* -tokeninfo(#20014,8,#20001,3,"(") -#20015=@"loc,{#10000},1,12,1,12" -locations_default(#20015,#10000,1,12,1,12) -hasLocation(#20014,#20015) -#20016=* -tokeninfo(#20016,8,#20001,4,")") -#20017=@"loc,{#10000},1,13,1,13" -locations_default(#20017,#10000,1,13,1,13) -hasLocation(#20016,#20017) -#20018=* -tokeninfo(#20018,8,#20001,5,"{") -#20019=@"loc,{#10000},1,15,1,15" -locations_default(#20019,#10000,1,15,1,15) -hasLocation(#20018,#20019) -#20020=* -tokeninfo(#20020,7,#20001,6,"yield") -#20021=@"loc,{#10000},2,3,2,7" -locations_default(#20021,#10000,2,3,2,7) -hasLocation(#20020,#20021) -#20022=* -tokeninfo(#20022,7,#20001,7,"import") -#20023=@"loc,{#10000},2,9,2,14" -locations_default(#20023,#10000,2,9,2,14) -hasLocation(#20022,#20023) -#20024=* -tokeninfo(#20024,8,#20001,8,"(") -#20025=@"loc,{#10000},2,15,2,15" -locations_default(#20025,#10000,2,15,2,15) -hasLocation(#20024,#20025) -#20026=* -tokeninfo(#20026,4,#20001,9,"""foo""") -#20027=@"loc,{#10000},2,16,2,20" -locations_default(#20027,#10000,2,16,2,20) -hasLocation(#20026,#20027) -#20028=* -tokeninfo(#20028,8,#20001,10,")") -#20029=@"loc,{#10000},2,21,2,21" -locations_default(#20029,#10000,2,21,2,21) -hasLocation(#20028,#20029) -#20030=* -tokeninfo(#20030,8,#20001,11,"}") -hasLocation(#20030,#20007) -#20031=* -tokeninfo(#20031,0,#20001,12,"") -#20032=@"loc,{#10000},4,1,4,0" -locations_default(#20032,#10000,4,1,4,0) -hasLocation(#20031,#20032) -toplevels(#20001,0) -#20033=@"loc,{#10000},1,1,4,0" -locations_default(#20033,#10000,1,1,4,0) -hasLocation(#20001,#20033) -#20034=@"var;{f};{#20000}" -variables(#20034,"f",#20000) -#20035=* -stmts(#20035,17,#20001,0,"functio ... foo"")\n}") -#20036=@"loc,{#10000},1,1,3,1" -locations_default(#20036,#10000,1,1,3,1) -hasLocation(#20035,#20036) -stmtContainers(#20035,#20001) -#20037=* -exprs(#20037,78,#20035,-1,"f") -hasLocation(#20037,#20013) -exprContainers(#20037,#20035) -literals("f","f",#20037) -decl(#20037,#20034) -#20038=* -scopes(#20038,1) -scopenodes(#20035,#20038) -scopenesting(#20038,#20000) -#20039=@"var;{arguments};{#20038}" -variables(#20039,"arguments",#20038) -isArgumentsObject(#20039) -isGenerator(#20035) -#20040=* -stmts(#20040,1,#20035,-2,"{\n yie ... foo"")\n}") -#20041=@"loc,{#10000},1,15,3,1" -locations_default(#20041,#10000,1,15,3,1) -hasLocation(#20040,#20041) -stmtContainers(#20040,#20035) -#20042=* -stmts(#20042,2,#20040,0,"yield import(""foo"")") -#20043=@"loc,{#10000},2,3,2,21" -locations_default(#20043,#10000,2,3,2,21) -hasLocation(#20042,#20043) -stmtContainers(#20042,#20035) -#20044=* -exprs(#20044,69,#20042,0,"yield import(""foo"")") -hasLocation(#20044,#20043) -enclosingStmt(#20044,#20042) -exprContainers(#20044,#20035) -#20045=* -exprs(#20045,99,#20044,0,"import(""foo"")") -#20046=@"loc,{#10000},2,9,2,21" -locations_default(#20046,#10000,2,9,2,21) -hasLocation(#20045,#20046) -enclosingStmt(#20045,#20042) -exprContainers(#20045,#20035) -#20047=* -exprs(#20047,4,#20045,0,"""foo""") -hasLocation(#20047,#20027) -enclosingStmt(#20047,#20042) -exprContainers(#20047,#20035) -literals("foo","""foo""",#20047) -#20048=* -entry_cfg_node(#20048,#20001) -#20049=@"loc,{#10000},1,1,1,0" -locations_default(#20049,#10000,1,1,1,0) -hasLocation(#20048,#20049) -#20050=* -exit_cfg_node(#20050,#20001) -hasLocation(#20050,#20032) -successor(#20035,#20050) -#20051=* -entry_cfg_node(#20051,#20035) -hasLocation(#20051,#20049) -#20052=* -exit_cfg_node(#20052,#20035) -#20053=@"loc,{#10000},3,2,3,1" -locations_default(#20053,#10000,3,2,3,1) -hasLocation(#20052,#20053) -successor(#20040,#20042) -successor(#20042,#20047) -successor(#20047,#20045) -successor(#20045,#20044) -successor(#20044,#20052) -successor(#20051,#20040) -successor(#20037,#20035) -successor(#20048,#20037) -numlines(#10000,3,3,0) +#20010=@"loc,{#10000},3,1,3,1" +locations_default(#20010,#10000,3,1,3,1) +hasLocation(#20009,#20010) +numlines(#20001,3,0,0) +numlines(#10000,3,0,0) filetype(#10000,"javascript") diff --git a/javascript/extractor/tests/ts/output/trap/importExport.ts.trap b/javascript/extractor/tests/ts/output/trap/importExport.ts.trap index 4b9267996c07..3f28897f7b9f 100644 --- a/javascript/extractor/tests/ts/output/trap/importExport.ts.trap +++ b/javascript/extractor/tests/ts/output/trap/importExport.ts.trap @@ -122,98 +122,102 @@ isES2015Module(#20001) variables(#20042,"Something",#20041) #20043=@"var;{importExport};{#20041}" variables(#20043,"importExport",#20041) -#20044=@"local_type_name;{importExport};{#20041}" -local_type_names(#20044,"importExport",#20041) -#20045=@"local_namespace_name;{Something};{#20041}" -local_namespace_names(#20045,"Something",#20041) -#20046=@"local_namespace_name;{importExport};{#20041}" -local_namespace_names(#20046,"importExport",#20041) +#20044=@"local_type_name;{Something};{#20041}" +local_type_names(#20044,"Something",#20041) +#20045=@"local_type_name;{importExport};{#20041}" +local_type_names(#20045,"importExport",#20041) +#20046=@"local_namespace_name;{Something};{#20041}" +local_namespace_names(#20046,"Something",#20041) +#20047=@"local_namespace_name;{importExport};{#20041}" +local_namespace_names(#20047,"importExport",#20041) variables(#20042,"Something",#20041) variables(#20043,"importExport",#20041) -local_type_names(#20044,"importExport",#20041) -local_namespace_names(#20045,"Something",#20041) -local_namespace_names(#20046,"importExport",#20041) -#20047=* -stmts(#20047,27,#20001,0,"import ... where';") -hasLocation(#20047,#20003) -stmtContainers(#20047,#20001) +local_type_names(#20044,"Something",#20041) +local_type_names(#20045,"importExport",#20041) +local_namespace_names(#20046,"Something",#20041) +local_namespace_names(#20047,"importExport",#20041) #20048=* -exprs(#20048,4,#20047,-1,"'somewhere'") -hasLocation(#20048,#20019) -enclosingStmt(#20048,#20047) -exprContainers(#20048,#20001) -literals("somewhere","'somewhere'",#20048) +stmts(#20048,27,#20001,0,"import ... where';") +hasLocation(#20048,#20003) +stmtContainers(#20048,#20001) #20049=* -exprs(#20049,85,#20047,0,"* as Something") -#20050=@"loc,{#10000},1,8,1,21" -locations_default(#20050,#10000,1,8,1,21) -hasLocation(#20049,#20050) -enclosingStmt(#20049,#20047) +exprs(#20049,4,#20048,-1,"'somewhere'") +hasLocation(#20049,#20019) +enclosingStmt(#20049,#20048) exprContainers(#20049,#20001) -#20051=* -exprs(#20051,78,#20049,1,"Something") -hasLocation(#20051,#20015) -enclosingStmt(#20051,#20047) -exprContainers(#20051,#20001) -literals("Something","Something",#20051) -decl(#20051,#20042) -namespacedecl(#20051,#20045) +literals("somewhere","'somewhere'",#20049) +#20050=* +exprs(#20050,85,#20048,0,"* as Something") +#20051=@"loc,{#10000},1,8,1,21" +locations_default(#20051,#10000,1,8,1,21) +hasLocation(#20050,#20051) +enclosingStmt(#20050,#20048) +exprContainers(#20050,#20001) #20052=* -stmts(#20052,30,#20001,1,"export ... thingy;") -hasLocation(#20052,#20007) -stmtContainers(#20052,#20001) +exprs(#20052,78,#20050,1,"Something") +hasLocation(#20052,#20015) +enclosingStmt(#20052,#20048) +exprContainers(#20052,#20001) +literals("Something","Something",#20052) +decl(#20052,#20042) +typedecl(#20052,#20044) +namespacedecl(#20052,#20046) #20053=* -stmts(#20053,32,#20052,-1,"import ... thingy;") -#20054=@"loc,{#10000},3,8,3,46" -locations_default(#20054,#10000,3,8,3,46) -hasLocation(#20053,#20054) +stmts(#20053,30,#20001,1,"export ... thingy;") +hasLocation(#20053,#20007) stmtContainers(#20053,#20001) -#20055=* -exprs(#20055,78,#20053,0,"importExport") -hasLocation(#20055,#20027) -enclosingStmt(#20055,#20053) -exprContainers(#20055,#20001) -literals("importExport","importExport",#20055) -decl(#20055,#20043) -typedecl(#20055,#20044) -namespacedecl(#20055,#20046) +#20054=* +stmts(#20054,32,#20053,-1,"import ... thingy;") +#20055=@"loc,{#10000},3,8,3,46" +locations_default(#20055,#10000,3,8,3,46) +hasLocation(#20054,#20055) +stmtContainers(#20054,#20001) #20056=* -exprs(#20056,14,#20053,1,"Something.thingy") -#20057=@"loc,{#10000},3,30,3,45" -locations_default(#20057,#10000,3,30,3,45) -hasLocation(#20056,#20057) -enclosingStmt(#20056,#20053) +exprs(#20056,78,#20054,0,"importExport") +hasLocation(#20056,#20027) +enclosingStmt(#20056,#20054) exprContainers(#20056,#20001) -#20058=* -exprs(#20058,103,#20056,0,"Something") -hasLocation(#20058,#20031) -enclosingStmt(#20058,#20053) -exprContainers(#20058,#20001) -literals("Something","Something",#20058) -namespacebind(#20058,#20045) -bind(#20058,#20042) +literals("importExport","importExport",#20056) +decl(#20056,#20043) +typedecl(#20056,#20045) +namespacedecl(#20056,#20047) +#20057=* +exprs(#20057,14,#20054,1,"Something.thingy") +#20058=@"loc,{#10000},3,30,3,45" +locations_default(#20058,#10000,3,30,3,45) +hasLocation(#20057,#20058) +enclosingStmt(#20057,#20054) +exprContainers(#20057,#20001) #20059=* -exprs(#20059,0,#20056,1,"thingy") -hasLocation(#20059,#20035) -enclosingStmt(#20059,#20053) +exprs(#20059,103,#20057,0,"Something") +hasLocation(#20059,#20031) +enclosingStmt(#20059,#20054) exprContainers(#20059,#20001) -literals("thingy","thingy",#20059) +literals("Something","Something",#20059) +namespacebind(#20059,#20046) +bind(#20059,#20042) #20060=* -entry_cfg_node(#20060,#20001) -#20061=@"loc,{#10000},1,1,1,0" -locations_default(#20061,#10000,1,1,1,0) -hasLocation(#20060,#20061) -#20062=* -exit_cfg_node(#20062,#20001) -hasLocation(#20062,#20039) -successor(#20052,#20055) -successor(#20059,#20056) -successor(#20058,#20059) -successor(#20056,#20053) -successor(#20055,#20058) -successor(#20053,#20062) -successor(#20047,#20052) -successor(#20049,#20047) -successor(#20060,#20049) +exprs(#20060,0,#20057,1,"thingy") +hasLocation(#20060,#20035) +enclosingStmt(#20060,#20054) +exprContainers(#20060,#20001) +literals("thingy","thingy",#20060) +#20061=* +entry_cfg_node(#20061,#20001) +#20062=@"loc,{#10000},1,1,1,0" +locations_default(#20062,#10000,1,1,1,0) +hasLocation(#20061,#20062) +#20063=* +exit_cfg_node(#20063,#20001) +hasLocation(#20063,#20039) +successor(#20053,#20056) +successor(#20060,#20057) +successor(#20059,#20060) +successor(#20057,#20054) +successor(#20056,#20059) +successor(#20054,#20063) +successor(#20048,#20053) +successor(#20050,#20048) +successor(#20061,#20050) numlines(#10000,3,2,0) filetype(#10000,"typescript") From 5768d85c7bb70c89788df8dae9d9839b5a9b6579 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 20 Mar 2019 12:46:52 +0000 Subject: [PATCH 3/4] TS: fix trap test output --- .../esnext/output/trap/yield-import.js.trap | 188 +++++++++++++++--- 1 file changed, 161 insertions(+), 27 deletions(-) diff --git a/javascript/extractor/tests/esnext/output/trap/yield-import.js.trap b/javascript/extractor/tests/esnext/output/trap/yield-import.js.trap index 1dc036e0f15d..54996ba291ed 100644 --- a/javascript/extractor/tests/esnext/output/trap/yield-import.js.trap +++ b/javascript/extractor/tests/esnext/output/trap/yield-import.js.trap @@ -9,35 +9,169 @@ hasLocation(#10000,#10002) #20000=@"global_scope" scopes(#20000,0) #20001=@"script;{#10000},1,1" -toplevels(#20001,0) -#20002=@"loc,{#10000},1,1,1,1" -locations_default(#20002,#10000,1,1,1,1) -hasLocation(#20001,#20002) -#20003=* -jsParseErrors(#20003,#20001,"Error: Unexpected token"," yield import(""foo"") -") -#20004=@"loc,{#10000},2,9,2,9" -locations_default(#20004,#10000,2,9,2,9) -hasLocation(#20003,#20004) -#20005=* -lines(#20005,#20001,"function* f() {"," +#20002=* +lines(#20002,#20001,"function* f() {"," ") -#20006=@"loc,{#10000},1,1,1,15" -locations_default(#20006,#10000,1,1,1,15) -hasLocation(#20005,#20006) -#20007=* -lines(#20007,#20001," yield import(""foo"")"," +#20003=@"loc,{#10000},1,1,1,15" +locations_default(#20003,#10000,1,1,1,15) +hasLocation(#20002,#20003) +#20004=* +lines(#20004,#20001," yield import(""foo"")"," ") -#20008=@"loc,{#10000},2,1,2,21" -locations_default(#20008,#10000,2,1,2,21) -hasLocation(#20007,#20008) +#20005=@"loc,{#10000},2,1,2,21" +locations_default(#20005,#10000,2,1,2,21) +hasLocation(#20004,#20005) indentation(#10000,2," ",2) -#20009=* -lines(#20009,#20001,"}"," +#20006=* +lines(#20006,#20001,"}"," ") -#20010=@"loc,{#10000},3,1,3,1" -locations_default(#20010,#10000,3,1,3,1) -hasLocation(#20009,#20010) -numlines(#20001,3,0,0) -numlines(#10000,3,0,0) +#20007=@"loc,{#10000},3,1,3,1" +locations_default(#20007,#10000,3,1,3,1) +hasLocation(#20006,#20007) +numlines(#20001,3,3,0) +#20008=* +tokeninfo(#20008,7,#20001,0,"function") +#20009=@"loc,{#10000},1,1,1,8" +locations_default(#20009,#10000,1,1,1,8) +hasLocation(#20008,#20009) +#20010=* +tokeninfo(#20010,8,#20001,1,"*") +#20011=@"loc,{#10000},1,9,1,9" +locations_default(#20011,#10000,1,9,1,9) +hasLocation(#20010,#20011) +#20012=* +tokeninfo(#20012,6,#20001,2,"f") +#20013=@"loc,{#10000},1,11,1,11" +locations_default(#20013,#10000,1,11,1,11) +hasLocation(#20012,#20013) +#20014=* +tokeninfo(#20014,8,#20001,3,"(") +#20015=@"loc,{#10000},1,12,1,12" +locations_default(#20015,#10000,1,12,1,12) +hasLocation(#20014,#20015) +#20016=* +tokeninfo(#20016,8,#20001,4,")") +#20017=@"loc,{#10000},1,13,1,13" +locations_default(#20017,#10000,1,13,1,13) +hasLocation(#20016,#20017) +#20018=* +tokeninfo(#20018,8,#20001,5,"{") +#20019=@"loc,{#10000},1,15,1,15" +locations_default(#20019,#10000,1,15,1,15) +hasLocation(#20018,#20019) +#20020=* +tokeninfo(#20020,7,#20001,6,"yield") +#20021=@"loc,{#10000},2,3,2,7" +locations_default(#20021,#10000,2,3,2,7) +hasLocation(#20020,#20021) +#20022=* +tokeninfo(#20022,7,#20001,7,"import") +#20023=@"loc,{#10000},2,9,2,14" +locations_default(#20023,#10000,2,9,2,14) +hasLocation(#20022,#20023) +#20024=* +tokeninfo(#20024,8,#20001,8,"(") +#20025=@"loc,{#10000},2,15,2,15" +locations_default(#20025,#10000,2,15,2,15) +hasLocation(#20024,#20025) +#20026=* +tokeninfo(#20026,4,#20001,9,"""foo""") +#20027=@"loc,{#10000},2,16,2,20" +locations_default(#20027,#10000,2,16,2,20) +hasLocation(#20026,#20027) +#20028=* +tokeninfo(#20028,8,#20001,10,")") +#20029=@"loc,{#10000},2,21,2,21" +locations_default(#20029,#10000,2,21,2,21) +hasLocation(#20028,#20029) +#20030=* +tokeninfo(#20030,8,#20001,11,"}") +hasLocation(#20030,#20007) +#20031=* +tokeninfo(#20031,0,#20001,12,"") +#20032=@"loc,{#10000},4,1,4,0" +locations_default(#20032,#10000,4,1,4,0) +hasLocation(#20031,#20032) +toplevels(#20001,0) +#20033=@"loc,{#10000},1,1,4,0" +locations_default(#20033,#10000,1,1,4,0) +hasLocation(#20001,#20033) +#20034=@"var;{f};{#20000}" +variables(#20034,"f",#20000) +#20035=* +stmts(#20035,17,#20001,0,"functio ... foo"")\n}") +#20036=@"loc,{#10000},1,1,3,1" +locations_default(#20036,#10000,1,1,3,1) +hasLocation(#20035,#20036) +stmtContainers(#20035,#20001) +#20037=* +exprs(#20037,78,#20035,-1,"f") +hasLocation(#20037,#20013) +exprContainers(#20037,#20035) +literals("f","f",#20037) +decl(#20037,#20034) +#20038=* +scopes(#20038,1) +scopenodes(#20035,#20038) +scopenesting(#20038,#20000) +#20039=@"var;{arguments};{#20038}" +variables(#20039,"arguments",#20038) +isArgumentsObject(#20039) +isGenerator(#20035) +#20040=* +stmts(#20040,1,#20035,-2,"{\n yie ... foo"")\n}") +#20041=@"loc,{#10000},1,15,3,1" +locations_default(#20041,#10000,1,15,3,1) +hasLocation(#20040,#20041) +stmtContainers(#20040,#20035) +#20042=* +stmts(#20042,2,#20040,0,"yield import(""foo"")") +#20043=@"loc,{#10000},2,3,2,21" +locations_default(#20043,#10000,2,3,2,21) +hasLocation(#20042,#20043) +stmtContainers(#20042,#20035) +#20044=* +exprs(#20044,69,#20042,0,"yield import(""foo"")") +hasLocation(#20044,#20043) +enclosingStmt(#20044,#20042) +exprContainers(#20044,#20035) +#20045=* +exprs(#20045,99,#20044,0,"import(""foo"")") +#20046=@"loc,{#10000},2,9,2,21" +locations_default(#20046,#10000,2,9,2,21) +hasLocation(#20045,#20046) +enclosingStmt(#20045,#20042) +exprContainers(#20045,#20035) +#20047=* +exprs(#20047,4,#20045,0,"""foo""") +hasLocation(#20047,#20027) +enclosingStmt(#20047,#20042) +exprContainers(#20047,#20035) +literals("foo","""foo""",#20047) +#20048=* +entry_cfg_node(#20048,#20001) +#20049=@"loc,{#10000},1,1,1,0" +locations_default(#20049,#10000,1,1,1,0) +hasLocation(#20048,#20049) +#20050=* +exit_cfg_node(#20050,#20001) +hasLocation(#20050,#20032) +successor(#20035,#20050) +#20051=* +entry_cfg_node(#20051,#20035) +hasLocation(#20051,#20049) +#20052=* +exit_cfg_node(#20052,#20035) +#20053=@"loc,{#10000},3,2,3,1" +locations_default(#20053,#10000,3,2,3,1) +hasLocation(#20052,#20053) +successor(#20040,#20042) +successor(#20042,#20047) +successor(#20047,#20045) +successor(#20045,#20044) +successor(#20044,#20052) +successor(#20051,#20040) +successor(#20037,#20035) +successor(#20048,#20037) +numlines(#10000,3,3,0) filetype(#10000,"javascript") From 1a6c95c908b3c2b9f18670be9362972323f2ff3a Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 21 Mar 2019 11:06:04 +0000 Subject: [PATCH 4/4] TS: update test expectation --- .../TypeScript/LocalTypeResolution/ResolveTypeNames.expected | 1 + 1 file changed, 1 insertion(+) diff --git a/javascript/ql/test/library-tests/TypeScript/LocalTypeResolution/ResolveTypeNames.expected b/javascript/ql/test/library-tests/TypeScript/LocalTypeResolution/ResolveTypeNames.expected index d97404e26ac7..43ba306f202c 100644 --- a/javascript/ql/test/library-tests/TypeScript/LocalTypeResolution/ResolveTypeNames.expected +++ b/javascript/ql/test/library-tests/TypeScript/LocalTypeResolution/ResolveTypeNames.expected @@ -4,6 +4,7 @@ | exports.ts:16:5:16:8 | Enum | exports.ts:7:6:7:9 | Enum | | namespaceDecls.ts:38:8:38:8 | A | namespaceDecls.ts:1:8:1:8 | A | | namespaceDecls.ts:38:8:38:8 | A | namespaceDecls.ts:6:11:6:11 | A | +| namespaceDecls.ts:39:8:39:8 | E | namespaceDecls.ts:4:13:4:13 | E | | namespaceDecls.ts:39:8:39:8 | E | namespaceDecls.ts:7:11:7:11 | E | | tst.ts:6:9:6:9 | I | tst.ts:4:11:4:11 | I | | tst.ts:8:11:8:11 | I | tst.ts:4:11:4:11 | I |