mirror of
https://github.com/github/codeql.git
synced 2026-04-30 19:26:02 +02:00
Merge remote-tracking branch 'upstream/main' into incomplete-hostname
This commit is contained in:
@@ -1,3 +0,0 @@
|
||||
import javascript
|
||||
|
||||
query predicate test_AccessorMethods(AccessorMethodDefinition amd) { any() }
|
||||
@@ -1,3 +0,0 @@
|
||||
import javascript
|
||||
|
||||
query predicate test_ClassDefinition_getName(ClassDefinition cd, string res) { res = cd.getName() }
|
||||
@@ -1,5 +0,0 @@
|
||||
import javascript
|
||||
|
||||
query predicate test_ClassDefinition_getSuperClass(ClassDefinition cd, Expr res) {
|
||||
res = cd.getSuperClass()
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
import javascript
|
||||
|
||||
query predicate test_ClassDefinitions(ClassDefinition cd) { any() }
|
||||
@@ -1,17 +0,0 @@
|
||||
import javascript
|
||||
|
||||
class Configuration extends DataFlow::Configuration {
|
||||
Configuration() { this = "ClassDataFlowTestingConfig" }
|
||||
|
||||
override predicate isSource(DataFlow::Node source) {
|
||||
source.getEnclosingExpr().(StringLiteral).getValue().toLowerCase() = "source"
|
||||
}
|
||||
|
||||
override predicate isSink(DataFlow::Node sink) {
|
||||
any(DataFlow::CallNode call | call.getCalleeName() = "sink").getAnArgument() = sink
|
||||
}
|
||||
}
|
||||
|
||||
query predicate dataflow(DataFlow::Node pred, DataFlow::Node succ) {
|
||||
any(Configuration c).hasFlow(pred, succ)
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
import javascript
|
||||
|
||||
query predicate test_ClassNodeConstructor(DataFlow::ClassNode class_, DataFlow::FunctionNode res) {
|
||||
res = class_.getConstructor()
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
import javascript
|
||||
|
||||
query predicate test_ClassNodeInstanceMethod(
|
||||
DataFlow::ClassNode class_, string name, DataFlow::FunctionNode res
|
||||
) {
|
||||
res = class_.getInstanceMethod(name)
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
import javascript
|
||||
|
||||
query predicate test_ClassNodeStaticMethod(
|
||||
DataFlow::ClassNode class_, string name, DataFlow::FunctionNode res
|
||||
) {
|
||||
res = class_.getStaticMethod(name)
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
import javascript
|
||||
|
||||
query predicate test_ComputedMethods(MethodDefinition md) { md.isComputed() }
|
||||
@@ -1,3 +0,0 @@
|
||||
import javascript
|
||||
|
||||
query predicate test_ConstructorDefinitions(ConstructorDefinition cd) { any() }
|
||||
@@ -1,3 +0,0 @@
|
||||
import javascript
|
||||
|
||||
query predicate test_FieldInits(FieldDefinition field, Expr res) { res = field.getInit() }
|
||||
@@ -1,3 +0,0 @@
|
||||
import javascript
|
||||
|
||||
query predicate test_Fields(FieldDefinition field, Expr res) { res = field.getNameExpr() }
|
||||
@@ -1,7 +0,0 @@
|
||||
import javascript
|
||||
|
||||
query predicate test_MethodDefinitions(
|
||||
MethodDefinition md, Expr res0, FunctionExpr res1, ClassDefinition res2
|
||||
) {
|
||||
res0 = md.getNameExpr() and res1 = md.getBody() and res2 = md.getDeclaringClass()
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
import javascript
|
||||
|
||||
query predicate test_MethodNames(MethodDefinition md, string res) { res = md.getName() }
|
||||
@@ -1,3 +0,0 @@
|
||||
import javascript
|
||||
|
||||
query predicate test_NewTargetExpr(NewTargetExpr e) { any() }
|
||||
@@ -1,6 +0,0 @@
|
||||
import javascript
|
||||
|
||||
query string getAccessModifier(DataFlow::PropRef ref, Expr prop) {
|
||||
prop = ref.getPropertyNameExpr() and
|
||||
if ref.isPrivateField() then result = "Private" else result = "Public"
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
import javascript
|
||||
|
||||
query predicate test_StaticMethods(MethodDefinition md) { md.isStatic() }
|
||||
@@ -1,3 +0,0 @@
|
||||
import javascript
|
||||
|
||||
query predicate test_SuperExpr(SuperExpr s) { any() }
|
||||
@@ -1,3 +0,0 @@
|
||||
import javascript
|
||||
|
||||
query predicate test_SyntheticConstructors(ConstructorDefinition cd) { cd.isSynthetic() }
|
||||
@@ -1,3 +0,0 @@
|
||||
import javascript
|
||||
|
||||
query predicate test_getAMember(ClassDefinition c, MemberDeclaration res) { res = c.getAMember() }
|
||||
@@ -2,14 +2,11 @@ import javascript
|
||||
import semmle.javascript.dataflow.InferredTypes
|
||||
import semmle.javascript.dataflow.CustomAbstractValueDefinitions
|
||||
|
||||
class MyCustomAbstractValueDefinition extends CustomAbstractValueDefinition {
|
||||
DataFlow::ValueNode node;
|
||||
|
||||
class MyCustomAbstractValueDefinition extends CustomAbstractValueDefinition, AST::ValueNode {
|
||||
MyCustomAbstractValueDefinition() {
|
||||
DataFlow::valueNode(this) = node and
|
||||
node instanceof DataFlow::ObjectLiteralNode and
|
||||
this.flow() instanceof DataFlow::ObjectLiteralNode and
|
||||
exists(DataFlow::PropWrite pwn |
|
||||
pwn.writes(node, "custom", any(BooleanLiteral l | l.getValue() = "true").flow())
|
||||
pwn.writes(this.flow(), "custom", any(BooleanLiteral l | l.getValue() = "true").flow())
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,35 +1,30 @@
|
||||
| classes.js:1:1:2:1 | class Foo {\\n} | classes.js:4:1:4:3 | Foo |
|
||||
| classes.js:7:5:8:5 | class L ... {\\n } | classes.js:10:5:10:12 | LocalFoo |
|
||||
| es2015.js:1:10:1:11 | fn | es2015.js:2:3:2:4 | fn |
|
||||
| es2015.js:5:16:5:16 | i | es2015.js:5:32:5:32 | i |
|
||||
| es2015.js:5:16:5:16 | i | es2015.js:5:34:5:34 | i |
|
||||
| es2015modules.js:1:10:1:12 | foo | es2015modules.js:4:3:4:5 | foo |
|
||||
| es2015modules.js:1:15:1:24 | bar as baz | es2015modules.js:6:3:6:5 | baz |
|
||||
| es2015modules.js:10:10:10:13 | quux | es2015modules.js:7:3:7:6 | quux |
|
||||
| es2015modules.js:15:17:15:17 | f | es2015modules.js:12:1:12:1 | f |
|
||||
| es2015modules.js:16:25:16:25 | g | es2015modules.js:13:1:13:1 | g |
|
||||
| fundecls.js:3:12:3:12 | f | fundecls.js:4:3:4:3 | f |
|
||||
| fundecls.js:9:10:9:10 | s | fundecls.js:7:1:7:1 | s |
|
||||
| fundecls.js:12:12:12:12 | f | fundecls.js:10:3:10:3 | f |
|
||||
| fundecls.js:18:12:18:12 | f | fundecls.js:17:3:17:3 | f |
|
||||
| fundecls.js:23:12:23:12 | f | fundecls.js:24:3:24:3 | f |
|
||||
| fundecls.js:34:12:34:12 | f | fundecls.js:35:3:35:3 | f |
|
||||
| fundecls.js:39:11:39:11 | x | fundecls.js:40:7:40:7 | x |
|
||||
| fundecls.js:41:14:41:14 | f | fundecls.js:45:3:45:3 | f |
|
||||
| fundecls.js:43:14:43:14 | f | fundecls.js:45:3:45:3 | f |
|
||||
| fundecls.js:48:11:48:11 | x | fundecls.js:50:7:50:7 | x |
|
||||
| tst.js:1:12:1:12 | o | tst.js:3:12:3:12 | o |
|
||||
| tst.js:1:12:1:12 | o | tst.js:5:16:5:16 | o |
|
||||
| tst.js:2:9:2:14 | y = 23 | tst.js:8:17:8:17 | y |
|
||||
| tst.js:2:17:2:21 | i = 0 | tst.js:4:5:4:5 | i |
|
||||
| tst.js:2:17:2:21 | i = 0 | tst.js:7:6:7:6 | i |
|
||||
| tst.js:4:3:4:5 | ++i | tst.js:4:5:4:5 | i |
|
||||
| tst.js:4:3:4:5 | ++i | tst.js:7:6:7:6 | i |
|
||||
| tst.js:5:11:5:11 | z | tst.js:6:7:6:7 | z |
|
||||
| tst.js:5:11:5:11 | z | tst.js:8:14:8:14 | z |
|
||||
| tst.js:7:4:7:6 | --i | tst.js:7:6:7:6 | i |
|
||||
| tst.js:12:2:12:7 | x = 42 | tst.js:14:9:14:9 | x |
|
||||
| tst.js:19:11:19:11 | x | tst.js:18:9:18:9 | x |
|
||||
| tst.js:23:6:23:23 | {a = b, c = d} = e | tst.js:24:2:24:2 | a |
|
||||
| tst.js:23:6:23:23 | {a = b, c = d} = e | tst.js:24:6:24:6 | c |
|
||||
| tst.js:26:11:26:11 | a | tst.js:27:2:27:2 | a |
|
||||
| classes.js:7:5:8:5 | def@7:5 | classes.js:10:5:10:12 | LocalFoo |
|
||||
| es2015.js:1:10:1:11 | def@1:10 | es2015.js:2:3:2:4 | fn |
|
||||
| es2015.js:5:16:5:16 | def@5:16 | es2015.js:5:32:5:32 | i |
|
||||
| es2015.js:5:16:5:16 | def@5:16 | es2015.js:5:34:5:34 | i |
|
||||
| es2015modules.js:1:10:1:12 | def@1:10 | es2015modules.js:4:3:4:5 | foo |
|
||||
| es2015modules.js:1:15:1:24 | def@1:15 | es2015modules.js:6:3:6:5 | baz |
|
||||
| es2015modules.js:10:10:10:13 | def@10:10 | es2015modules.js:7:3:7:6 | quux |
|
||||
| es2015modules.js:15:17:15:17 | def@15:17 | es2015modules.js:12:1:12:1 | f |
|
||||
| es2015modules.js:16:25:16:25 | def@16:25 | es2015modules.js:13:1:13:1 | g |
|
||||
| fundecls.js:3:12:3:12 | def@3:12 | fundecls.js:4:3:4:3 | f |
|
||||
| fundecls.js:12:12:12:12 | def@12:12 | fundecls.js:10:3:10:3 | f |
|
||||
| fundecls.js:18:12:18:12 | def@18:12 | fundecls.js:17:3:17:3 | f |
|
||||
| fundecls.js:23:12:23:12 | def@23:12 | fundecls.js:24:3:24:3 | f |
|
||||
| fundecls.js:27:2:27:2 | implicitInit@27:2 | fundecls.js:28:3:28:3 | f |
|
||||
| fundecls.js:34:12:34:12 | def@34:12 | fundecls.js:35:3:35:3 | f |
|
||||
| fundecls.js:39:11:39:11 | def@39:11 | fundecls.js:40:7:40:7 | x |
|
||||
| fundecls.js:45:3:45:3 | phi@45:3 | fundecls.js:45:3:45:3 | f |
|
||||
| fundecls.js:48:11:48:11 | def@48:11 | fundecls.js:50:7:50:7 | x |
|
||||
| tst.js:1:12:1:12 | def@1:12 | tst.js:3:12:3:12 | o |
|
||||
| tst.js:1:12:1:12 | def@1:12 | tst.js:5:16:5:16 | o |
|
||||
| tst.js:2:9:2:14 | def@2:9 | tst.js:8:17:8:17 | y |
|
||||
| tst.js:3:2:3:2 | phi@3:2 | tst.js:4:5:4:5 | i |
|
||||
| tst.js:5:2:5:2 | phi@5:2 | tst.js:7:6:7:6 | i |
|
||||
| tst.js:5:2:5:2 | phi@5:2 | tst.js:8:14:8:14 | z |
|
||||
| tst.js:5:11:5:11 | def@5:11 | tst.js:6:7:6:7 | z |
|
||||
| tst.js:12:2:12:7 | def@12:2 | tst.js:14:9:14:9 | x |
|
||||
| tst.js:19:11:19:11 | def@19:11 | tst.js:18:9:18:9 | x |
|
||||
| tst.js:23:6:23:23 | def@23:6 | tst.js:24:2:24:2 | a |
|
||||
| tst.js:23:6:23:23 | def@23:6 | tst.js:24:6:24:6 | c |
|
||||
| tst.js:26:11:26:11 | def@26:11 | tst.js:27:2:27:2 | a |
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import javascript
|
||||
|
||||
from VarDef def, VarUse use
|
||||
where definitionReaches(_, def, use)
|
||||
from SsaVariable def, VarUse use
|
||||
where def.getAUse() = use
|
||||
select def, use
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import Metrics.ES20xxFeatures
|
||||
|
||||
from ASTNode nd, int version, string category
|
||||
from AstNode nd, int version, string category
|
||||
where isES20xxFeature(nd, version, category)
|
||||
select nd, version, category
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
import javascript
|
||||
|
||||
query predicate test_getParent(Expr e, ASTNode res) { res = e.getParent() }
|
||||
query predicate test_getParent(Expr e, AstNode res) { res = e.getParent() }
|
||||
|
||||
@@ -10,7 +10,7 @@ query predicate externalDecl(ExternalDecl decl) { any() }
|
||||
|
||||
query predicate externalTypedef(ExternalTypedef typ) { any() }
|
||||
|
||||
query predicate externalVarDecl_getInit(ExternalVarDecl decl, ASTNode init) {
|
||||
query predicate externalVarDecl_getInit(ExternalVarDecl decl, AstNode init) {
|
||||
decl.getInit() = init
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import semmle.javascript.JSON
|
||||
|
||||
from JSONParseError jpe
|
||||
from JsonParseError jpe
|
||||
select jpe
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import semmle.javascript.JSON
|
||||
|
||||
from JSONObject obj, string prop, JSONValue val, string strval
|
||||
from JsonObject obj, string prop, JsonValue val, string strval
|
||||
where
|
||||
val = obj.getPropValue(prop) and
|
||||
(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import semmle.javascript.JSON
|
||||
|
||||
from JSONValue v
|
||||
from JsonValue v
|
||||
select v
|
||||
|
||||
@@ -1,44 +1,44 @@
|
||||
nodes
|
||||
| invalid.json:1:1:1:4 | [JSONString] "hi" | semmle.label | [JSONString] "hi" |
|
||||
| invalid.json:1:1:1:4 | [JSONString] "hi" | semmle.order | 1 |
|
||||
| tst.json:1:1:15:2 | [JSONArray] [{name: ...}, ...] | semmle.label | [JSONArray] [{name: ...}, ...] |
|
||||
| tst.json:1:1:15:2 | [JSONArray] [{name: ...}, ...] | semmle.order | 2 |
|
||||
| tst.json:1:2:8:1 | [JSONObject] {name: ...} | semmle.label | [JSONObject] {name: ...} |
|
||||
| tst.json:2:11:2:21 | [JSONString] "Jim Knopf" | semmle.label | [JSONString] "Jim Knopf" |
|
||||
| tst.json:3:14:7:3 | [JSONObject] {street: ...} | semmle.label | [JSONObject] {street: ...} |
|
||||
| tst.json:4:15:4:18 | [JSONNull] null | semmle.label | [JSONNull] null |
|
||||
| tst.json:5:15:5:16 | [JSONNumber] -1 | semmle.label | [JSONNumber] -1 |
|
||||
| tst.json:6:16:6:27 | [JSONString] "Lummerland" | semmle.label | [JSONString] "Lummerland" |
|
||||
| tst.json:8:4:15:1 | [JSONObject] {name: ...} | semmle.label | [JSONObject] {name: ...} |
|
||||
| tst.json:9:11:9:25 | [JSONString] "Frau Mahlzahn" | semmle.label | [JSONString] "Frau Mahlzahn" |
|
||||
| tst.json:10:14:14:3 | [JSONObject] {street: ...} | semmle.label | [JSONObject] {street: ...} |
|
||||
| tst.json:11:15:11:28 | [JSONString] "Alte Strasse" | semmle.label | [JSONString] "Alte Strasse" |
|
||||
| tst.json:12:15:12:17 | [JSONNumber] 133 | semmle.label | [JSONNumber] 133 |
|
||||
| tst.json:13:16:13:27 | [JSONString] "Kummerland" | semmle.label | [JSONString] "Kummerland" |
|
||||
| invalid.json:1:1:1:4 | [JsonString] "hi" | semmle.label | [JsonString] "hi" |
|
||||
| invalid.json:1:1:1:4 | [JsonString] "hi" | semmle.order | 1 |
|
||||
| tst.json:1:1:15:2 | [JsonArray] [{name: ...}, ...] | semmle.label | [JsonArray] [{name: ...}, ...] |
|
||||
| tst.json:1:1:15:2 | [JsonArray] [{name: ...}, ...] | semmle.order | 2 |
|
||||
| tst.json:1:2:8:1 | [JsonObject] {name: ...} | semmle.label | [JsonObject] {name: ...} |
|
||||
| tst.json:2:11:2:21 | [JsonString] "Jim Knopf" | semmle.label | [JsonString] "Jim Knopf" |
|
||||
| tst.json:3:14:7:3 | [JsonObject] {street: ...} | semmle.label | [JsonObject] {street: ...} |
|
||||
| tst.json:4:15:4:18 | [JsonNull] null | semmle.label | [JsonNull] null |
|
||||
| tst.json:5:15:5:16 | [JsonNumber] -1 | semmle.label | [JsonNumber] -1 |
|
||||
| tst.json:6:16:6:27 | [JsonString] "Lummerland" | semmle.label | [JsonString] "Lummerland" |
|
||||
| tst.json:8:4:15:1 | [JsonObject] {name: ...} | semmle.label | [JsonObject] {name: ...} |
|
||||
| tst.json:9:11:9:25 | [JsonString] "Frau Mahlzahn" | semmle.label | [JsonString] "Frau Mahlzahn" |
|
||||
| tst.json:10:14:14:3 | [JsonObject] {street: ...} | semmle.label | [JsonObject] {street: ...} |
|
||||
| tst.json:11:15:11:28 | [JsonString] "Alte Strasse" | semmle.label | [JsonString] "Alte Strasse" |
|
||||
| tst.json:12:15:12:17 | [JsonNumber] 133 | semmle.label | [JsonNumber] 133 |
|
||||
| tst.json:13:16:13:27 | [JsonString] "Kummerland" | semmle.label | [JsonString] "Kummerland" |
|
||||
edges
|
||||
| tst.json:1:1:15:2 | [JSONArray] [{name: ...}, ...] | tst.json:1:2:8:1 | [JSONObject] {name: ...} | semmle.label | 0 |
|
||||
| tst.json:1:1:15:2 | [JSONArray] [{name: ...}, ...] | tst.json:1:2:8:1 | [JSONObject] {name: ...} | semmle.order | 0 |
|
||||
| tst.json:1:1:15:2 | [JSONArray] [{name: ...}, ...] | tst.json:8:4:15:1 | [JSONObject] {name: ...} | semmle.label | 1 |
|
||||
| tst.json:1:1:15:2 | [JSONArray] [{name: ...}, ...] | tst.json:8:4:15:1 | [JSONObject] {name: ...} | semmle.order | 1 |
|
||||
| tst.json:1:2:8:1 | [JSONObject] {name: ...} | tst.json:2:11:2:21 | [JSONString] "Jim Knopf" | semmle.label | 0 |
|
||||
| tst.json:1:2:8:1 | [JSONObject] {name: ...} | tst.json:2:11:2:21 | [JSONString] "Jim Knopf" | semmle.order | 0 |
|
||||
| tst.json:1:2:8:1 | [JSONObject] {name: ...} | tst.json:3:14:7:3 | [JSONObject] {street: ...} | semmle.label | 1 |
|
||||
| tst.json:1:2:8:1 | [JSONObject] {name: ...} | tst.json:3:14:7:3 | [JSONObject] {street: ...} | semmle.order | 1 |
|
||||
| tst.json:3:14:7:3 | [JSONObject] {street: ...} | tst.json:4:15:4:18 | [JSONNull] null | semmle.label | 0 |
|
||||
| tst.json:3:14:7:3 | [JSONObject] {street: ...} | tst.json:4:15:4:18 | [JSONNull] null | semmle.order | 0 |
|
||||
| tst.json:3:14:7:3 | [JSONObject] {street: ...} | tst.json:5:15:5:16 | [JSONNumber] -1 | semmle.label | 1 |
|
||||
| tst.json:3:14:7:3 | [JSONObject] {street: ...} | tst.json:5:15:5:16 | [JSONNumber] -1 | semmle.order | 1 |
|
||||
| tst.json:3:14:7:3 | [JSONObject] {street: ...} | tst.json:6:16:6:27 | [JSONString] "Lummerland" | semmle.label | 2 |
|
||||
| tst.json:3:14:7:3 | [JSONObject] {street: ...} | tst.json:6:16:6:27 | [JSONString] "Lummerland" | semmle.order | 2 |
|
||||
| tst.json:8:4:15:1 | [JSONObject] {name: ...} | tst.json:9:11:9:25 | [JSONString] "Frau Mahlzahn" | semmle.label | 0 |
|
||||
| tst.json:8:4:15:1 | [JSONObject] {name: ...} | tst.json:9:11:9:25 | [JSONString] "Frau Mahlzahn" | semmle.order | 0 |
|
||||
| tst.json:8:4:15:1 | [JSONObject] {name: ...} | tst.json:10:14:14:3 | [JSONObject] {street: ...} | semmle.label | 1 |
|
||||
| tst.json:8:4:15:1 | [JSONObject] {name: ...} | tst.json:10:14:14:3 | [JSONObject] {street: ...} | semmle.order | 1 |
|
||||
| tst.json:10:14:14:3 | [JSONObject] {street: ...} | tst.json:11:15:11:28 | [JSONString] "Alte Strasse" | semmle.label | 0 |
|
||||
| tst.json:10:14:14:3 | [JSONObject] {street: ...} | tst.json:11:15:11:28 | [JSONString] "Alte Strasse" | semmle.order | 0 |
|
||||
| tst.json:10:14:14:3 | [JSONObject] {street: ...} | tst.json:12:15:12:17 | [JSONNumber] 133 | semmle.label | 1 |
|
||||
| tst.json:10:14:14:3 | [JSONObject] {street: ...} | tst.json:12:15:12:17 | [JSONNumber] 133 | semmle.order | 1 |
|
||||
| tst.json:10:14:14:3 | [JSONObject] {street: ...} | tst.json:13:16:13:27 | [JSONString] "Kummerland" | semmle.label | 2 |
|
||||
| tst.json:10:14:14:3 | [JSONObject] {street: ...} | tst.json:13:16:13:27 | [JSONString] "Kummerland" | semmle.order | 2 |
|
||||
| tst.json:1:1:15:2 | [JsonArray] [{name: ...}, ...] | tst.json:1:2:8:1 | [JsonObject] {name: ...} | semmle.label | 0 |
|
||||
| tst.json:1:1:15:2 | [JsonArray] [{name: ...}, ...] | tst.json:1:2:8:1 | [JsonObject] {name: ...} | semmle.order | 0 |
|
||||
| tst.json:1:1:15:2 | [JsonArray] [{name: ...}, ...] | tst.json:8:4:15:1 | [JsonObject] {name: ...} | semmle.label | 1 |
|
||||
| tst.json:1:1:15:2 | [JsonArray] [{name: ...}, ...] | tst.json:8:4:15:1 | [JsonObject] {name: ...} | semmle.order | 1 |
|
||||
| tst.json:1:2:8:1 | [JsonObject] {name: ...} | tst.json:2:11:2:21 | [JsonString] "Jim Knopf" | semmle.label | 0 |
|
||||
| tst.json:1:2:8:1 | [JsonObject] {name: ...} | tst.json:2:11:2:21 | [JsonString] "Jim Knopf" | semmle.order | 0 |
|
||||
| tst.json:1:2:8:1 | [JsonObject] {name: ...} | tst.json:3:14:7:3 | [JsonObject] {street: ...} | semmle.label | 1 |
|
||||
| tst.json:1:2:8:1 | [JsonObject] {name: ...} | tst.json:3:14:7:3 | [JsonObject] {street: ...} | semmle.order | 1 |
|
||||
| tst.json:3:14:7:3 | [JsonObject] {street: ...} | tst.json:4:15:4:18 | [JsonNull] null | semmle.label | 0 |
|
||||
| tst.json:3:14:7:3 | [JsonObject] {street: ...} | tst.json:4:15:4:18 | [JsonNull] null | semmle.order | 0 |
|
||||
| tst.json:3:14:7:3 | [JsonObject] {street: ...} | tst.json:5:15:5:16 | [JsonNumber] -1 | semmle.label | 1 |
|
||||
| tst.json:3:14:7:3 | [JsonObject] {street: ...} | tst.json:5:15:5:16 | [JsonNumber] -1 | semmle.order | 1 |
|
||||
| tst.json:3:14:7:3 | [JsonObject] {street: ...} | tst.json:6:16:6:27 | [JsonString] "Lummerland" | semmle.label | 2 |
|
||||
| tst.json:3:14:7:3 | [JsonObject] {street: ...} | tst.json:6:16:6:27 | [JsonString] "Lummerland" | semmle.order | 2 |
|
||||
| tst.json:8:4:15:1 | [JsonObject] {name: ...} | tst.json:9:11:9:25 | [JsonString] "Frau Mahlzahn" | semmle.label | 0 |
|
||||
| tst.json:8:4:15:1 | [JsonObject] {name: ...} | tst.json:9:11:9:25 | [JsonString] "Frau Mahlzahn" | semmle.order | 0 |
|
||||
| tst.json:8:4:15:1 | [JsonObject] {name: ...} | tst.json:10:14:14:3 | [JsonObject] {street: ...} | semmle.label | 1 |
|
||||
| tst.json:8:4:15:1 | [JsonObject] {name: ...} | tst.json:10:14:14:3 | [JsonObject] {street: ...} | semmle.order | 1 |
|
||||
| tst.json:10:14:14:3 | [JsonObject] {street: ...} | tst.json:11:15:11:28 | [JsonString] "Alte Strasse" | semmle.label | 0 |
|
||||
| tst.json:10:14:14:3 | [JsonObject] {street: ...} | tst.json:11:15:11:28 | [JsonString] "Alte Strasse" | semmle.order | 0 |
|
||||
| tst.json:10:14:14:3 | [JsonObject] {street: ...} | tst.json:12:15:12:17 | [JsonNumber] 133 | semmle.label | 1 |
|
||||
| tst.json:10:14:14:3 | [JsonObject] {street: ...} | tst.json:12:15:12:17 | [JsonNumber] 133 | semmle.order | 1 |
|
||||
| tst.json:10:14:14:3 | [JsonObject] {street: ...} | tst.json:13:16:13:27 | [JsonString] "Kummerland" | semmle.label | 2 |
|
||||
| tst.json:10:14:14:3 | [JsonObject] {street: ...} | tst.json:13:16:13:27 | [JsonString] "Kummerland" | semmle.order | 2 |
|
||||
graphProperties
|
||||
| semmle.graphKind | tree |
|
||||
|
||||
@@ -20,37 +20,37 @@ nodes
|
||||
| tst.js:2:19:2:21 | [Label] rel | semmle.label | [Label] rel |
|
||||
| tst.js:2:19:2:44 | [Property] rel: "noopener noreferrer" | semmle.label | [Property] rel: "noopener noreferrer" |
|
||||
| tst.js:2:24:2:44 | [Literal] "noopener noreferrer" | semmle.label | [Literal] "noopener noreferrer" |
|
||||
| tst.js:3:1:3:106 | [JSXElement] <a href ... */}</a> | semmle.label | [JSXElement] <a href ... */}</a> |
|
||||
| tst.js:3:1:3:106 | [JsxElement] <a href ... */}</a> | semmle.label | [JsxElement] <a href ... */}</a> |
|
||||
| tst.js:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | semmle.label | [ExprStmt] <a href ... /}</a>; |
|
||||
| tst.js:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | semmle.order | 3 |
|
||||
| tst.js:3:2:3:2 | [Label] a | semmle.label | [Label] a |
|
||||
| tst.js:3:4:3:7 | [Label] href | semmle.label | [Label] href |
|
||||
| tst.js:3:4:3:14 | [JSXAttribute] href={href} | semmle.label | [JSXAttribute] href={href} |
|
||||
| tst.js:3:4:3:14 | [JsxAttribute] href={href} | semmle.label | [JsxAttribute] href={href} |
|
||||
| tst.js:3:10:3:13 | [VarRef] href | semmle.label | [VarRef] href |
|
||||
| tst.js:3:16:3:21 | [Label] target | semmle.label | [Label] target |
|
||||
| tst.js:3:16:3:30 | [JSXAttribute] target="_blank" | semmle.label | [JSXAttribute] target="_blank" |
|
||||
| tst.js:3:16:3:30 | [JsxAttribute] target="_blank" | semmle.label | [JsxAttribute] target="_blank" |
|
||||
| tst.js:3:23:3:30 | [Literal] "_blank" | semmle.label | [Literal] "_blank" |
|
||||
| tst.js:3:32:3:45 | [JSXAttribute] {...linkTypes} | semmle.label | [JSXAttribute] {...linkTypes} |
|
||||
| tst.js:3:32:3:45 | [JsxAttribute] {...linkTypes} | semmle.label | [JsxAttribute] {...linkTypes} |
|
||||
| tst.js:3:32:3:45 | [SpreadElement] ...linkTypes | semmle.label | [SpreadElement] ...linkTypes |
|
||||
| tst.js:3:36:3:44 | [VarRef] linkTypes | semmle.label | [VarRef] linkTypes |
|
||||
| tst.js:3:47:3:54 | [Literal] Link to | semmle.label | [Literal] Link to |
|
||||
| tst.js:3:56:3:59 | [VarRef] href | semmle.label | [VarRef] href |
|
||||
| tst.js:3:61:3:62 | [Literal] . | semmle.label | [Literal] . |
|
||||
| tst.js:3:64:3:101 | [JSXEmptyExpr] | semmle.label | [JSXEmptyExpr] |
|
||||
| tst.js:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | semmle.label | [JSXElement] <MyComp ... "bar"/> |
|
||||
| tst.js:3:64:3:101 | [JsxEmptyExpr] | semmle.label | [JsxEmptyExpr] |
|
||||
| tst.js:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | semmle.label | [JsxElement] <MyComp ... "bar"/> |
|
||||
| tst.js:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | semmle.label | [ExprStmt] <MyComp ... bar"/>; |
|
||||
| tst.js:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | semmle.order | 4 |
|
||||
| tst.js:4:2:4:13 | [VarRef] MyComponents | semmle.label | [VarRef] MyComponents |
|
||||
| tst.js:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | semmle.label | [DotExpr] MyCompo ... ncyLink |
|
||||
| tst.js:4:15:4:23 | [Label] FancyLink | semmle.label | [Label] FancyLink |
|
||||
| tst.js:4:25:4:27 | [Label] foo | semmle.label | [Label] foo |
|
||||
| tst.js:4:25:4:33 | [JSXAttribute] foo="bar" | semmle.label | [JSXAttribute] foo="bar" |
|
||||
| tst.js:4:25:4:33 | [JsxAttribute] foo="bar" | semmle.label | [JsxAttribute] foo="bar" |
|
||||
| tst.js:4:29:4:33 | [Literal] "bar" | semmle.label | [Literal] "bar" |
|
||||
| tst.js:5:1:5:6 | [JSXElement] <Foo/> | semmle.label | [JSXElement] <Foo/> |
|
||||
| tst.js:5:1:5:6 | [JsxElement] <Foo/> | semmle.label | [JsxElement] <Foo/> |
|
||||
| tst.js:5:1:5:7 | [ExprStmt] <Foo/>; | semmle.label | [ExprStmt] <Foo/>; |
|
||||
| tst.js:5:1:5:7 | [ExprStmt] <Foo/>; | semmle.order | 5 |
|
||||
| tst.js:5:2:5:4 | [VarRef] Foo | semmle.label | [VarRef] Foo |
|
||||
| tst.js:6:1:6:10 | [JSXElement] <Foo-Bar/> | semmle.label | [JSXElement] <Foo-Bar/> |
|
||||
| tst.js:6:1:6:10 | [JsxElement] <Foo-Bar/> | semmle.label | [JsxElement] <Foo-Bar/> |
|
||||
| tst.js:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | semmle.label | [ExprStmt] <Foo-Bar/>; |
|
||||
| tst.js:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | semmle.order | 6 |
|
||||
| tst.js:6:2:6:8 | [Label] Foo-Bar | semmle.label | [Label] Foo-Bar |
|
||||
@@ -58,9 +58,9 @@ nodes
|
||||
| tst.js:7:1:7:52 | [DeclStmt] var fragment = ... | semmle.order | 7 |
|
||||
| tst.js:7:5:7:12 | [VarDecl] fragment | semmle.label | [VarDecl] fragment |
|
||||
| tst.js:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | semmle.label | [VariableDeclarator] fragmen ... ext </> |
|
||||
| tst.js:7:16:7:52 | [JSXFragment] <> frag ... ext </> | semmle.label | [JSXFragment] <> frag ... ext </> |
|
||||
| tst.js:7:16:7:52 | [JsxFragment] <> frag ... ext </> | semmle.label | [JsxFragment] <> frag ... ext </> |
|
||||
| tst.js:7:18:7:32 | [Literal] fragment text | semmle.label | [Literal] fragment text |
|
||||
| tst.js:7:33:7:38 | [JSXElement] <Foo/> | semmle.label | [JSXElement] <Foo/> |
|
||||
| tst.js:7:33:7:38 | [JsxElement] <Foo/> | semmle.label | [JsxElement] <Foo/> |
|
||||
| tst.js:7:34:7:36 | [VarRef] Foo | semmle.label | [VarRef] Foo |
|
||||
| tst.js:7:39:7:49 | [Literal] more text | semmle.label | [Literal] more text |
|
||||
| tstest.tsx:1:1:1:32 | [DeclStmt] var href = ... | semmle.label | [DeclStmt] var href = ... |
|
||||
@@ -76,37 +76,37 @@ nodes
|
||||
| tstest.tsx:2:19:2:21 | [Label] rel | semmle.label | [Label] rel |
|
||||
| tstest.tsx:2:19:2:44 | [Property] rel: "noopener noreferrer" | semmle.label | [Property] rel: "noopener noreferrer" |
|
||||
| tstest.tsx:2:24:2:44 | [Literal] "noopener noreferrer" | semmle.label | [Literal] "noopener noreferrer" |
|
||||
| tstest.tsx:3:1:3:106 | [JSXElement] <a href ... */}</a> | semmle.label | [JSXElement] <a href ... */}</a> |
|
||||
| tstest.tsx:3:1:3:106 | [JsxElement] <a href ... */}</a> | semmle.label | [JsxElement] <a href ... */}</a> |
|
||||
| tstest.tsx:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | semmle.label | [ExprStmt] <a href ... /}</a>; |
|
||||
| tstest.tsx:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | semmle.order | 10 |
|
||||
| tstest.tsx:3:2:3:2 | [Label] a | semmle.label | [Label] a |
|
||||
| tstest.tsx:3:4:3:7 | [Label] href | semmle.label | [Label] href |
|
||||
| tstest.tsx:3:4:3:14 | [JSXAttribute] href={href} | semmle.label | [JSXAttribute] href={href} |
|
||||
| tstest.tsx:3:4:3:14 | [JsxAttribute] href={href} | semmle.label | [JsxAttribute] href={href} |
|
||||
| tstest.tsx:3:10:3:13 | [VarRef] href | semmle.label | [VarRef] href |
|
||||
| tstest.tsx:3:16:3:21 | [Label] target | semmle.label | [Label] target |
|
||||
| tstest.tsx:3:16:3:30 | [JSXAttribute] target="_blank" | semmle.label | [JSXAttribute] target="_blank" |
|
||||
| tstest.tsx:3:16:3:30 | [JsxAttribute] target="_blank" | semmle.label | [JsxAttribute] target="_blank" |
|
||||
| tstest.tsx:3:23:3:30 | [Literal] "_blank" | semmle.label | [Literal] "_blank" |
|
||||
| tstest.tsx:3:32:3:45 | [JSXAttribute] {...linkTypes} | semmle.label | [JSXAttribute] {...linkTypes} |
|
||||
| tstest.tsx:3:32:3:45 | [JsxAttribute] {...linkTypes} | semmle.label | [JsxAttribute] {...linkTypes} |
|
||||
| tstest.tsx:3:32:3:45 | [SpreadElement] ...linkTypes | semmle.label | [SpreadElement] ...linkTypes |
|
||||
| tstest.tsx:3:36:3:44 | [VarRef] linkTypes | semmle.label | [VarRef] linkTypes |
|
||||
| tstest.tsx:3:47:3:54 | [Literal] Link to | semmle.label | [Literal] Link to |
|
||||
| tstest.tsx:3:56:3:59 | [VarRef] href | semmle.label | [VarRef] href |
|
||||
| tstest.tsx:3:61:3:62 | [Literal] . | semmle.label | [Literal] . |
|
||||
| tstest.tsx:3:63:3:102 | [JSXEmptyExpr] {/*TODO ... text*/} | semmle.label | [JSXEmptyExpr] {/*TODO ... text*/} |
|
||||
| tstest.tsx:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | semmle.label | [JSXElement] <MyComp ... "bar"/> |
|
||||
| tstest.tsx:3:63:3:102 | [JsxEmptyExpr] {/*TODO ... text*/} | semmle.label | [JsxEmptyExpr] {/*TODO ... text*/} |
|
||||
| tstest.tsx:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | semmle.label | [JsxElement] <MyComp ... "bar"/> |
|
||||
| tstest.tsx:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | semmle.label | [ExprStmt] <MyComp ... bar"/>; |
|
||||
| tstest.tsx:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | semmle.order | 11 |
|
||||
| tstest.tsx:4:2:4:13 | [VarRef] MyComponents | semmle.label | [VarRef] MyComponents |
|
||||
| tstest.tsx:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | semmle.label | [DotExpr] MyCompo ... ncyLink |
|
||||
| tstest.tsx:4:15:4:23 | [Label] FancyLink | semmle.label | [Label] FancyLink |
|
||||
| tstest.tsx:4:25:4:27 | [Label] foo | semmle.label | [Label] foo |
|
||||
| tstest.tsx:4:25:4:33 | [JSXAttribute] foo="bar" | semmle.label | [JSXAttribute] foo="bar" |
|
||||
| tstest.tsx:4:25:4:33 | [JsxAttribute] foo="bar" | semmle.label | [JsxAttribute] foo="bar" |
|
||||
| tstest.tsx:4:29:4:33 | [Literal] "bar" | semmle.label | [Literal] "bar" |
|
||||
| tstest.tsx:5:1:5:6 | [JSXElement] <Foo/> | semmle.label | [JSXElement] <Foo/> |
|
||||
| tstest.tsx:5:1:5:6 | [JsxElement] <Foo/> | semmle.label | [JsxElement] <Foo/> |
|
||||
| tstest.tsx:5:1:5:7 | [ExprStmt] <Foo/>; | semmle.label | [ExprStmt] <Foo/>; |
|
||||
| tstest.tsx:5:1:5:7 | [ExprStmt] <Foo/>; | semmle.order | 12 |
|
||||
| tstest.tsx:5:2:5:4 | [VarRef] Foo | semmle.label | [VarRef] Foo |
|
||||
| tstest.tsx:6:1:6:10 | [JSXElement] <Foo-Bar/> | semmle.label | [JSXElement] <Foo-Bar/> |
|
||||
| tstest.tsx:6:1:6:10 | [JsxElement] <Foo-Bar/> | semmle.label | [JsxElement] <Foo-Bar/> |
|
||||
| tstest.tsx:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | semmle.label | [ExprStmt] <Foo-Bar/>; |
|
||||
| tstest.tsx:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | semmle.order | 13 |
|
||||
| tstest.tsx:6:2:6:8 | [Label] Foo-Bar | semmle.label | [Label] Foo-Bar |
|
||||
@@ -114,40 +114,40 @@ nodes
|
||||
| tstest.tsx:7:1:7:52 | [DeclStmt] var fragment = ... | semmle.order | 14 |
|
||||
| tstest.tsx:7:5:7:12 | [VarDecl] fragment | semmle.label | [VarDecl] fragment |
|
||||
| tstest.tsx:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | semmle.label | [VariableDeclarator] fragmen ... ext </> |
|
||||
| tstest.tsx:7:16:7:52 | [JSXFragment] <> frag ... ext </> | semmle.label | [JSXFragment] <> frag ... ext </> |
|
||||
| tstest.tsx:7:16:7:52 | [JsxFragment] <> frag ... ext </> | semmle.label | [JsxFragment] <> frag ... ext </> |
|
||||
| tstest.tsx:7:19:7:32 | [Literal] fragment text | semmle.label | [Literal] fragment text |
|
||||
| tstest.tsx:7:33:7:38 | [JSXElement] <Foo/> | semmle.label | [JSXElement] <Foo/> |
|
||||
| tstest.tsx:7:33:7:38 | [JsxElement] <Foo/> | semmle.label | [JsxElement] <Foo/> |
|
||||
| tstest.tsx:7:34:7:36 | [VarRef] Foo | semmle.label | [VarRef] Foo |
|
||||
| tstest.tsx:7:40:7:49 | [Literal] more text | semmle.label | [Literal] more text |
|
||||
edges
|
||||
| file://:0:0:0:0 | (Attributes) | tst.js:3:4:3:14 | [JSXAttribute] href={href} | semmle.label | 0 |
|
||||
| file://:0:0:0:0 | (Attributes) | tst.js:3:4:3:14 | [JSXAttribute] href={href} | semmle.order | 0 |
|
||||
| file://:0:0:0:0 | (Attributes) | tst.js:3:16:3:30 | [JSXAttribute] target="_blank" | semmle.label | 1 |
|
||||
| file://:0:0:0:0 | (Attributes) | tst.js:3:16:3:30 | [JSXAttribute] target="_blank" | semmle.order | 1 |
|
||||
| file://:0:0:0:0 | (Attributes) | tst.js:3:32:3:45 | [JSXAttribute] {...linkTypes} | semmle.label | 2 |
|
||||
| file://:0:0:0:0 | (Attributes) | tst.js:3:32:3:45 | [JSXAttribute] {...linkTypes} | semmle.order | 2 |
|
||||
| file://:0:0:0:0 | (Attributes) | tst.js:4:25:4:33 | [JSXAttribute] foo="bar" | semmle.label | 0 |
|
||||
| file://:0:0:0:0 | (Attributes) | tst.js:4:25:4:33 | [JSXAttribute] foo="bar" | semmle.order | 0 |
|
||||
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:4:3:14 | [JSXAttribute] href={href} | semmle.label | 0 |
|
||||
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:4:3:14 | [JSXAttribute] href={href} | semmle.order | 0 |
|
||||
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:16:3:30 | [JSXAttribute] target="_blank" | semmle.label | 1 |
|
||||
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:16:3:30 | [JSXAttribute] target="_blank" | semmle.order | 1 |
|
||||
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:32:3:45 | [JSXAttribute] {...linkTypes} | semmle.label | 2 |
|
||||
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:32:3:45 | [JSXAttribute] {...linkTypes} | semmle.order | 2 |
|
||||
| file://:0:0:0:0 | (Attributes) | tstest.tsx:4:25:4:33 | [JSXAttribute] foo="bar" | semmle.label | 0 |
|
||||
| file://:0:0:0:0 | (Attributes) | tstest.tsx:4:25:4:33 | [JSXAttribute] foo="bar" | semmle.order | 0 |
|
||||
| file://:0:0:0:0 | (Attributes) | tst.js:3:4:3:14 | [JsxAttribute] href={href} | semmle.label | 0 |
|
||||
| file://:0:0:0:0 | (Attributes) | tst.js:3:4:3:14 | [JsxAttribute] href={href} | semmle.order | 0 |
|
||||
| file://:0:0:0:0 | (Attributes) | tst.js:3:16:3:30 | [JsxAttribute] target="_blank" | semmle.label | 1 |
|
||||
| file://:0:0:0:0 | (Attributes) | tst.js:3:16:3:30 | [JsxAttribute] target="_blank" | semmle.order | 1 |
|
||||
| file://:0:0:0:0 | (Attributes) | tst.js:3:32:3:45 | [JsxAttribute] {...linkTypes} | semmle.label | 2 |
|
||||
| file://:0:0:0:0 | (Attributes) | tst.js:3:32:3:45 | [JsxAttribute] {...linkTypes} | semmle.order | 2 |
|
||||
| file://:0:0:0:0 | (Attributes) | tst.js:4:25:4:33 | [JsxAttribute] foo="bar" | semmle.label | 0 |
|
||||
| file://:0:0:0:0 | (Attributes) | tst.js:4:25:4:33 | [JsxAttribute] foo="bar" | semmle.order | 0 |
|
||||
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:4:3:14 | [JsxAttribute] href={href} | semmle.label | 0 |
|
||||
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:4:3:14 | [JsxAttribute] href={href} | semmle.order | 0 |
|
||||
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:16:3:30 | [JsxAttribute] target="_blank" | semmle.label | 1 |
|
||||
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:16:3:30 | [JsxAttribute] target="_blank" | semmle.order | 1 |
|
||||
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:32:3:45 | [JsxAttribute] {...linkTypes} | semmle.label | 2 |
|
||||
| file://:0:0:0:0 | (Attributes) | tstest.tsx:3:32:3:45 | [JsxAttribute] {...linkTypes} | semmle.order | 2 |
|
||||
| file://:0:0:0:0 | (Attributes) | tstest.tsx:4:25:4:33 | [JsxAttribute] foo="bar" | semmle.label | 0 |
|
||||
| file://:0:0:0:0 | (Attributes) | tstest.tsx:4:25:4:33 | [JsxAttribute] foo="bar" | semmle.order | 0 |
|
||||
| file://:0:0:0:0 | (Body) | tst.js:3:47:3:54 | [Literal] Link to | semmle.label | 0 |
|
||||
| file://:0:0:0:0 | (Body) | tst.js:3:47:3:54 | [Literal] Link to | semmle.order | 0 |
|
||||
| file://:0:0:0:0 | (Body) | tst.js:3:56:3:59 | [VarRef] href | semmle.label | 1 |
|
||||
| file://:0:0:0:0 | (Body) | tst.js:3:56:3:59 | [VarRef] href | semmle.order | 1 |
|
||||
| file://:0:0:0:0 | (Body) | tst.js:3:61:3:62 | [Literal] . | semmle.label | 2 |
|
||||
| file://:0:0:0:0 | (Body) | tst.js:3:61:3:62 | [Literal] . | semmle.order | 2 |
|
||||
| file://:0:0:0:0 | (Body) | tst.js:3:64:3:101 | [JSXEmptyExpr] | semmle.label | 3 |
|
||||
| file://:0:0:0:0 | (Body) | tst.js:3:64:3:101 | [JSXEmptyExpr] | semmle.order | 3 |
|
||||
| file://:0:0:0:0 | (Body) | tst.js:3:64:3:101 | [JsxEmptyExpr] | semmle.label | 3 |
|
||||
| file://:0:0:0:0 | (Body) | tst.js:3:64:3:101 | [JsxEmptyExpr] | semmle.order | 3 |
|
||||
| file://:0:0:0:0 | (Body) | tst.js:7:18:7:32 | [Literal] fragment text | semmle.label | 0 |
|
||||
| file://:0:0:0:0 | (Body) | tst.js:7:18:7:32 | [Literal] fragment text | semmle.order | 0 |
|
||||
| file://:0:0:0:0 | (Body) | tst.js:7:33:7:38 | [JSXElement] <Foo/> | semmle.label | 1 |
|
||||
| file://:0:0:0:0 | (Body) | tst.js:7:33:7:38 | [JSXElement] <Foo/> | semmle.order | 1 |
|
||||
| file://:0:0:0:0 | (Body) | tst.js:7:33:7:38 | [JsxElement] <Foo/> | semmle.label | 1 |
|
||||
| file://:0:0:0:0 | (Body) | tst.js:7:33:7:38 | [JsxElement] <Foo/> | semmle.order | 1 |
|
||||
| file://:0:0:0:0 | (Body) | tst.js:7:39:7:49 | [Literal] more text | semmle.label | 2 |
|
||||
| file://:0:0:0:0 | (Body) | tst.js:7:39:7:49 | [Literal] more text | semmle.order | 2 |
|
||||
| file://:0:0:0:0 | (Body) | tstest.tsx:3:47:3:54 | [Literal] Link to | semmle.label | 0 |
|
||||
@@ -156,12 +156,12 @@ edges
|
||||
| file://:0:0:0:0 | (Body) | tstest.tsx:3:56:3:59 | [VarRef] href | semmle.order | 1 |
|
||||
| file://:0:0:0:0 | (Body) | tstest.tsx:3:61:3:62 | [Literal] . | semmle.label | 2 |
|
||||
| file://:0:0:0:0 | (Body) | tstest.tsx:3:61:3:62 | [Literal] . | semmle.order | 2 |
|
||||
| file://:0:0:0:0 | (Body) | tstest.tsx:3:63:3:102 | [JSXEmptyExpr] {/*TODO ... text*/} | semmle.label | 3 |
|
||||
| file://:0:0:0:0 | (Body) | tstest.tsx:3:63:3:102 | [JSXEmptyExpr] {/*TODO ... text*/} | semmle.order | 3 |
|
||||
| file://:0:0:0:0 | (Body) | tstest.tsx:3:63:3:102 | [JsxEmptyExpr] {/*TODO ... text*/} | semmle.label | 3 |
|
||||
| file://:0:0:0:0 | (Body) | tstest.tsx:3:63:3:102 | [JsxEmptyExpr] {/*TODO ... text*/} | semmle.order | 3 |
|
||||
| file://:0:0:0:0 | (Body) | tstest.tsx:7:19:7:32 | [Literal] fragment text | semmle.label | 0 |
|
||||
| file://:0:0:0:0 | (Body) | tstest.tsx:7:19:7:32 | [Literal] fragment text | semmle.order | 0 |
|
||||
| file://:0:0:0:0 | (Body) | tstest.tsx:7:33:7:38 | [JSXElement] <Foo/> | semmle.label | 1 |
|
||||
| file://:0:0:0:0 | (Body) | tstest.tsx:7:33:7:38 | [JSXElement] <Foo/> | semmle.order | 1 |
|
||||
| file://:0:0:0:0 | (Body) | tstest.tsx:7:33:7:38 | [JsxElement] <Foo/> | semmle.label | 1 |
|
||||
| file://:0:0:0:0 | (Body) | tstest.tsx:7:33:7:38 | [JsxElement] <Foo/> | semmle.order | 1 |
|
||||
| file://:0:0:0:0 | (Body) | tstest.tsx:7:40:7:49 | [Literal] more text | semmle.label | 2 |
|
||||
| file://:0:0:0:0 | (Body) | tstest.tsx:7:40:7:49 | [Literal] more text | semmle.order | 2 |
|
||||
| tst.js:1:1:1:32 | [DeclStmt] var href = ... | tst.js:1:5:1:31 | [VariableDeclarator] href = ... le.com" | semmle.label | 1 |
|
||||
@@ -182,58 +182,58 @@ edges
|
||||
| tst.js:2:19:2:44 | [Property] rel: "noopener noreferrer" | tst.js:2:19:2:21 | [Label] rel | semmle.order | 1 |
|
||||
| tst.js:2:19:2:44 | [Property] rel: "noopener noreferrer" | tst.js:2:24:2:44 | [Literal] "noopener noreferrer" | semmle.label | 2 |
|
||||
| tst.js:2:19:2:44 | [Property] rel: "noopener noreferrer" | tst.js:2:24:2:44 | [Literal] "noopener noreferrer" | semmle.order | 2 |
|
||||
| tst.js:3:1:3:106 | [JSXElement] <a href ... */}</a> | file://:0:0:0:0 | (Attributes) | semmle.label | 2 |
|
||||
| tst.js:3:1:3:106 | [JSXElement] <a href ... */}</a> | file://:0:0:0:0 | (Attributes) | semmle.order | 2 |
|
||||
| tst.js:3:1:3:106 | [JSXElement] <a href ... */}</a> | file://:0:0:0:0 | (Body) | semmle.label | 1 |
|
||||
| tst.js:3:1:3:106 | [JSXElement] <a href ... */}</a> | file://:0:0:0:0 | (Body) | semmle.order | 1 |
|
||||
| tst.js:3:1:3:106 | [JSXElement] <a href ... */}</a> | tst.js:3:2:3:2 | [Label] a | semmle.label | 0 |
|
||||
| tst.js:3:1:3:106 | [JSXElement] <a href ... */}</a> | tst.js:3:2:3:2 | [Label] a | semmle.order | 0 |
|
||||
| tst.js:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | tst.js:3:1:3:106 | [JSXElement] <a href ... */}</a> | semmle.label | 1 |
|
||||
| tst.js:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | tst.js:3:1:3:106 | [JSXElement] <a href ... */}</a> | semmle.order | 1 |
|
||||
| tst.js:3:4:3:14 | [JSXAttribute] href={href} | tst.js:3:4:3:7 | [Label] href | semmle.label | 1 |
|
||||
| tst.js:3:4:3:14 | [JSXAttribute] href={href} | tst.js:3:4:3:7 | [Label] href | semmle.order | 1 |
|
||||
| tst.js:3:4:3:14 | [JSXAttribute] href={href} | tst.js:3:10:3:13 | [VarRef] href | semmle.label | 2 |
|
||||
| tst.js:3:4:3:14 | [JSXAttribute] href={href} | tst.js:3:10:3:13 | [VarRef] href | semmle.order | 2 |
|
||||
| tst.js:3:16:3:30 | [JSXAttribute] target="_blank" | tst.js:3:16:3:21 | [Label] target | semmle.label | 1 |
|
||||
| tst.js:3:16:3:30 | [JSXAttribute] target="_blank" | tst.js:3:16:3:21 | [Label] target | semmle.order | 1 |
|
||||
| tst.js:3:16:3:30 | [JSXAttribute] target="_blank" | tst.js:3:23:3:30 | [Literal] "_blank" | semmle.label | 2 |
|
||||
| tst.js:3:16:3:30 | [JSXAttribute] target="_blank" | tst.js:3:23:3:30 | [Literal] "_blank" | semmle.order | 2 |
|
||||
| tst.js:3:32:3:45 | [JSXAttribute] {...linkTypes} | tst.js:3:32:3:45 | [SpreadElement] ...linkTypes | semmle.label | 1 |
|
||||
| tst.js:3:32:3:45 | [JSXAttribute] {...linkTypes} | tst.js:3:32:3:45 | [SpreadElement] ...linkTypes | semmle.order | 1 |
|
||||
| tst.js:3:1:3:106 | [JsxElement] <a href ... */}</a> | file://:0:0:0:0 | (Attributes) | semmle.label | 2 |
|
||||
| tst.js:3:1:3:106 | [JsxElement] <a href ... */}</a> | file://:0:0:0:0 | (Attributes) | semmle.order | 2 |
|
||||
| tst.js:3:1:3:106 | [JsxElement] <a href ... */}</a> | file://:0:0:0:0 | (Body) | semmle.label | 1 |
|
||||
| tst.js:3:1:3:106 | [JsxElement] <a href ... */}</a> | file://:0:0:0:0 | (Body) | semmle.order | 1 |
|
||||
| tst.js:3:1:3:106 | [JsxElement] <a href ... */}</a> | tst.js:3:2:3:2 | [Label] a | semmle.label | 0 |
|
||||
| tst.js:3:1:3:106 | [JsxElement] <a href ... */}</a> | tst.js:3:2:3:2 | [Label] a | semmle.order | 0 |
|
||||
| tst.js:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | tst.js:3:1:3:106 | [JsxElement] <a href ... */}</a> | semmle.label | 1 |
|
||||
| tst.js:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | tst.js:3:1:3:106 | [JsxElement] <a href ... */}</a> | semmle.order | 1 |
|
||||
| tst.js:3:4:3:14 | [JsxAttribute] href={href} | tst.js:3:4:3:7 | [Label] href | semmle.label | 1 |
|
||||
| tst.js:3:4:3:14 | [JsxAttribute] href={href} | tst.js:3:4:3:7 | [Label] href | semmle.order | 1 |
|
||||
| tst.js:3:4:3:14 | [JsxAttribute] href={href} | tst.js:3:10:3:13 | [VarRef] href | semmle.label | 2 |
|
||||
| tst.js:3:4:3:14 | [JsxAttribute] href={href} | tst.js:3:10:3:13 | [VarRef] href | semmle.order | 2 |
|
||||
| tst.js:3:16:3:30 | [JsxAttribute] target="_blank" | tst.js:3:16:3:21 | [Label] target | semmle.label | 1 |
|
||||
| tst.js:3:16:3:30 | [JsxAttribute] target="_blank" | tst.js:3:16:3:21 | [Label] target | semmle.order | 1 |
|
||||
| tst.js:3:16:3:30 | [JsxAttribute] target="_blank" | tst.js:3:23:3:30 | [Literal] "_blank" | semmle.label | 2 |
|
||||
| tst.js:3:16:3:30 | [JsxAttribute] target="_blank" | tst.js:3:23:3:30 | [Literal] "_blank" | semmle.order | 2 |
|
||||
| tst.js:3:32:3:45 | [JsxAttribute] {...linkTypes} | tst.js:3:32:3:45 | [SpreadElement] ...linkTypes | semmle.label | 1 |
|
||||
| tst.js:3:32:3:45 | [JsxAttribute] {...linkTypes} | tst.js:3:32:3:45 | [SpreadElement] ...linkTypes | semmle.order | 1 |
|
||||
| tst.js:3:32:3:45 | [SpreadElement] ...linkTypes | tst.js:3:36:3:44 | [VarRef] linkTypes | semmle.label | 1 |
|
||||
| tst.js:3:32:3:45 | [SpreadElement] ...linkTypes | tst.js:3:36:3:44 | [VarRef] linkTypes | semmle.order | 1 |
|
||||
| tst.js:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | file://:0:0:0:0 | (Attributes) | semmle.label | 2 |
|
||||
| tst.js:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | file://:0:0:0:0 | (Attributes) | semmle.order | 2 |
|
||||
| tst.js:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | tst.js:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | semmle.label | 0 |
|
||||
| tst.js:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | tst.js:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | semmle.order | 0 |
|
||||
| tst.js:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | tst.js:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | semmle.label | 1 |
|
||||
| tst.js:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | tst.js:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | semmle.order | 1 |
|
||||
| tst.js:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | file://:0:0:0:0 | (Attributes) | semmle.label | 2 |
|
||||
| tst.js:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | file://:0:0:0:0 | (Attributes) | semmle.order | 2 |
|
||||
| tst.js:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | tst.js:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | semmle.label | 0 |
|
||||
| tst.js:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | tst.js:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | semmle.order | 0 |
|
||||
| tst.js:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | tst.js:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | semmle.label | 1 |
|
||||
| tst.js:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | tst.js:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | semmle.order | 1 |
|
||||
| tst.js:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | tst.js:4:2:4:13 | [VarRef] MyComponents | semmle.label | 1 |
|
||||
| tst.js:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | tst.js:4:2:4:13 | [VarRef] MyComponents | semmle.order | 1 |
|
||||
| tst.js:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | tst.js:4:15:4:23 | [Label] FancyLink | semmle.label | 2 |
|
||||
| tst.js:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | tst.js:4:15:4:23 | [Label] FancyLink | semmle.order | 2 |
|
||||
| tst.js:4:25:4:33 | [JSXAttribute] foo="bar" | tst.js:4:25:4:27 | [Label] foo | semmle.label | 1 |
|
||||
| tst.js:4:25:4:33 | [JSXAttribute] foo="bar" | tst.js:4:25:4:27 | [Label] foo | semmle.order | 1 |
|
||||
| tst.js:4:25:4:33 | [JSXAttribute] foo="bar" | tst.js:4:29:4:33 | [Literal] "bar" | semmle.label | 2 |
|
||||
| tst.js:4:25:4:33 | [JSXAttribute] foo="bar" | tst.js:4:29:4:33 | [Literal] "bar" | semmle.order | 2 |
|
||||
| tst.js:5:1:5:6 | [JSXElement] <Foo/> | tst.js:5:2:5:4 | [VarRef] Foo | semmle.label | 0 |
|
||||
| tst.js:5:1:5:6 | [JSXElement] <Foo/> | tst.js:5:2:5:4 | [VarRef] Foo | semmle.order | 0 |
|
||||
| tst.js:5:1:5:7 | [ExprStmt] <Foo/>; | tst.js:5:1:5:6 | [JSXElement] <Foo/> | semmle.label | 1 |
|
||||
| tst.js:5:1:5:7 | [ExprStmt] <Foo/>; | tst.js:5:1:5:6 | [JSXElement] <Foo/> | semmle.order | 1 |
|
||||
| tst.js:6:1:6:10 | [JSXElement] <Foo-Bar/> | tst.js:6:2:6:8 | [Label] Foo-Bar | semmle.label | 0 |
|
||||
| tst.js:6:1:6:10 | [JSXElement] <Foo-Bar/> | tst.js:6:2:6:8 | [Label] Foo-Bar | semmle.order | 0 |
|
||||
| tst.js:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | tst.js:6:1:6:10 | [JSXElement] <Foo-Bar/> | semmle.label | 1 |
|
||||
| tst.js:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | tst.js:6:1:6:10 | [JSXElement] <Foo-Bar/> | semmle.order | 1 |
|
||||
| tst.js:4:25:4:33 | [JsxAttribute] foo="bar" | tst.js:4:25:4:27 | [Label] foo | semmle.label | 1 |
|
||||
| tst.js:4:25:4:33 | [JsxAttribute] foo="bar" | tst.js:4:25:4:27 | [Label] foo | semmle.order | 1 |
|
||||
| tst.js:4:25:4:33 | [JsxAttribute] foo="bar" | tst.js:4:29:4:33 | [Literal] "bar" | semmle.label | 2 |
|
||||
| tst.js:4:25:4:33 | [JsxAttribute] foo="bar" | tst.js:4:29:4:33 | [Literal] "bar" | semmle.order | 2 |
|
||||
| tst.js:5:1:5:6 | [JsxElement] <Foo/> | tst.js:5:2:5:4 | [VarRef] Foo | semmle.label | 0 |
|
||||
| tst.js:5:1:5:6 | [JsxElement] <Foo/> | tst.js:5:2:5:4 | [VarRef] Foo | semmle.order | 0 |
|
||||
| tst.js:5:1:5:7 | [ExprStmt] <Foo/>; | tst.js:5:1:5:6 | [JsxElement] <Foo/> | semmle.label | 1 |
|
||||
| tst.js:5:1:5:7 | [ExprStmt] <Foo/>; | tst.js:5:1:5:6 | [JsxElement] <Foo/> | semmle.order | 1 |
|
||||
| tst.js:6:1:6:10 | [JsxElement] <Foo-Bar/> | tst.js:6:2:6:8 | [Label] Foo-Bar | semmle.label | 0 |
|
||||
| tst.js:6:1:6:10 | [JsxElement] <Foo-Bar/> | tst.js:6:2:6:8 | [Label] Foo-Bar | semmle.order | 0 |
|
||||
| tst.js:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | tst.js:6:1:6:10 | [JsxElement] <Foo-Bar/> | semmle.label | 1 |
|
||||
| tst.js:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | tst.js:6:1:6:10 | [JsxElement] <Foo-Bar/> | semmle.order | 1 |
|
||||
| tst.js:7:1:7:52 | [DeclStmt] var fragment = ... | tst.js:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | semmle.label | 1 |
|
||||
| tst.js:7:1:7:52 | [DeclStmt] var fragment = ... | tst.js:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | semmle.order | 1 |
|
||||
| tst.js:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tst.js:7:5:7:12 | [VarDecl] fragment | semmle.label | 1 |
|
||||
| tst.js:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tst.js:7:5:7:12 | [VarDecl] fragment | semmle.order | 1 |
|
||||
| tst.js:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tst.js:7:16:7:52 | [JSXFragment] <> frag ... ext </> | semmle.label | 2 |
|
||||
| tst.js:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tst.js:7:16:7:52 | [JSXFragment] <> frag ... ext </> | semmle.order | 2 |
|
||||
| tst.js:7:16:7:52 | [JSXFragment] <> frag ... ext </> | file://:0:0:0:0 | (Body) | semmle.label | 1 |
|
||||
| tst.js:7:16:7:52 | [JSXFragment] <> frag ... ext </> | file://:0:0:0:0 | (Body) | semmle.order | 1 |
|
||||
| tst.js:7:33:7:38 | [JSXElement] <Foo/> | tst.js:7:34:7:36 | [VarRef] Foo | semmle.label | 0 |
|
||||
| tst.js:7:33:7:38 | [JSXElement] <Foo/> | tst.js:7:34:7:36 | [VarRef] Foo | semmle.order | 0 |
|
||||
| tst.js:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tst.js:7:16:7:52 | [JsxFragment] <> frag ... ext </> | semmle.label | 2 |
|
||||
| tst.js:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tst.js:7:16:7:52 | [JsxFragment] <> frag ... ext </> | semmle.order | 2 |
|
||||
| tst.js:7:16:7:52 | [JsxFragment] <> frag ... ext </> | file://:0:0:0:0 | (Body) | semmle.label | 1 |
|
||||
| tst.js:7:16:7:52 | [JsxFragment] <> frag ... ext </> | file://:0:0:0:0 | (Body) | semmle.order | 1 |
|
||||
| tst.js:7:33:7:38 | [JsxElement] <Foo/> | tst.js:7:34:7:36 | [VarRef] Foo | semmle.label | 0 |
|
||||
| tst.js:7:33:7:38 | [JsxElement] <Foo/> | tst.js:7:34:7:36 | [VarRef] Foo | semmle.order | 0 |
|
||||
| tstest.tsx:1:1:1:32 | [DeclStmt] var href = ... | tstest.tsx:1:5:1:31 | [VariableDeclarator] href = ... le.com" | semmle.label | 1 |
|
||||
| tstest.tsx:1:1:1:32 | [DeclStmt] var href = ... | tstest.tsx:1:5:1:31 | [VariableDeclarator] href = ... le.com" | semmle.order | 1 |
|
||||
| tstest.tsx:1:5:1:31 | [VariableDeclarator] href = ... le.com" | tstest.tsx:1:5:1:8 | [VarDecl] href | semmle.label | 1 |
|
||||
@@ -252,57 +252,57 @@ edges
|
||||
| tstest.tsx:2:19:2:44 | [Property] rel: "noopener noreferrer" | tstest.tsx:2:19:2:21 | [Label] rel | semmle.order | 1 |
|
||||
| tstest.tsx:2:19:2:44 | [Property] rel: "noopener noreferrer" | tstest.tsx:2:24:2:44 | [Literal] "noopener noreferrer" | semmle.label | 2 |
|
||||
| tstest.tsx:2:19:2:44 | [Property] rel: "noopener noreferrer" | tstest.tsx:2:24:2:44 | [Literal] "noopener noreferrer" | semmle.order | 2 |
|
||||
| tstest.tsx:3:1:3:106 | [JSXElement] <a href ... */}</a> | file://:0:0:0:0 | (Attributes) | semmle.label | 2 |
|
||||
| tstest.tsx:3:1:3:106 | [JSXElement] <a href ... */}</a> | file://:0:0:0:0 | (Attributes) | semmle.order | 2 |
|
||||
| tstest.tsx:3:1:3:106 | [JSXElement] <a href ... */}</a> | file://:0:0:0:0 | (Body) | semmle.label | 1 |
|
||||
| tstest.tsx:3:1:3:106 | [JSXElement] <a href ... */}</a> | file://:0:0:0:0 | (Body) | semmle.order | 1 |
|
||||
| tstest.tsx:3:1:3:106 | [JSXElement] <a href ... */}</a> | tstest.tsx:3:2:3:2 | [Label] a | semmle.label | 0 |
|
||||
| tstest.tsx:3:1:3:106 | [JSXElement] <a href ... */}</a> | tstest.tsx:3:2:3:2 | [Label] a | semmle.order | 0 |
|
||||
| tstest.tsx:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | tstest.tsx:3:1:3:106 | [JSXElement] <a href ... */}</a> | semmle.label | 1 |
|
||||
| tstest.tsx:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | tstest.tsx:3:1:3:106 | [JSXElement] <a href ... */}</a> | semmle.order | 1 |
|
||||
| tstest.tsx:3:4:3:14 | [JSXAttribute] href={href} | tstest.tsx:3:4:3:7 | [Label] href | semmle.label | 1 |
|
||||
| tstest.tsx:3:4:3:14 | [JSXAttribute] href={href} | tstest.tsx:3:4:3:7 | [Label] href | semmle.order | 1 |
|
||||
| tstest.tsx:3:4:3:14 | [JSXAttribute] href={href} | tstest.tsx:3:10:3:13 | [VarRef] href | semmle.label | 2 |
|
||||
| tstest.tsx:3:4:3:14 | [JSXAttribute] href={href} | tstest.tsx:3:10:3:13 | [VarRef] href | semmle.order | 2 |
|
||||
| tstest.tsx:3:16:3:30 | [JSXAttribute] target="_blank" | tstest.tsx:3:16:3:21 | [Label] target | semmle.label | 1 |
|
||||
| tstest.tsx:3:16:3:30 | [JSXAttribute] target="_blank" | tstest.tsx:3:16:3:21 | [Label] target | semmle.order | 1 |
|
||||
| tstest.tsx:3:16:3:30 | [JSXAttribute] target="_blank" | tstest.tsx:3:23:3:30 | [Literal] "_blank" | semmle.label | 2 |
|
||||
| tstest.tsx:3:16:3:30 | [JSXAttribute] target="_blank" | tstest.tsx:3:23:3:30 | [Literal] "_blank" | semmle.order | 2 |
|
||||
| tstest.tsx:3:32:3:45 | [JSXAttribute] {...linkTypes} | tstest.tsx:3:32:3:45 | [SpreadElement] ...linkTypes | semmle.label | 1 |
|
||||
| tstest.tsx:3:32:3:45 | [JSXAttribute] {...linkTypes} | tstest.tsx:3:32:3:45 | [SpreadElement] ...linkTypes | semmle.order | 1 |
|
||||
| tstest.tsx:3:1:3:106 | [JsxElement] <a href ... */}</a> | file://:0:0:0:0 | (Attributes) | semmle.label | 2 |
|
||||
| tstest.tsx:3:1:3:106 | [JsxElement] <a href ... */}</a> | file://:0:0:0:0 | (Attributes) | semmle.order | 2 |
|
||||
| tstest.tsx:3:1:3:106 | [JsxElement] <a href ... */}</a> | file://:0:0:0:0 | (Body) | semmle.label | 1 |
|
||||
| tstest.tsx:3:1:3:106 | [JsxElement] <a href ... */}</a> | file://:0:0:0:0 | (Body) | semmle.order | 1 |
|
||||
| tstest.tsx:3:1:3:106 | [JsxElement] <a href ... */}</a> | tstest.tsx:3:2:3:2 | [Label] a | semmle.label | 0 |
|
||||
| tstest.tsx:3:1:3:106 | [JsxElement] <a href ... */}</a> | tstest.tsx:3:2:3:2 | [Label] a | semmle.order | 0 |
|
||||
| tstest.tsx:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | tstest.tsx:3:1:3:106 | [JsxElement] <a href ... */}</a> | semmle.label | 1 |
|
||||
| tstest.tsx:3:1:3:107 | [ExprStmt] <a href ... /}</a>; | tstest.tsx:3:1:3:106 | [JsxElement] <a href ... */}</a> | semmle.order | 1 |
|
||||
| tstest.tsx:3:4:3:14 | [JsxAttribute] href={href} | tstest.tsx:3:4:3:7 | [Label] href | semmle.label | 1 |
|
||||
| tstest.tsx:3:4:3:14 | [JsxAttribute] href={href} | tstest.tsx:3:4:3:7 | [Label] href | semmle.order | 1 |
|
||||
| tstest.tsx:3:4:3:14 | [JsxAttribute] href={href} | tstest.tsx:3:10:3:13 | [VarRef] href | semmle.label | 2 |
|
||||
| tstest.tsx:3:4:3:14 | [JsxAttribute] href={href} | tstest.tsx:3:10:3:13 | [VarRef] href | semmle.order | 2 |
|
||||
| tstest.tsx:3:16:3:30 | [JsxAttribute] target="_blank" | tstest.tsx:3:16:3:21 | [Label] target | semmle.label | 1 |
|
||||
| tstest.tsx:3:16:3:30 | [JsxAttribute] target="_blank" | tstest.tsx:3:16:3:21 | [Label] target | semmle.order | 1 |
|
||||
| tstest.tsx:3:16:3:30 | [JsxAttribute] target="_blank" | tstest.tsx:3:23:3:30 | [Literal] "_blank" | semmle.label | 2 |
|
||||
| tstest.tsx:3:16:3:30 | [JsxAttribute] target="_blank" | tstest.tsx:3:23:3:30 | [Literal] "_blank" | semmle.order | 2 |
|
||||
| tstest.tsx:3:32:3:45 | [JsxAttribute] {...linkTypes} | tstest.tsx:3:32:3:45 | [SpreadElement] ...linkTypes | semmle.label | 1 |
|
||||
| tstest.tsx:3:32:3:45 | [JsxAttribute] {...linkTypes} | tstest.tsx:3:32:3:45 | [SpreadElement] ...linkTypes | semmle.order | 1 |
|
||||
| tstest.tsx:3:32:3:45 | [SpreadElement] ...linkTypes | tstest.tsx:3:36:3:44 | [VarRef] linkTypes | semmle.label | 1 |
|
||||
| tstest.tsx:3:32:3:45 | [SpreadElement] ...linkTypes | tstest.tsx:3:36:3:44 | [VarRef] linkTypes | semmle.order | 1 |
|
||||
| tstest.tsx:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | file://:0:0:0:0 | (Attributes) | semmle.label | 2 |
|
||||
| tstest.tsx:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | file://:0:0:0:0 | (Attributes) | semmle.order | 2 |
|
||||
| tstest.tsx:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | tstest.tsx:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | semmle.label | 0 |
|
||||
| tstest.tsx:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | tstest.tsx:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | semmle.order | 0 |
|
||||
| tstest.tsx:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | tstest.tsx:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | semmle.label | 1 |
|
||||
| tstest.tsx:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | tstest.tsx:4:1:4:35 | [JSXElement] <MyComp ... "bar"/> | semmle.order | 1 |
|
||||
| tstest.tsx:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | file://:0:0:0:0 | (Attributes) | semmle.label | 2 |
|
||||
| tstest.tsx:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | file://:0:0:0:0 | (Attributes) | semmle.order | 2 |
|
||||
| tstest.tsx:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | tstest.tsx:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | semmle.label | 0 |
|
||||
| tstest.tsx:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | tstest.tsx:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | semmle.order | 0 |
|
||||
| tstest.tsx:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | tstest.tsx:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | semmle.label | 1 |
|
||||
| tstest.tsx:4:1:4:36 | [ExprStmt] <MyComp ... bar"/>; | tstest.tsx:4:1:4:35 | [JsxElement] <MyComp ... "bar"/> | semmle.order | 1 |
|
||||
| tstest.tsx:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | tstest.tsx:4:2:4:13 | [VarRef] MyComponents | semmle.label | 1 |
|
||||
| tstest.tsx:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | tstest.tsx:4:2:4:13 | [VarRef] MyComponents | semmle.order | 1 |
|
||||
| tstest.tsx:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | tstest.tsx:4:15:4:23 | [Label] FancyLink | semmle.label | 2 |
|
||||
| tstest.tsx:4:2:4:23 | [DotExpr] MyCompo ... ncyLink | tstest.tsx:4:15:4:23 | [Label] FancyLink | semmle.order | 2 |
|
||||
| tstest.tsx:4:25:4:33 | [JSXAttribute] foo="bar" | tstest.tsx:4:25:4:27 | [Label] foo | semmle.label | 1 |
|
||||
| tstest.tsx:4:25:4:33 | [JSXAttribute] foo="bar" | tstest.tsx:4:25:4:27 | [Label] foo | semmle.order | 1 |
|
||||
| tstest.tsx:4:25:4:33 | [JSXAttribute] foo="bar" | tstest.tsx:4:29:4:33 | [Literal] "bar" | semmle.label | 2 |
|
||||
| tstest.tsx:4:25:4:33 | [JSXAttribute] foo="bar" | tstest.tsx:4:29:4:33 | [Literal] "bar" | semmle.order | 2 |
|
||||
| tstest.tsx:5:1:5:6 | [JSXElement] <Foo/> | tstest.tsx:5:2:5:4 | [VarRef] Foo | semmle.label | 0 |
|
||||
| tstest.tsx:5:1:5:6 | [JSXElement] <Foo/> | tstest.tsx:5:2:5:4 | [VarRef] Foo | semmle.order | 0 |
|
||||
| tstest.tsx:5:1:5:7 | [ExprStmt] <Foo/>; | tstest.tsx:5:1:5:6 | [JSXElement] <Foo/> | semmle.label | 1 |
|
||||
| tstest.tsx:5:1:5:7 | [ExprStmt] <Foo/>; | tstest.tsx:5:1:5:6 | [JSXElement] <Foo/> | semmle.order | 1 |
|
||||
| tstest.tsx:6:1:6:10 | [JSXElement] <Foo-Bar/> | tstest.tsx:6:2:6:8 | [Label] Foo-Bar | semmle.label | 0 |
|
||||
| tstest.tsx:6:1:6:10 | [JSXElement] <Foo-Bar/> | tstest.tsx:6:2:6:8 | [Label] Foo-Bar | semmle.order | 0 |
|
||||
| tstest.tsx:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | tstest.tsx:6:1:6:10 | [JSXElement] <Foo-Bar/> | semmle.label | 1 |
|
||||
| tstest.tsx:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | tstest.tsx:6:1:6:10 | [JSXElement] <Foo-Bar/> | semmle.order | 1 |
|
||||
| tstest.tsx:4:25:4:33 | [JsxAttribute] foo="bar" | tstest.tsx:4:25:4:27 | [Label] foo | semmle.label | 1 |
|
||||
| tstest.tsx:4:25:4:33 | [JsxAttribute] foo="bar" | tstest.tsx:4:25:4:27 | [Label] foo | semmle.order | 1 |
|
||||
| tstest.tsx:4:25:4:33 | [JsxAttribute] foo="bar" | tstest.tsx:4:29:4:33 | [Literal] "bar" | semmle.label | 2 |
|
||||
| tstest.tsx:4:25:4:33 | [JsxAttribute] foo="bar" | tstest.tsx:4:29:4:33 | [Literal] "bar" | semmle.order | 2 |
|
||||
| tstest.tsx:5:1:5:6 | [JsxElement] <Foo/> | tstest.tsx:5:2:5:4 | [VarRef] Foo | semmle.label | 0 |
|
||||
| tstest.tsx:5:1:5:6 | [JsxElement] <Foo/> | tstest.tsx:5:2:5:4 | [VarRef] Foo | semmle.order | 0 |
|
||||
| tstest.tsx:5:1:5:7 | [ExprStmt] <Foo/>; | tstest.tsx:5:1:5:6 | [JsxElement] <Foo/> | semmle.label | 1 |
|
||||
| tstest.tsx:5:1:5:7 | [ExprStmt] <Foo/>; | tstest.tsx:5:1:5:6 | [JsxElement] <Foo/> | semmle.order | 1 |
|
||||
| tstest.tsx:6:1:6:10 | [JsxElement] <Foo-Bar/> | tstest.tsx:6:2:6:8 | [Label] Foo-Bar | semmle.label | 0 |
|
||||
| tstest.tsx:6:1:6:10 | [JsxElement] <Foo-Bar/> | tstest.tsx:6:2:6:8 | [Label] Foo-Bar | semmle.order | 0 |
|
||||
| tstest.tsx:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | tstest.tsx:6:1:6:10 | [JsxElement] <Foo-Bar/> | semmle.label | 1 |
|
||||
| tstest.tsx:6:1:6:11 | [ExprStmt] <Foo-Bar/>; | tstest.tsx:6:1:6:10 | [JsxElement] <Foo-Bar/> | semmle.order | 1 |
|
||||
| tstest.tsx:7:1:7:52 | [DeclStmt] var fragment = ... | tstest.tsx:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | semmle.label | 1 |
|
||||
| tstest.tsx:7:1:7:52 | [DeclStmt] var fragment = ... | tstest.tsx:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | semmle.order | 1 |
|
||||
| tstest.tsx:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tstest.tsx:7:5:7:12 | [VarDecl] fragment | semmle.label | 1 |
|
||||
| tstest.tsx:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tstest.tsx:7:5:7:12 | [VarDecl] fragment | semmle.order | 1 |
|
||||
| tstest.tsx:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tstest.tsx:7:16:7:52 | [JSXFragment] <> frag ... ext </> | semmle.label | 2 |
|
||||
| tstest.tsx:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tstest.tsx:7:16:7:52 | [JSXFragment] <> frag ... ext </> | semmle.order | 2 |
|
||||
| tstest.tsx:7:16:7:52 | [JSXFragment] <> frag ... ext </> | file://:0:0:0:0 | (Body) | semmle.label | 1 |
|
||||
| tstest.tsx:7:16:7:52 | [JSXFragment] <> frag ... ext </> | file://:0:0:0:0 | (Body) | semmle.order | 1 |
|
||||
| tstest.tsx:7:33:7:38 | [JSXElement] <Foo/> | tstest.tsx:7:34:7:36 | [VarRef] Foo | semmle.label | 0 |
|
||||
| tstest.tsx:7:33:7:38 | [JSXElement] <Foo/> | tstest.tsx:7:34:7:36 | [VarRef] Foo | semmle.order | 0 |
|
||||
| tstest.tsx:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tstest.tsx:7:16:7:52 | [JsxFragment] <> frag ... ext </> | semmle.label | 2 |
|
||||
| tstest.tsx:7:5:7:52 | [VariableDeclarator] fragmen ... ext </> | tstest.tsx:7:16:7:52 | [JsxFragment] <> frag ... ext </> | semmle.order | 2 |
|
||||
| tstest.tsx:7:16:7:52 | [JsxFragment] <> frag ... ext </> | file://:0:0:0:0 | (Body) | semmle.label | 1 |
|
||||
| tstest.tsx:7:16:7:52 | [JsxFragment] <> frag ... ext </> | file://:0:0:0:0 | (Body) | semmle.order | 1 |
|
||||
| tstest.tsx:7:33:7:38 | [JsxElement] <Foo/> | tstest.tsx:7:34:7:36 | [VarRef] Foo | semmle.label | 0 |
|
||||
| tstest.tsx:7:33:7:38 | [JsxElement] <Foo/> | tstest.tsx:7:34:7:36 | [VarRef] Foo | semmle.order | 0 |
|
||||
graphProperties
|
||||
| semmle.graphKind | tree |
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
import javascript
|
||||
|
||||
query predicate htmlElements(JSXElement e) { e.getNameExpr() instanceof Label }
|
||||
query predicate htmlElements(JsxElement e) { e.getNameExpr() instanceof Label }
|
||||
|
||||
query predicate jsxElementAttribute(JSXElement elt, int i, JSXAttribute attr) {
|
||||
query predicate jsxElementAttribute(JsxElement elt, int i, JsxAttribute attr) {
|
||||
attr = elt.getAttribute(i)
|
||||
}
|
||||
|
||||
query predicate jsxElementAttributeName(JSXElement elt, int i, string name) {
|
||||
query predicate jsxElementAttributeName(JsxElement elt, int i, string name) {
|
||||
name = elt.getAttribute(i).getName()
|
||||
}
|
||||
|
||||
query predicate jsxElementBody(JSXElement elt, int i, Expr body) { elt.getBodyElement(i) = body }
|
||||
query predicate jsxElementBody(JsxElement elt, int i, Expr body) { elt.getBodyElement(i) = body }
|
||||
|
||||
query predicate jsxElementName(JSXElement elt, JSXName nameExpr, string name) {
|
||||
query predicate jsxElementName(JsxElement elt, JsxName nameExpr, string name) {
|
||||
elt.getNameExpr() = nameExpr and
|
||||
name = elt.getName()
|
||||
}
|
||||
|
||||
query predicate jsxFragments(JSXFragment fragment, int i, Expr body) {
|
||||
query predicate jsxFragments(JsxFragment fragment, int i, Expr body) {
|
||||
fragment.getBodyElement(i) = body
|
||||
}
|
||||
|
||||
@@ -2,4 +2,4 @@ import javascript
|
||||
|
||||
query File files() { any() }
|
||||
|
||||
query PackageJSON packageJsons() { any() }
|
||||
query PackageJson packageJsons() { any() }
|
||||
|
||||
@@ -38,7 +38,7 @@ getMainModule
|
||||
| src/node_modules/d/package.json:1:1:4:1 | {\\n "na ... main"\\n} | d | src/node_modules/d/main.js:1:1:2:0 | <toplevel> |
|
||||
| src/node_modules/third-party-module/package.json:1:1:5:1 | {\\n "na ... y.js"\\n} | third-party-module | src/node_modules/third-party-module/fancy.js:1:1:4:0 | <toplevel> |
|
||||
| src/package.json:1:1:20:1 | {\\n "na ... "\\n }\\n} | test-package | src/index.js:1:1:4:0 | <toplevel> |
|
||||
packageJSON
|
||||
packageJson
|
||||
| src/node_modules/b/package.json:1:1:4:1 | {\\n "na ... "lib"\\n} |
|
||||
| src/node_modules/c/package.json:1:1:4:1 | {\\n "na ... src/"\\n} |
|
||||
| src/node_modules/d/package.json:1:1:4:1 | {\\n "na ... main"\\n} |
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import javascript
|
||||
import semmle.javascript.dependencies.Dependencies
|
||||
|
||||
query predicate dependencies(PackageJSON pkgjson, string pkg, string version) {
|
||||
query predicate dependencies(PackageJson pkgjson, string pkg, string version) {
|
||||
pkgjson.declaresDependency(pkg, version)
|
||||
}
|
||||
|
||||
@@ -9,22 +9,22 @@ query predicate importedFile(Require r, File f) { f = r.getImportedFile() }
|
||||
|
||||
query predicate importedModule(Require r, Module m) { m = r.getImportedModule() }
|
||||
|
||||
query predicate modules(NPMPackage pkg, string name, Module mod) {
|
||||
query predicate modules(NpmPackage pkg, string name, Module mod) {
|
||||
name = pkg.getPackageName() and
|
||||
mod = pkg.getAModule()
|
||||
}
|
||||
|
||||
query predicate npm(PackageJSON pkg, string name, string version) {
|
||||
query predicate npm(PackageJson pkg, string name, string version) {
|
||||
name = pkg.getPackageName() and
|
||||
version = pkg.getVersion()
|
||||
}
|
||||
|
||||
query predicate getMainModule(PackageJSON pkg, string name, Module mod) {
|
||||
query predicate getMainModule(PackageJson pkg, string name, Module mod) {
|
||||
name = pkg.getPackageName() and
|
||||
mod = pkg.getMainModule()
|
||||
}
|
||||
|
||||
query predicate packageJSON(PackageJSON json) { any() }
|
||||
query predicate packageJson(PackageJson json) { any() }
|
||||
|
||||
query predicate dependencyInfo(Dependency dep, string name, string version) {
|
||||
dep.info(name, version)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import semmle.javascript.SourceMaps
|
||||
|
||||
from SourceMappingComment smc
|
||||
select smc, smc.getSourceMappingURL()
|
||||
select smc, smc.getSourceMappingUrl()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import javascript
|
||||
|
||||
query predicate test_CallSignature(
|
||||
CallSignature call, string declType, ASTNode body, string abstractness
|
||||
CallSignature call, string declType, AstNode body, string abstractness
|
||||
) {
|
||||
(if call.isAbstract() then abstractness = "abstract" else abstractness = "not abstract") and
|
||||
declType = call.getDeclaringType().describe() and
|
||||
@@ -9,7 +9,7 @@ query predicate test_CallSignature(
|
||||
}
|
||||
|
||||
query predicate test_IndexSignature(
|
||||
IndexSignature sig, string declType, ASTNode body, string abstractness
|
||||
IndexSignature sig, string declType, AstNode body, string abstractness
|
||||
) {
|
||||
(if sig.isAbstract() then abstractness = "abstract" else abstractness = "not abstract") and
|
||||
declType = sig.getDeclaringType().describe() and
|
||||
|
||||
@@ -6,4 +6,4 @@ query predicate resolveableImport(Import imp, Module mod) {
|
||||
not mod.getTopLevel().isExterns()
|
||||
}
|
||||
|
||||
query Module getMain(PackageJSON json) { result = json.getMainModule() }
|
||||
query Module getMain(PackageJson json) { result = json.getMainModule() }
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import javascript
|
||||
|
||||
abstract class Violation extends ASTNode {
|
||||
abstract class Violation extends AstNode {
|
||||
abstract string reason();
|
||||
}
|
||||
|
||||
@@ -11,17 +11,17 @@ abstract class Violation extends ASTNode {
|
||||
* The assertion holds if `name1 = name2`, indicating that `X` resolved to the right interface.
|
||||
*/
|
||||
class TypeResolutionAssertion extends TupleTypeExpr, Violation {
|
||||
InterfaceDeclaration interface;
|
||||
LocalTypeAccess typeAccess;
|
||||
string expected;
|
||||
string actual;
|
||||
|
||||
TypeResolutionAssertion() {
|
||||
typeAccess = getElementType(0) and
|
||||
expected = getElementType(1).(StringLiteralTypeExpr).getValue() and
|
||||
typeAccess.getLocalTypeName() = interface.getIdentifier().(TypeDecl).getLocalTypeName() and
|
||||
actual = interface.getField("where").getTypeAnnotation().(StringLiteralTypeExpr).getValue() and
|
||||
actual != expected
|
||||
exists(InterfaceDeclaration interface, LocalTypeAccess typeAccess |
|
||||
typeAccess = getElementType(0) and
|
||||
expected = getElementType(1).(StringLiteralTypeExpr).getValue() and
|
||||
typeAccess.getLocalTypeName() = interface.getIdentifier().(TypeDecl).getLocalTypeName() and
|
||||
actual = interface.getField("where").getTypeAnnotation().(StringLiteralTypeExpr).getValue() and
|
||||
actual != expected
|
||||
)
|
||||
}
|
||||
|
||||
override string reason() {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import javascript
|
||||
|
||||
query predicate symbols(ASTNode astNode, CanonicalName symbol) { ast_node_symbol(astNode, symbol) }
|
||||
query predicate symbols(AstNode astNode, CanonicalName symbol) { ast_node_symbol(astNode, symbol) }
|
||||
|
||||
from Import imprt
|
||||
select imprt, imprt.getImportedModule()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import javascript
|
||||
|
||||
query predicate test_ChildIndex(ASTNode node, string res) {
|
||||
exists(ASTNode child1, ASTNode child2, int index |
|
||||
query predicate test_ChildIndex(AstNode node, string res) {
|
||||
exists(AstNode child1, AstNode child2, int index |
|
||||
node.getChild(index) = child1 and node.getChild(index) = child2 and child1 != child2
|
||||
|
|
||||
res = "There are two different children at index " + index.toString()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import javascript
|
||||
|
||||
abstract class Violation extends ASTNode {
|
||||
abstract class Violation extends AstNode {
|
||||
abstract string reason();
|
||||
}
|
||||
|
||||
|
||||
@@ -23,9 +23,7 @@ class ApiObject extends DataFlow::NewNode {
|
||||
}
|
||||
|
||||
class Connection extends DataFlow::SourceNode {
|
||||
ApiObject api;
|
||||
|
||||
Connection() { this = api.ref().getAMethodCall("createConnection") }
|
||||
Connection() { this = any(ApiObject api).ref().getAMethodCall("createConnection") }
|
||||
|
||||
DataFlow::SourceNode ref(DataFlow::TypeTracker t) {
|
||||
t.start() and
|
||||
@@ -49,9 +47,7 @@ class Connection extends DataFlow::SourceNode {
|
||||
}
|
||||
|
||||
class DataValue extends DataFlow::SourceNode {
|
||||
Connection connection;
|
||||
|
||||
DataValue() { this = connection.getACallback().getParameter(0) }
|
||||
DataValue() { this = any(Connection connection).getACallback().getParameter(0) }
|
||||
|
||||
DataFlow::SourceNode ref(DataFlow::TypeTracker t) {
|
||||
t.start() and
|
||||
|
||||
@@ -1,17 +1,20 @@
|
||||
import semmle.javascript.frameworks.React
|
||||
|
||||
query predicate test_JSXname(JSXElement element, JSXName jsxname, string name, string type) {
|
||||
query predicate test_JSXname(JsxElement element, JsxName jsxname, string name, string type) {
|
||||
name = jsxname.getValue() and
|
||||
(
|
||||
jsxname instanceof Identifier and type = "Identifier"
|
||||
or
|
||||
jsxname instanceof ThisExpr and type = "thisExpr"
|
||||
or
|
||||
jsxname.(DotExpr).getBase() instanceof JSXName and type = "dot"
|
||||
jsxname.(DotExpr).getBase() instanceof JsxName and type = "dot"
|
||||
or
|
||||
jsxname instanceof JSXQualifiedName and type = "qualifiedName"
|
||||
jsxname instanceof JsxQualifiedName and type = "qualifiedName"
|
||||
) and
|
||||
element.getNameExpr() = jsxname
|
||||
}
|
||||
|
||||
query ThisExpr test_JSXName_this(JSXElement element) { result.getParentExpr+() = element }
|
||||
query ThisExpr test_JsxName_this(JsxElement element) { result.getParentExpr+() = element }
|
||||
|
||||
/** DEPRECATED: Alias for test_JsxName_this */
|
||||
deprecated ThisExpr test_JSXName_this(JSXElement element) { result = test_JsxName_this(element) }
|
||||
|
||||
@@ -300,7 +300,7 @@ test_JSXname
|
||||
| useHigherOrderComponent.jsx:5:12:5:39 | <SomeCo ... "red"/> | useHigherOrderComponent.jsx:5:13:5:25 | SomeComponent | SomeComponent | Identifier |
|
||||
| useHigherOrderComponent.jsx:11:12:11:46 | <LazyLo ... lazy"/> | useHigherOrderComponent.jsx:11:13:11:31 | LazyLoadedComponent | LazyLoadedComponent | Identifier |
|
||||
| useHigherOrderComponent.jsx:17:12:17:48 | <LazyLo ... azy2"/> | useHigherOrderComponent.jsx:17:13:17:32 | LazyLoadedComponent2 | LazyLoadedComponent2 | Identifier |
|
||||
test_JSXName_this
|
||||
test_JsxName_this
|
||||
| es5.js:4:12:4:45 | <div>He ... }</div> | es5.js:4:24:4:27 | this |
|
||||
| es5.js:20:12:20:44 | <h1>Hel ... e}</h1> | es5.js:20:24:20:27 | this |
|
||||
| es6.js:3:12:3:45 | <div>He ... }</div> | es6.js:3:24:3:27 | this |
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
import javascript
|
||||
|
||||
query predicate punycode(DataFlow::Node n) { n = punycode::punycodeMember(_) }
|
||||
query predicate punycode(DataFlow::Node n) { n = Punycode::punycodeMember(_) }
|
||||
|
||||
query predicate querydashstring(DataFlow::Node n) { n = querydashstring::querydashstringMember(_) }
|
||||
query predicate querydashstring(DataFlow::Node n) { n = Querydashstring::querydashstringMember(_) }
|
||||
|
||||
query predicate querystring(DataFlow::Node n) { n = querystring::querystringMember(_) }
|
||||
query predicate querystring(DataFlow::Node n) { n = Querystring::querystringMember(_) }
|
||||
|
||||
query predicate querystringify(DataFlow::Node n) { n = querystringify::querystringifyMember(_) }
|
||||
query predicate querystringify(DataFlow::Node n) { n = Querystringify::querystringifyMember(_) }
|
||||
|
||||
query predicate uridashjs(DataFlow::Node n) { n = uridashjs::uridashjsMember(_) }
|
||||
query predicate uridashjs(DataFlow::Node n) { n = Uridashjs::uridashjsMember(_) }
|
||||
|
||||
query predicate urijs(DataFlow::Node n) { n = urijs::urijs() }
|
||||
query predicate urijs(DataFlow::Node n) { n = Urijs::urijs() }
|
||||
|
||||
query predicate uriLibraryStep(DataFlow::Node pred, DataFlow::Node succ) {
|
||||
TaintTracking::uriStep(pred, succ)
|
||||
}
|
||||
|
||||
query predicate url(DataFlow::Node n) { n = url::urlMember(_) }
|
||||
query predicate url(DataFlow::Node n) { n = Url::urlMember(_) }
|
||||
|
||||
query predicate urlParse(DataFlow::Node n) { n = urlParse::urlParse() }
|
||||
query predicate urlParse(DataFlow::Node n) { n = UrlParse::urlParse() }
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
WARNING: Type JQueryMethodCall has been deprecated and may be removed in future (JQueryMethodCall.ql:3,6-22)
|
||||
| tracking.js:7:5:7:24 | this.elm.html('foo') | html |
|
||||
| tracking.js:14:5:14:17 | e.html('foo') | html |
|
||||
| tracking.js:15:5:15:26 | e.attr( ... 'foo') | attr |
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import javascript
|
||||
|
||||
from JQueryMethodCall jqmc
|
||||
from JQuery::MethodCall jqmc
|
||||
select jqmc, jqmc.getMethodName()
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
WARNING: Type JQueryMethodCall has been deprecated and may be removed in future (interpretsArgumentAsHtml.ql:3,6-22)
|
||||
| tracking.js:7:5:7:24 | this.elm.html('foo') | tracking.js:7:19:7:23 | 'foo' |
|
||||
| tracking.js:14:5:14:17 | e.html('foo') | tracking.js:14:12:14:16 | 'foo' |
|
||||
| tracking.js:23:7:23:15 | $('#foo') | tracking.js:23:9:23:14 | '#foo' |
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import javascript
|
||||
|
||||
from JQueryMethodCall mc, Expr e
|
||||
where mc.interpretsArgumentAsHtml(e)
|
||||
select mc, e
|
||||
from JQuery::MethodCall mc, DataFlow::Node node
|
||||
where mc.interpretsArgumentAsHtml(node)
|
||||
select mc, node
|
||||
|
||||
@@ -52,6 +52,11 @@ nodes
|
||||
| child_process-test.js:83:19:83:36 | req.query.fileName |
|
||||
| child_process-test.js:85:37:85:54 | req.query.fileName |
|
||||
| child_process-test.js:85:37:85:54 | req.query.fileName |
|
||||
| child_process-test.js:94:11:94:35 | "ping " ... ms.host |
|
||||
| child_process-test.js:94:11:94:35 | "ping " ... ms.host |
|
||||
| child_process-test.js:94:21:94:30 | ctx.params |
|
||||
| child_process-test.js:94:21:94:30 | ctx.params |
|
||||
| child_process-test.js:94:21:94:35 | ctx.params.host |
|
||||
| exec-sh2.js:9:17:9:23 | command |
|
||||
| exec-sh2.js:10:40:10:46 | command |
|
||||
| exec-sh2.js:10:40:10:46 | command |
|
||||
@@ -229,6 +234,10 @@ edges
|
||||
| child_process-test.js:83:19:83:36 | req.query.fileName | child_process-test.js:83:19:83:36 | req.query.fileName |
|
||||
| child_process-test.js:85:37:85:54 | req.query.fileName | lib/subLib/index.js:7:32:7:35 | name |
|
||||
| child_process-test.js:85:37:85:54 | req.query.fileName | lib/subLib/index.js:7:32:7:35 | name |
|
||||
| child_process-test.js:94:21:94:30 | ctx.params | child_process-test.js:94:21:94:35 | ctx.params.host |
|
||||
| child_process-test.js:94:21:94:30 | ctx.params | child_process-test.js:94:21:94:35 | ctx.params.host |
|
||||
| child_process-test.js:94:21:94:35 | ctx.params.host | child_process-test.js:94:11:94:35 | "ping " ... ms.host |
|
||||
| child_process-test.js:94:21:94:35 | ctx.params.host | child_process-test.js:94:11:94:35 | "ping " ... ms.host |
|
||||
| exec-sh2.js:9:17:9:23 | command | exec-sh2.js:10:40:10:46 | command |
|
||||
| exec-sh2.js:9:17:9:23 | command | exec-sh2.js:10:40:10:46 | command |
|
||||
| exec-sh2.js:14:9:14:49 | cmd | exec-sh2.js:15:12:15:14 | cmd |
|
||||
@@ -365,6 +374,7 @@ edges
|
||||
| child_process-test.js:67:3:67:21 | cp.spawn(cmd, args) | child_process-test.js:6:25:6:31 | req.url | child_process-test.js:48:15:48:17 | cmd | This command depends on $@. | child_process-test.js:6:25:6:31 | req.url | a user-provided value |
|
||||
| child_process-test.js:75:29:75:31 | cmd | child_process-test.js:73:25:73:31 | req.url | child_process-test.js:75:29:75:31 | cmd | This command depends on $@. | child_process-test.js:73:25:73:31 | req.url | a user-provided value |
|
||||
| child_process-test.js:83:19:83:36 | req.query.fileName | child_process-test.js:83:19:83:36 | req.query.fileName | child_process-test.js:83:19:83:36 | req.query.fileName | This command depends on $@. | child_process-test.js:83:19:83:36 | req.query.fileName | a user-provided value |
|
||||
| child_process-test.js:94:11:94:35 | "ping " ... ms.host | child_process-test.js:94:21:94:30 | ctx.params | child_process-test.js:94:11:94:35 | "ping " ... ms.host | This command depends on $@. | child_process-test.js:94:21:94:30 | ctx.params | a user-provided value |
|
||||
| exec-sh2.js:10:12:10:57 | cp.spaw ... ptions) | exec-sh2.js:14:25:14:31 | req.url | exec-sh2.js:10:40:10:46 | command | This command depends on $@. | exec-sh2.js:14:25:14:31 | req.url | a user-provided value |
|
||||
| exec-sh.js:15:12:15:61 | cp.spaw ... ptions) | exec-sh.js:19:25:19:31 | req.url | exec-sh.js:15:44:15:50 | command | This command depends on $@. | exec-sh.js:19:25:19:31 | req.url | a user-provided value |
|
||||
| execSeries.js:14:41:14:47 | command | execSeries.js:18:34:18:40 | req.url | execSeries.js:14:41:14:47 | command | This command depends on $@. | execSeries.js:18:34:18:40 | req.url | a user-provided value |
|
||||
|
||||
@@ -85,4 +85,11 @@ new webpackDevServer(compiler, {
|
||||
require("my-sub-lib").foo(req.query.fileName); // calls lib/subLib/index.js#foo
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
import Router from "koa-router";
|
||||
const router = new Router();
|
||||
|
||||
router.get("/ping/:host", async (ctx) => {
|
||||
cp.exec("ping " + ctx.params.host); // NOT OK
|
||||
});
|
||||
@@ -8,3 +8,4 @@
|
||||
| tst.js:39:2:39:29 | rejectU ... ndirect | Disabling certificate validation is strongly discouraged. |
|
||||
| tst.js:45:2:45:28 | rejectU ... !!false | Disabling certificate validation is strongly discouraged. |
|
||||
| tst.js:48:2:48:26 | rejectU ... : !true | Disabling certificate validation is strongly discouraged. |
|
||||
| tst.js:74:9:74:33 | rejectU ... : false | Disabling certificate validation is strongly discouraged. |
|
||||
|
||||
@@ -68,3 +68,10 @@ new https.Agent({
|
||||
new https.Agent({
|
||||
rejectUnauthorized: typeof getOptions().rejectUnauthorized === 'boolean' ? getOptions().rejectUnauthorized : undefined // OK
|
||||
});
|
||||
|
||||
function getSomeunsafeOptions() {
|
||||
return {
|
||||
rejectUnauthorized: false // NOT OK
|
||||
}
|
||||
}
|
||||
new https.Agent(getSomeunsafeOptions());
|
||||
@@ -1,8 +1,8 @@
|
||||
import javascript
|
||||
|
||||
query predicate test_query19(PackageDependencies deps, string res) {
|
||||
exists(NPMPackage pkg, string name |
|
||||
deps = pkg.getPackageJSON().getDependencies() and
|
||||
exists(NpmPackage pkg, string name |
|
||||
deps = pkg.getPackageJson().getDependencies() and
|
||||
deps.getADependency(name, _) and
|
||||
not exists(Require req | req.getTopLevel() = pkg.getAModule() |
|
||||
name = req.getImportedPath().getValue()
|
||||
|
||||
@@ -9,17 +9,17 @@ import javascript
|
||||
import Osprey
|
||||
import RAML
|
||||
|
||||
RAMLMethod getSpecification(OspreyMethod om) {
|
||||
exists(RAMLResource rr, File f, string rPath |
|
||||
RamlMethod getSpecification(OspreyMethod om) {
|
||||
exists(RamlResource rr, File f, string rPath |
|
||||
rr.getLocation().getFile() = f and
|
||||
f = om.getDefinition().getAPI().getSpecFile() and
|
||||
f = om.getDefinition().getApi().getSpecFile() and
|
||||
rPath = om.getResourcePath() and
|
||||
rr.getPath() = rPath.regexpReplaceAll("/:([^/]+)/", "/{$1}/") and
|
||||
result = rr.getMethod(om.getVerb())
|
||||
)
|
||||
}
|
||||
|
||||
from MethodResponseSetStatus mrss, RAMLMethod rm
|
||||
from MethodResponseSetStatus mrss, RamlMethod rm
|
||||
where
|
||||
rm = getSpecification(mrss.getMethod()) and
|
||||
not exists(rm.getResponse(mrss.getStatusCode()))
|
||||
|
||||
@@ -13,8 +13,8 @@ class Osprey extends Variable {
|
||||
}
|
||||
|
||||
/** A call to `osprey.create`. */
|
||||
class OspreyCreateAPICall extends MethodCallExpr {
|
||||
OspreyCreateAPICall() {
|
||||
class OspreyCreateApiCall extends MethodCallExpr {
|
||||
OspreyCreateApiCall() {
|
||||
getReceiver().(VarAccess).getVariable() instanceof Osprey and
|
||||
getMethodName() = "create"
|
||||
}
|
||||
@@ -29,22 +29,31 @@ class OspreyCreateAPICall extends MethodCallExpr {
|
||||
}
|
||||
}
|
||||
|
||||
/** A variable in which an Osprey API object is stored. */
|
||||
class OspreyAPI extends Variable {
|
||||
OspreyAPI() { getAnAssignedExpr() instanceof OspreyCreateAPICall }
|
||||
/** DEPRECATED: Alias for OspreyCreateApiCall */
|
||||
deprecated class OspreyCreateAPICall = OspreyCreateApiCall;
|
||||
|
||||
File getSpecFile() { result = getAnAssignedExpr().(OspreyCreateAPICall).getSpecFile() }
|
||||
/** A variable in which an Osprey API object is stored. */
|
||||
class OspreyApi extends Variable {
|
||||
OspreyApi() { getAnAssignedExpr() instanceof OspreyCreateApiCall }
|
||||
|
||||
File getSpecFile() { result = getAnAssignedExpr().(OspreyCreateApiCall).getSpecFile() }
|
||||
}
|
||||
|
||||
/** DEPRECATED: Alias for OspreyApi */
|
||||
deprecated class OspreyAPI = OspreyApi;
|
||||
|
||||
/** An Osprey REST method definition. */
|
||||
class OspreyMethodDefinition extends MethodCallExpr {
|
||||
OspreyMethodDefinition() {
|
||||
exists(OspreyAPI api | getReceiver() = api.getAnAccess()) and
|
||||
exists(OspreyApi api | getReceiver() = api.getAnAccess()) and
|
||||
getMethodName() = httpVerb()
|
||||
}
|
||||
|
||||
/** Get the API to which this method belongs. */
|
||||
OspreyAPI getAPI() { getReceiver() = result.getAnAccess() }
|
||||
OspreyApi getApi() { getReceiver() = result.getAnAccess() }
|
||||
|
||||
/** DEPRECATED: Alias for getApi */
|
||||
deprecated OspreyAPI getAPI() { result = getApi() }
|
||||
|
||||
/** Get the verb which this method implements. */
|
||||
string getVerb() { result = getMethodName() }
|
||||
|
||||
@@ -3,14 +3,17 @@ import javascript
|
||||
import HTTP
|
||||
|
||||
/** A RAML specification. */
|
||||
class RAMLSpec extends YAMLDocument, YAMLMapping {
|
||||
RAMLSpec() { getLocation().getFile().getExtension() = "raml" }
|
||||
class RamlSpec extends YAMLDocument, YAMLMapping {
|
||||
RamlSpec() { getLocation().getFile().getExtension() = "raml" }
|
||||
}
|
||||
|
||||
/** DEPRECATED: Alias for RamlSpec */
|
||||
deprecated class RAMLSpec = RamlSpec;
|
||||
|
||||
/** A RAML resource specification. */
|
||||
class RAMLResource extends YAMLMapping {
|
||||
RAMLResource() {
|
||||
getDocument() instanceof RAMLSpec and
|
||||
class RamlResource extends YAMLMapping {
|
||||
RamlResource() {
|
||||
getDocument() instanceof RamlSpec and
|
||||
exists(YAMLMapping m, string name |
|
||||
this = m.lookup(name) and
|
||||
name.matches("/%")
|
||||
@@ -19,25 +22,28 @@ class RAMLResource extends YAMLMapping {
|
||||
|
||||
/** Get the path of this resource relative to the API root. */
|
||||
string getPath() {
|
||||
exists(RAMLSpec spec | this = spec.lookup(result))
|
||||
exists(RamlSpec spec | this = spec.lookup(result))
|
||||
or
|
||||
exists(RAMLResource that, string p |
|
||||
exists(RamlResource that, string p |
|
||||
this = that.lookup(p) and
|
||||
result = that.getPath() + p
|
||||
)
|
||||
}
|
||||
|
||||
/** Get the method for this resource with the given verb. */
|
||||
RAMLMethod getMethod(string verb) {
|
||||
RamlMethod getMethod(string verb) {
|
||||
verb = httpVerb() and
|
||||
result = lookup(verb)
|
||||
}
|
||||
}
|
||||
|
||||
/** DEPRECATED: Alias for RamlResource */
|
||||
deprecated class RAMLResource = RamlResource;
|
||||
|
||||
/** A RAML method specification. */
|
||||
class RAMLMethod extends YAMLValue {
|
||||
RAMLMethod() {
|
||||
getDocument() instanceof RAMLSpec and
|
||||
class RamlMethod extends YAMLValue {
|
||||
RamlMethod() {
|
||||
getDocument() instanceof RamlSpec and
|
||||
exists(YAMLMapping obj | this = obj.lookup(httpVerb()))
|
||||
}
|
||||
|
||||
@@ -50,3 +56,6 @@ class RAMLMethod extends YAMLValue {
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/** DEPRECATED: Alias for RamlMethod */
|
||||
deprecated class RAMLMethod = RamlMethod;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import javascript
|
||||
|
||||
/** A RAML specification. */
|
||||
class RAMLSpec extends YAMLDocument, YAMLMapping {
|
||||
RAMLSpec() { getLocation().getFile().getExtension() = "raml" }
|
||||
class RamlSpec extends YAMLDocument, YAMLMapping {
|
||||
RamlSpec() { getLocation().getFile().getExtension() = "raml" }
|
||||
}
|
||||
|
||||
from RAMLSpec s
|
||||
from RamlSpec s
|
||||
select s
|
||||
|
||||
@@ -3,14 +3,14 @@ import javascript
|
||||
string httpVerb() { result = ["get", "put", "post", "delete"] }
|
||||
|
||||
/** A RAML specification. */
|
||||
class RAMLSpec extends YAMLDocument, YAMLMapping {
|
||||
RAMLSpec() { getLocation().getFile().getExtension() = "raml" }
|
||||
class RamlSpec extends YAMLDocument, YAMLMapping {
|
||||
RamlSpec() { getLocation().getFile().getExtension() = "raml" }
|
||||
}
|
||||
|
||||
/** A RAML resource specification. */
|
||||
class RAMLResource extends YAMLMapping {
|
||||
RAMLResource() {
|
||||
getDocument() instanceof RAMLSpec and
|
||||
class RamlResource extends YAMLMapping {
|
||||
RamlResource() {
|
||||
getDocument() instanceof RamlSpec and
|
||||
exists(YAMLMapping m, string name |
|
||||
this = m.lookup(name) and
|
||||
name.matches("/%")
|
||||
@@ -19,25 +19,25 @@ class RAMLResource extends YAMLMapping {
|
||||
|
||||
/** Get the path of this resource relative to the API root. */
|
||||
string getPath() {
|
||||
exists(RAMLSpec spec | this = spec.lookup(result))
|
||||
exists(RamlSpec spec | this = spec.lookup(result))
|
||||
or
|
||||
exists(RAMLResource that, string p |
|
||||
exists(RamlResource that, string p |
|
||||
this = that.lookup(p) and
|
||||
result = that.getPath() + p
|
||||
)
|
||||
}
|
||||
|
||||
/** Get the method for this resource with the given verb. */
|
||||
RAMLMethod getMethod(string verb) {
|
||||
RamlMethod getMethod(string verb) {
|
||||
verb = httpVerb() and
|
||||
result = lookup(verb)
|
||||
}
|
||||
}
|
||||
|
||||
/** A RAML method specification. */
|
||||
class RAMLMethod extends YAMLValue {
|
||||
RAMLMethod() {
|
||||
getDocument() instanceof RAMLSpec and
|
||||
class RamlMethod extends YAMLValue {
|
||||
RamlMethod() {
|
||||
getDocument() instanceof RamlSpec and
|
||||
exists(YAMLMapping obj | this = obj.lookup(httpVerb()))
|
||||
}
|
||||
|
||||
@@ -51,5 +51,5 @@ class RAMLMethod extends YAMLValue {
|
||||
}
|
||||
}
|
||||
|
||||
from RAMLResource rr
|
||||
from RamlResource rr
|
||||
select rr, rr.getPath()
|
||||
|
||||
@@ -3,14 +3,14 @@ import javascript
|
||||
string httpVerb() { result = ["get", "put", "post", "delete"] }
|
||||
|
||||
/** A RAML specification. */
|
||||
class RAMLSpec extends YAMLDocument, YAMLMapping {
|
||||
RAMLSpec() { getLocation().getFile().getExtension() = "raml" }
|
||||
class RamlSpec extends YAMLDocument, YAMLMapping {
|
||||
RamlSpec() { getLocation().getFile().getExtension() = "raml" }
|
||||
}
|
||||
|
||||
/** A RAML resource specification. */
|
||||
class RAMLResource extends YAMLMapping {
|
||||
RAMLResource() {
|
||||
getDocument() instanceof RAMLSpec and
|
||||
class RamlResource extends YAMLMapping {
|
||||
RamlResource() {
|
||||
getDocument() instanceof RamlSpec and
|
||||
exists(YAMLMapping m, string name |
|
||||
this = m.lookup(name) and
|
||||
name.matches("/%")
|
||||
@@ -19,24 +19,24 @@ class RAMLResource extends YAMLMapping {
|
||||
|
||||
/** Get the path of this resource relative to the API root. */
|
||||
string getPath() {
|
||||
exists(RAMLSpec spec | this = spec.lookup(result))
|
||||
exists(RamlSpec spec | this = spec.lookup(result))
|
||||
or
|
||||
exists(RAMLResource that, string p |
|
||||
exists(RamlResource that, string p |
|
||||
this = that.lookup(p) and
|
||||
result = that.getPath() + p
|
||||
)
|
||||
}
|
||||
|
||||
/** Get the method for this resource with the given verb. */
|
||||
RAMLMethod getMethod(string verb) {
|
||||
RamlMethod getMethod(string verb) {
|
||||
verb = httpVerb() and
|
||||
result = lookup(verb)
|
||||
}
|
||||
}
|
||||
|
||||
class RAMLMethod extends YAMLValue {
|
||||
RAMLMethod() {
|
||||
getDocument() instanceof RAMLSpec and
|
||||
class RamlMethod extends YAMLValue {
|
||||
RamlMethod() {
|
||||
getDocument() instanceof RamlSpec and
|
||||
exists(YAMLMapping obj | this = obj.lookup(httpVerb()))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,14 +3,14 @@ import javascript
|
||||
string httpVerb() { result = ["get", "put", "post", "delete"] }
|
||||
|
||||
/** A RAML specification. */
|
||||
class RAMLSpec extends YAMLDocument, YAMLMapping {
|
||||
RAMLSpec() { getLocation().getFile().getExtension() = "raml" }
|
||||
class RamlSpec extends YAMLDocument, YAMLMapping {
|
||||
RamlSpec() { getLocation().getFile().getExtension() = "raml" }
|
||||
}
|
||||
|
||||
/** A RAML resource specification. */
|
||||
class RAMLResource extends YAMLMapping {
|
||||
RAMLResource() {
|
||||
getDocument() instanceof RAMLSpec and
|
||||
class RamlResource extends YAMLMapping {
|
||||
RamlResource() {
|
||||
getDocument() instanceof RamlSpec and
|
||||
exists(YAMLMapping m, string name |
|
||||
this = m.lookup(name) and
|
||||
name.matches("/%")
|
||||
@@ -19,25 +19,25 @@ class RAMLResource extends YAMLMapping {
|
||||
|
||||
/** Get the path of this resource relative to the API root. */
|
||||
string getPath() {
|
||||
exists(RAMLSpec spec | this = spec.lookup(result))
|
||||
exists(RamlSpec spec | this = spec.lookup(result))
|
||||
or
|
||||
exists(RAMLResource that, string p |
|
||||
exists(RamlResource that, string p |
|
||||
this = that.lookup(p) and
|
||||
result = that.getPath() + p
|
||||
)
|
||||
}
|
||||
|
||||
/** Get the method for this resource with the given verb. */
|
||||
RAMLMethod getMethod(string verb) {
|
||||
RamlMethod getMethod(string verb) {
|
||||
verb = httpVerb() and
|
||||
result = lookup(verb)
|
||||
}
|
||||
}
|
||||
|
||||
/** A RAML method specification. */
|
||||
class RAMLMethod extends YAMLValue {
|
||||
RAMLMethod() {
|
||||
getDocument() instanceof RAMLSpec and
|
||||
class RamlMethod extends YAMLValue {
|
||||
RamlMethod() {
|
||||
getDocument() instanceof RamlSpec and
|
||||
exists(YAMLMapping obj | this = obj.lookup(httpVerb()))
|
||||
}
|
||||
|
||||
@@ -51,5 +51,5 @@ class RAMLMethod extends YAMLValue {
|
||||
}
|
||||
}
|
||||
|
||||
from RAMLMethod m
|
||||
from RamlMethod m
|
||||
select m
|
||||
|
||||
Reference in New Issue
Block a user