Merge pull request #4434 from erik-krogh/printAST

Approved by asgerf
This commit is contained in:
CodeQL CI
2020-10-19 04:42:42 -07:00
committed by GitHub
28 changed files with 6738 additions and 29 deletions

View File

@@ -0,0 +1,28 @@
/**
* @name Print AST
* @description Outputs a representation of a file's Abstract Syntax Tree. This
* query is used by the VS Code extension.
* @id js/print-ast
* @kind graph
* @tags ide-contextual-queries/print-ast
*/
import javascript
import semmle.javascript.PrintAst
import definitions
/**
* The source file to generate an AST from.
*/
external string selectedSourceFile();
class PrintAstConfigurationOverride extends PrintAstConfiguration {
/**
* Holds if the location matches the selected file in the VS Code extension and
* the element is not a synthetic constructor.
*/
override predicate shouldPrint(Locatable e, Location l) {
super.shouldPrint(e, l) and
l.getFile() = getEncodedFile(selectedSourceFile())
}
}

View File

@@ -256,6 +256,8 @@ class ClassDefinition extends @class_definition, ClassOrInterface, AST::ValueNod
ClassDefinition getSuperClassDefinition() {
result = getSuperClass().analyze().getAValue().(AbstractClass).getClass()
}
override string getAPrimaryQlClass() { result = "ClassDefinition" }
}
/**
@@ -342,6 +344,8 @@ private class ClassInitializedMember extends MemberDeclaration {
ClassInitializedMember() { this instanceof MethodDefinition or this.isStatic() }
int getIndex() { properties(this, _, result, _, _) }
override string getAPrimaryQlClass() { result = "ClassInitializedMember" }
}
/**
@@ -361,6 +365,8 @@ class SuperExpr extends @super_expr, Expr {
* which is the nearest enclosing non-arrow function.
*/
Function getBinder() { result = getEnclosingFunction().getThisBinder() }
override string getAPrimaryQlClass() { result = "SuperExpr" }
}
/**
@@ -412,6 +418,8 @@ class SuperPropAccess extends PropAccess {
*/
class NewTargetExpr extends @newtarget_expr, Expr {
override predicate isImpure() { none() }
override string getAPrimaryQlClass() { result = "NewTargetExpr" }
}
/**
@@ -574,6 +582,8 @@ class MemberDeclaration extends @property, Documentable {
* True if this is abstract, ambient, or an overload signature.
*/
predicate isSignature() { not isConcrete() }
override string getAPrimaryQlClass() { result = "MemberDeclaration" }
}
/**
@@ -748,7 +758,9 @@ private predicate hasOverloadedConstructorCallSignature(ClassOrInterface type) {
* }
* ```
*/
class MethodDefinition extends MethodDeclaration, MemberDefinition { }
class MethodDefinition extends MethodDeclaration, MemberDefinition {
override string getAPrimaryQlClass() { result = "MethodDefinition" }
}
/**
* A method signature declared in a class or interface, that is, a method without a function body.
@@ -763,7 +775,9 @@ class MethodDefinition extends MethodDeclaration, MemberDefinition { }
*
* Note that TypeScript call signatures are not considered method signatures.
*/
class MethodSignature extends MethodDeclaration, MemberSignature { }
class MethodSignature extends MethodDeclaration, MemberSignature {
override string getAPrimaryQlClass() { result = "MethodSignature" }
}
/**
* A constructor declaration in a class, either a concrete definition or a signature without a body.
@@ -792,6 +806,8 @@ class ConstructorDeclaration extends MethodDeclaration {
/** Holds if this is a synthetic default constructor. */
predicate isSynthetic() { getLocation().isEmpty() }
override string getAPrimaryQlClass() { result = "ConstructorDeclaration" }
}
/**
@@ -813,7 +829,9 @@ class ConstructorDeclaration extends MethodDeclaration {
* }
* ```
*/
class ConstructorDefinition extends ConstructorDeclaration, MethodDefinition { }
class ConstructorDefinition extends ConstructorDeclaration, MethodDefinition {
override string getAPrimaryQlClass() { result = "ConstructorDefinition" }
}
/**
* A constructor signature declared in a class, that is, a constructor without a function body.
@@ -824,7 +842,9 @@ class ConstructorDefinition extends ConstructorDeclaration, MethodDefinition { }
* }
* ```
*/
class ConstructorSignature extends ConstructorDeclaration, MethodSignature { }
class ConstructorSignature extends ConstructorDeclaration, MethodSignature {
override string getAPrimaryQlClass() { result = "ConstructorSignature" }
}
/**
* A function generated by the extractor to implement a synthetic default constructor.
@@ -925,7 +945,9 @@ abstract class AccessorMethodSignature extends MethodSignature, AccessorMethodDe
* }
* ```
*/
class GetterMethodDeclaration extends AccessorMethodDeclaration, @property_getter { }
class GetterMethodDeclaration extends AccessorMethodDeclaration, @property_getter {
override string getAPrimaryQlClass() { result = "GetterMethodDeclaration" }
}
/**
* A concrete getter method definition in a class, that is, a getter method with a function body.
@@ -945,7 +967,9 @@ class GetterMethodDeclaration extends AccessorMethodDeclaration, @property_gette
* }
* ```
*/
class GetterMethodDefinition extends GetterMethodDeclaration, AccessorMethodDefinition { }
class GetterMethodDefinition extends GetterMethodDeclaration, AccessorMethodDefinition {
override string getAPrimaryQlClass() { result = "GetterMethodDefinition" }
}
/**
* A getter method signature declared in a class or interface, that is, a getter method without a function body.
@@ -958,7 +982,9 @@ class GetterMethodDefinition extends GetterMethodDeclaration, AccessorMethodDefi
* }
* ```
*/
class GetterMethodSignature extends GetterMethodDeclaration, AccessorMethodSignature { }
class GetterMethodSignature extends GetterMethodDeclaration, AccessorMethodSignature {
override string getAPrimaryQlClass() { result = "GetterMethodSignature" }
}
/**
* A setter method declaration in a class or interface, either a concrete definition or a signature without a body.
@@ -981,7 +1007,9 @@ class GetterMethodSignature extends GetterMethodDeclaration, AccessorMethodSigna
* }
* ```
*/
class SetterMethodDeclaration extends AccessorMethodDeclaration, @property_setter { }
class SetterMethodDeclaration extends AccessorMethodDeclaration, @property_setter {
override string getAPrimaryQlClass() { result = "SetterMethodDeclaration" }
}
/**
* A concrete setter method definition in a class, that is, a setter method with a function body
@@ -1000,7 +1028,9 @@ class SetterMethodDeclaration extends AccessorMethodDeclaration, @property_sette
* }
* ```
*/
class SetterMethodDefinition extends SetterMethodDeclaration, AccessorMethodDefinition { }
class SetterMethodDefinition extends SetterMethodDeclaration, AccessorMethodDefinition {
override string getAPrimaryQlClass() { result = "SetterMethodDefinition" }
}
/**
* A setter method signature declared in a class or interface, that is, a setter method without a function body.
@@ -1013,7 +1043,9 @@ class SetterMethodDefinition extends SetterMethodDeclaration, AccessorMethodDefi
* }
* ```
*/
class SetterMethodSignature extends SetterMethodDeclaration, AccessorMethodSignature { }
class SetterMethodSignature extends SetterMethodDeclaration, AccessorMethodSignature {
override string getAPrimaryQlClass() { result = "SetterMethodSignature" }
}
/**
* A field declaration in a class or interface, either a concrete definition or an abstract or ambient field signature.
@@ -1047,6 +1079,8 @@ class FieldDeclaration extends MemberDeclaration, @field {
/** Holds if this is a TypeScript field marked as definitely assigned with the `!` operator. */
predicate hasDefiniteAssignmentAssertion() { has_definite_assignment_assertion(this) }
override string getAPrimaryQlClass() { result = "FieldDeclaration" }
}
/**
@@ -1203,4 +1237,6 @@ class IndexSignature extends @index_signature, MemberSignature {
override InterfaceDefinition getDeclaringType() {
result = MemberSignature.super.getDeclaringType()
}
override string getAPrimaryQlClass() { result = "IndexSignature" }
}

View File

@@ -79,6 +79,8 @@ class ImportDeclaration extends Stmt, Import, @import_declaration {
/** Holds if this is declared with the `type` keyword, so it only imports types. */
predicate isTypeOnly() { has_type_keyword(this) }
override string getAPrimaryQlClass() { result = "ImportDeclaration" }
}
/** A literal path expression appearing in an `import` declaration. */
@@ -129,6 +131,8 @@ class ImportSpecifier extends Expr, @import_specifier {
/** Gets the local variable into which this specifier imports. */
VarDecl getLocal() { result = getChildExpr(1) }
override string getAPrimaryQlClass() { result = "ImportSpecifier" }
}
/**
@@ -262,6 +266,8 @@ abstract class ExportDeclaration extends Stmt, @export_declaration {
/** Holds if is declared with the `type` keyword, so only types are exported. */
predicate isTypeOnly() { has_type_keyword(this) }
override string getAPrimaryQlClass() { result = "ExportDeclaration" }
}
/**
@@ -511,6 +517,8 @@ class ExportSpecifier extends Expr, @exportspecifier {
* an exported name since it does not export a unique symbol.
*/
string getExportedName() { result = getExported().getName() }
override string getAPrimaryQlClass() { result = "ExportSpecifier" }
}
/**

View File

@@ -273,6 +273,8 @@ private DataFlow::Node getCatchParameterFromStmt(Stmt stmt) {
class Identifier extends @identifier, ExprOrType {
/** Gets the name of this identifier. */
string getName() { literals(result, _, this) }
override string getAPrimaryQlClass() { result = "Identifier" }
}
/**
@@ -290,6 +292,8 @@ class Identifier extends @identifier, ExprOrType {
*/
class Label extends @label, Identifier, Expr {
override predicate isImpure() { none() }
override string getAPrimaryQlClass() { result = "Label" }
}
/**
@@ -317,6 +321,8 @@ class Literal extends @literal, Expr {
string getRawValue() { literals(_, result, this) }
override predicate isImpure() { none() }
override string getAPrimaryQlClass() { result = "Literal" }
}
/**
@@ -341,6 +347,8 @@ class ParExpr extends @par_expr, Expr {
override Expr getUnderlyingValue() { result = getExpression().getUnderlyingValue() }
override Expr getUnderlyingReference() { result = getExpression().getUnderlyingReference() }
override string getAPrimaryQlClass() { result = "ParExpr" }
}
/**
@@ -462,6 +470,8 @@ class RegExpLiteral extends @regexp_literal, Literal, RegExpParent {
/** Holds if this regular expression has an `s` flag. */
predicate isDotAll() { RegExp::isDotAll(getFlags()) }
override string getAPrimaryQlClass() { result = "RegExpLiteral" }
}
/**
@@ -491,6 +501,8 @@ class ThisExpr extends @this_expr, Expr {
or
result = getContainer().(TopLevel)
}
override string getAPrimaryQlClass() { result = "ThisExpr" }
}
/**
@@ -528,6 +540,8 @@ class ArrayExpr extends @array_expr, Expr {
predicate hasOmittedElement() { elementIsOmitted(_) }
override predicate isImpure() { getAnElement().isImpure() }
override string getAPrimaryQlClass() { result = "ArrayExpr" }
}
/**
@@ -568,6 +582,8 @@ class ObjectExpr extends @obj_expr, Expr {
predicate hasTrailingComma() { this.getLastToken().getPreviousToken().getValue() = "," }
override predicate isImpure() { getAProperty().isImpure() }
override string getAPrimaryQlClass() { result = "ObjectExpr" }
}
/**
@@ -668,6 +684,8 @@ class Property extends @property, Documentable {
* decorators `@A` and `@B`.
*/
Decorator getADecorator() { result = getDecorator(_) }
override string getAPrimaryQlClass() { result = "Property" }
}
/**
@@ -791,6 +809,8 @@ class FunctionExpr extends @function_expr, Expr, Function {
override StmtContainer getEnclosingContainer() { result = Expr.super.getContainer() }
override predicate isImpure() { none() }
override string getAPrimaryQlClass() { result = "FunctionExpr" }
}
/**
@@ -811,6 +831,8 @@ class ArrowFunctionExpr extends @arrow_function_expr, Expr, Function {
override predicate isImpure() { none() }
override Function getThisBinder() { result = getEnclosingContainer().(Function).getThisBinder() }
override string getAPrimaryQlClass() { result = "ArrowFunctionExpr" }
}
/**
@@ -838,6 +860,8 @@ class SeqExpr extends @seq_expr, Expr {
override predicate isImpure() { getAnOperand().isImpure() }
override Expr getUnderlyingValue() { result = getLastOperand().getUnderlyingValue() }
override string getAPrimaryQlClass() { result = "SeqExpr" }
}
/**
@@ -866,6 +890,8 @@ class ConditionalExpr extends @conditional_expr, Expr {
getCondition().isImpure() or
getABranch().isImpure()
}
override string getAPrimaryQlClass() { result = "ConditionalExpr" }
}
/**
@@ -986,7 +1012,9 @@ class InvokeExpr extends @invokeexpr, Expr {
* new Array(16)
* ```
*/
class NewExpr extends @new_expr, InvokeExpr { }
class NewExpr extends @new_expr, InvokeExpr {
override string getAPrimaryQlClass() { result = "NewExpr" }
}
/**
* A function call expression.
@@ -1005,6 +1033,8 @@ class CallExpr extends @call_expr, InvokeExpr {
* is invoked, if any.
*/
Expr getReceiver() { result = getCallee().(PropAccess).getBase() }
override string getAPrimaryQlClass() { result = "CallExpr" }
}
/**
@@ -1037,6 +1067,8 @@ class MethodCallExpr extends CallExpr {
/** Holds if this invocation calls method `m` on expression `base`. */
predicate calls(Expr base, string m) { getMethodRef().accesses(base, m) }
override string getAPrimaryQlClass() { result = "MethodCallExpr" }
}
/**
@@ -1103,6 +1135,8 @@ class DotExpr extends @dot_expr, PropAccess {
Identifier getProperty() { result = getChildExpr(1) }
override predicate isImpure() { getBase().isImpure() }
override string getAPrimaryQlClass() { result = "DotExpr" }
}
/**
@@ -1124,6 +1158,8 @@ class IndexExpr extends @index_expr, PropAccess {
getBase().isImpure() or
getIndex().isImpure()
}
override string getAPrimaryQlClass() { result = "IndexExpr" }
}
/**
@@ -1148,6 +1184,8 @@ class UnaryExpr extends @unaryexpr, Expr {
override ControlFlowNode getFirstControlFlowNode() {
result = getOperand().getFirstControlFlowNode()
}
override string getAPrimaryQlClass() { result = "UnaryExpr" }
}
/**
@@ -1258,6 +1296,8 @@ class DeleteExpr extends @delete_expr, UnaryExpr {
*/
class SpreadElement extends @spread_element, UnaryExpr {
override string getOperator() { result = "..." }
override string getAPrimaryQlClass() { result = "SpreadElement" }
}
/**
@@ -1314,6 +1354,8 @@ class BinaryExpr extends @binaryexpr, Expr {
result = c4 - c3 - 1
)
}
override string getAPrimaryQlClass() { result = "BinaryExpr" }
}
/**
@@ -1846,6 +1888,8 @@ class Assignment extends @assignment, Expr {
*/
class AssignExpr extends @assign_expr, Assignment {
override Expr getUnderlyingValue() { result = getRhs().getUnderlyingValue() }
override string getAPrimaryQlClass() { result = "AssignExpr" }
}
private class TCompoundAssignExpr =
@@ -1864,7 +1908,9 @@ private class TCompoundAssignExpr =
* x /= 2
* ```
*/
class CompoundAssignExpr extends TCompoundAssignExpr, Assignment { }
class CompoundAssignExpr extends TCompoundAssignExpr, Assignment {
override string getAPrimaryQlClass() { result = "CompoundAssignExpr" }
}
/**
* A compound add-assign expression.
@@ -2056,6 +2102,8 @@ class UpdateExpr extends @updateexpr, Expr {
override ControlFlowNode getFirstControlFlowNode() {
result = getOperand().getFirstControlFlowNode()
}
override string getAPrimaryQlClass() { result = "UpdateExpr" }
}
/**
@@ -2137,6 +2185,8 @@ class YieldExpr extends @yield_expr, Expr {
or
not exists(getOperand()) and result = this
}
override string getAPrimaryQlClass() { result = "YieldExpr" }
}
/**
@@ -2194,6 +2244,8 @@ class ComprehensionExpr extends @comprehension_expr, Expr {
predicate isPostfix() {
exists(Token tk | tk = getFirstToken().getNextToken() | not tk.getValue().regexpMatch("if|for"))
}
override string getAPrimaryQlClass() { result = "ComprehensionExpr" }
}
/**
@@ -2246,6 +2298,8 @@ class ComprehensionBlock extends @comprehension_block, Expr {
getIterator().isImpure() or
getDomain().isImpure()
}
override string getAPrimaryQlClass() { result = "ComprehensionBlock" }
}
/**
@@ -2468,6 +2522,8 @@ class LegacyLetExpr extends Expr, @legacy_letexpr {
/** Gets the expression this `let` expression scopes over. */
Expr getBody() { result = getChildExpr(-1) }
override string getAPrimaryQlClass() { result = "LegacyLetExpr" }
}
/**
@@ -2569,6 +2625,8 @@ class AwaitExpr extends @await_expr, Expr {
override ControlFlowNode getFirstControlFlowNode() {
result = getOperand().getFirstControlFlowNode()
}
override string getAPrimaryQlClass() { result = "AwaitExpr" }
}
/**
@@ -2586,6 +2644,8 @@ class AwaitExpr extends @await_expr, Expr {
*/
class FunctionSentExpr extends @function_sent_expr, Expr {
override predicate isImpure() { none() }
override string getAPrimaryQlClass() { result = "FunctionSentExpr" }
}
/**
@@ -2621,6 +2681,8 @@ class Decorator extends @decorator, Expr {
override ControlFlowNode getFirstControlFlowNode() {
result = getExpression().getFirstControlFlowNode()
}
override string getAPrimaryQlClass() { result = "Decorator" }
}
/**
@@ -2687,6 +2749,8 @@ class FunctionBindExpr extends @bind_expr, Expr {
or
not exists(getObject()) and result = getCallee().getFirstControlFlowNode()
}
override string getAPrimaryQlClass() { result = "FunctionBindExpr" }
}
/**
@@ -2711,6 +2775,8 @@ class DynamicImportExpr extends @dynamic_import, Expr, Import {
override Module getEnclosingModule() { result = getTopLevel() }
override DataFlow::Node getImportedModuleNode() { result = DataFlow::valueNode(this) }
override string getAPrimaryQlClass() { result = "DynamicImportExpr" }
}
/** A literal path expression appearing in a dynamic import. */
@@ -2734,6 +2800,8 @@ private class LiteralDynamicImportPath extends PathExpr, ConstantString {
*/
class OptionalUse extends Expr, @optionalchainable {
OptionalUse() { isOptionalChaining(this) }
override string getAPrimaryQlClass() { result = "OptionalUse" }
}
private class ChainElem extends Expr, @optionalchainable {
@@ -2775,4 +2843,6 @@ class OptionalChainRoot extends ChainElem {
*/
class ImportMetaExpr extends @import_meta_expr, Expr {
override predicate isImpure() { none() }
override string getAPrimaryQlClass() { result = "ImportMetaExpr" }
}

View File

@@ -80,6 +80,8 @@ module HTML {
}
override string toString() { result = "<" + getName() + ">...</>" }
override string getAPrimaryQlClass() { result = "HTML::Element" }
}
/**
@@ -124,6 +126,34 @@ module HTML {
string getValue() { xmlAttrs(this, _, _, result, _, _) }
override string toString() { result = getName() + "=" + getValue() }
/**
* Gets the inline script of this attribute, if any.
*/
CodeInAttribute getCodeInAttribute() {
exists(
string f, Location l1, int sl1, int sc1, int el1, int ec1, Location l2, int sl2, int sc2,
int el2, int ec2
|
l1 = getLocation() and
l2 = result.getLocation() and
l1.hasLocationInfo(f, sl1, sc1, el1, ec1) and
l2.hasLocationInfo(f, sl2, sc2, el2, ec2)
|
(
sl1 = sl2 and sc1 < sc2
or
sl1 < sl2
) and
(
el1 = el2 and ec1 > ec2
or
el1 > el2
)
)
}
override string getAPrimaryQlClass() { result = "HTML::Attribute" }
}
/**
@@ -227,6 +257,8 @@ module HTML {
result = getInlineScript() or
result = resolveSource()
}
override string getAPrimaryQlClass() { result = "HTML::ScriptElement" }
}
/**

View File

@@ -40,6 +40,8 @@ class JSONValue extends @json_value, Locatable {
result = loc.getFile()
)
}
override string getAPrimaryQlClass() { result = "JSONValue" }
}
/**
@@ -72,7 +74,9 @@ abstract class JSONPrimitiveValue extends JSONValue {
* null
* ```
*/
class JSONNull extends @json_null, JSONPrimitiveValue { }
class JSONNull extends @json_null, JSONPrimitiveValue {
override string getAPrimaryQlClass() { result = "JSONNull" }
}
/**
* A JSON-encoded Boolean value.
@@ -84,7 +88,9 @@ class JSONNull extends @json_null, JSONPrimitiveValue { }
* false
* ```
*/
class JSONBoolean extends @json_boolean, JSONPrimitiveValue { }
class JSONBoolean extends @json_boolean, JSONPrimitiveValue {
override string getAPrimaryQlClass() { result = "JSONBoolean" }
}
/**
* A JSON-encoded number.
@@ -96,7 +102,9 @@ class JSONBoolean extends @json_boolean, JSONPrimitiveValue { }
* 1.0
* ```
*/
class JSONNumber extends @json_number, JSONPrimitiveValue { }
class JSONNumber extends @json_number, JSONPrimitiveValue {
override string getAPrimaryQlClass() { result = "JSONNumber" }
}
/**
* A JSON-encoded string value.
@@ -107,7 +115,9 @@ class JSONNumber extends @json_number, JSONPrimitiveValue { }
* "a string"
* ```
*/
class JSONString extends @json_string, JSONPrimitiveValue { }
class JSONString extends @json_string, JSONPrimitiveValue {
override string getAPrimaryQlClass() { result = "JSONString" }
}
/**
* A JSON-encoded array.
@@ -124,6 +134,8 @@ class JSONArray extends @json_array, JSONValue {
/** Gets the string value of the `i`th element of this array. */
string getElementStringValue(int i) { result = getElementValue(i).(JSONString).getValue() }
override string getAPrimaryQlClass() { result = "JSONArray" }
}
/**
@@ -141,6 +153,8 @@ class JSONObject extends @json_object, JSONValue {
/** Gets the string value of property `name` of this object. */
string getPropStringValue(string name) { result = getPropValue(name).(JSONString).getValue() }
override string getAPrimaryQlClass() { result = "JSONObject" }
}
/**

View File

@@ -26,6 +26,8 @@ class JSXNode extends Expr, @jsx_element {
* Gets the parent JSX element or fragment of this element.
*/
JSXNode getJsxParent() { this = result.getABodyElement() }
override string getAPrimaryQlClass() { result = "JSXNode" }
}
/**
@@ -61,6 +63,8 @@ class JSXElement extends JSXNode {
override ControlFlowNode getFirstControlFlowNode() {
result = getNameExpr().getFirstControlFlowNode()
}
override string getAPrimaryQlClass() { result = "JSXElement" }
}
/**
@@ -80,6 +84,8 @@ class JSXFragment extends JSXNode {
or
not exists(getABodyElement()) and result = this
}
override string getAPrimaryQlClass() { result = "JSXFragment" }
}
/**
@@ -124,6 +130,8 @@ class JSXAttribute extends ASTNode, @jsx_attribute {
}
override string toString() { properties(this, _, _, _, result) }
override string getAPrimaryQlClass() { result = "JSXAttribute" }
}
/**
@@ -163,6 +171,8 @@ class JSXQualifiedName extends Expr, @jsx_qualified_name {
override ControlFlowNode getFirstControlFlowNode() {
result = getNamespace().getFirstControlFlowNode()
}
override string getAPrimaryQlClass() { result = "JSXQualifiedName" }
}
/**
@@ -214,7 +224,9 @@ class JSXName extends Expr {
* { /* TBD *&#47; }
* </pre>
*/
class JSXEmptyExpr extends Expr, @jsx_empty_expr { }
class JSXEmptyExpr extends Expr, @jsx_empty_expr {
override string getAPrimaryQlClass() { result = "JSXEmptyExpr" }
}
/**
* A legacy `@jsx` pragma.

View File

@@ -131,6 +131,11 @@ class Locatable extends @locatable {
// to be overridden by subclasses
none()
}
/**
* Gets the primary QL class for the Locatable.
*/
string getAPrimaryQlClass() { result = "???" }
}
/**

View File

@@ -0,0 +1,798 @@
/**
* Provides queries to pretty-print a JavaScript AST as a graph.
*
* By default, this will print the AST for all elements in the database. To change this behavior,
* extend `PrintAstConfiguration` and override `shouldPrint` to hold for only the elements
* you wish to view the AST for.
*/
import javascript
private newtype TPrintAstConfiguration = MkPrintAstConfiguration()
/**
* The query can extend this class to control which elements are printed.
*/
class PrintAstConfiguration extends TPrintAstConfiguration {
/**
* Gets a textual representation of this `PrintAstConfiguration`.
*/
string toString() { result = "PrintAstConfiguration" }
/**
* Controls whether the `Element` should be considered for AST printing.
* By default it checks whether the `Element` `e` belongs to `Location` `l`.
*/
predicate shouldPrint(Locatable e, Location l) { l = e.getLocation() }
}
private predicate shouldPrint(Locatable e, Location l) {
exists(PrintAstConfiguration config | config.shouldPrint(e, l))
}
/** Holds if the given element does not need to be rendered in the AST, due to being the `TopLevel` for a file. */
private predicate isNotNeeded(Locatable el) {
el instanceof TopLevel and
el.getLocation().getStartLine() = 0 and
el.getLocation().getStartColumn() = 0
or
// relaxing aggresive type inference.
none()
}
/**
* Retrieves the canonical QL class(es) for entity `el`
*/
private string getQlClass(Locatable el) {
result = "[" + concat(el.getAPrimaryQlClass(), ",") + "] "
// Alternative implementation -- do not delete. It is useful for QL class discovery.
// not el.getAPrimaryQlClass() = "???" and result = "[" + concat(el.getAPrimaryQlClass(), ",") + "] " or el.getAPrimaryQlClass() = "???" and result = "??[" + concat(el.getAQlClass(), ",") + "] "
}
/**
* Printed nodes for different file types.
*/
private newtype TPrintAstNode =
// JavaScript / TypeScript
TElementNode(ASTNode el) { shouldPrint(el, _) and not isNotNeeded(el) } or
TParametersNode(Function f) { shouldPrint(f, _) and not isNotNeeded(f) } or
TTypeParametersNode(TypeParameterized f) { shouldPrint(f, _) and not isNotNeeded(f) } or
TJSXAttributesNode(JSXElement n) { shouldPrint(n, _) and not isNotNeeded(n) } or
TJSXBodyElementsNode(JSXNode n) { shouldPrint(n, _) and not isNotNeeded(n) } or
TInvokeArgumentsNode(InvokeExpr n) { shouldPrint(n, _) and not isNotNeeded(n) } or
TInvokeTypeArgumentsNode(InvokeExpr invk) { shouldPrint(invk, _) and not isNotNeeded(invk) } or
// JSON
TJSONNode(JSONValue value) { shouldPrint(value, _) and not isNotNeeded(value) } or
// YAML
TYAMLNode(YAMLNode n) { shouldPrint(n, _) and not isNotNeeded(n) } or
TYAMLMappingNode(YAMLMapping mapping, int i) {
shouldPrint(mapping, _) and not isNotNeeded(mapping) and exists(mapping.getKeyNode(i))
} or
// HTML
THTMLElementNode(HTML::Element e) { shouldPrint(e, _) and not isNotNeeded(e) } or
THTMLAttributesNodes(HTML::Element e) { shouldPrint(e, _) and not isNotNeeded(e) } or
THTMLAttributeNode(HTML::Attribute attr) { shouldPrint(attr, _) and not isNotNeeded(attr) } or
THTMLScript(Script script) { shouldPrint(script, _) and not isNotNeeded(script) } or
THTMLCodeInAttr(CodeInAttribute attr) { shouldPrint(attr, _) and not isNotNeeded(attr) }
/**
* A node in the output tree.
*/
class PrintAstNode extends TPrintAstNode {
/**
* Gets a textual representation of this node in the PrintAst output tree.
*/
string toString() { none() }
/**
* Gets the child node at index `childIndex`. Child indices must be unique,
* but need not be contiguous.
*/
PrintAstNode getChild(int childIndex) { none() }
/**
* Gets a child of this node.
*/
final PrintAstNode getAChild() { result = getChild(_) }
/**
* Gets the parent of this node, if any.
*/
final PrintAstNode getParent() { result.getAChild() = this }
/**
* Gets the location of this node in the source code.
*/
Location getLocation() { none() }
/**
* Gets the value of the property of this node, where the name of the property
* is `key`.
*/
string getProperty(string key) {
key = "semmle.label" and
result = toString()
}
/**
* Gets the label for the edge from this node to the specified child. By
* default, this is just the index of the child, but subclasses can override
* this.
*/
string getChildEdgeLabel(int childIndex) {
exists(getChild(childIndex)) and
result = childIndex.toString()
}
}
/** A top-level AST node. */
class TopLevelPrintAstNode extends PrintAstNode {
TopLevelPrintAstNode() { not exists(this.getParent()) }
private int getOrder() {
this =
rank[result](TopLevelPrintAstNode n, Location l |
l = n.getLocation()
|
n
order by
l.getFile().getRelativePath(), l.getStartLine(), l.getStartColumn(), l.getEndLine(),
l.getEndColumn()
)
}
override string getProperty(string key) {
result = super.getProperty(key)
or
key = "semmle.order" and
result = this.getOrder().toString()
}
}
/**
* Classes for printing JavaScript AST.
*/
private module PrintJavaScript {
/**
* A print node representing an `ASTNode`.
*
* Provides a default implemention that works for some (but not all) ASTNode's.
* More specific subclasses can override this class to get more specific behavior.
*
* The more specific subclasses are mostly used aggregate the children of the `ASTNode`.
* For example by aggregating all the parameters of a function under a single child node.
*/
class ElementNode extends PrintAstNode, TElementNode {
ASTNode element;
ElementNode() {
this = TElementNode(element) and
not element instanceof Script and // Handled in module `PrintHTML`
not element instanceof CodeInAttribute // Handled in module `PrintHTML`
}
override string toString() { result = getQlClass(element) + PrettyPrinting::print(element) }
override Location getLocation() { result = element.getLocation() }
/**
* Gets the `ASTNode` represented by this node.
*/
final ASTNode getElement() { result = element }
override PrintAstNode getChild(int childIndex) {
exists(ASTNode el | result.(ElementNode).getElement() = el |
el = this.getChildNode(childIndex)
)
}
/**
* Gets the `i`th child of `element`.
* Can be overriden in subclasses to get more specific behavior for `getChild()`.
*/
ASTNode getChildNode(int childIndex) { result = getLocationSortedChild(element, childIndex) }
}
/** Provides predicates for pretty printing `ASTNode`s. */
private module PrettyPrinting {
/**
* Gets a pretty string representation of `element`.
* Either the result is `ASTNode::toString`, or a custom made string representation of `element`.
*/
string print(ASTNode element) {
shouldPrint(element, _) and
(
result = element.toString().regexpReplaceAll("(\\\\n|\\\\r|\\\\t| )+", " ") and
not exists(repr(element))
or
result = repr(element)
)
}
/**
* Gets a string representing `a`.
*/
private string repr(ASTNode a) {
shouldPrint(a, _) and
(
exists(DeclStmt decl | decl = a |
result =
getDeclarationKeyword(decl) + " " +
strictconcat(string name, int i |
name = decl.getDecl(i).getBindingPattern().getName()
|
name, ", " order by i
) + " = ..."
)
or
exists(ObjectExpr obj | obj = a | result = "{" + obj.getProperty(0).getName() + ": ...}")
or
result = a.(Property).getName() + ": " + repr(a.(Property).getInit())
or
result = a.(Literal).getRawValue()
or
result = a.(Identifier).getName()
)
}
/**
* Gets "var" or "const" or "let" depending on what type of declaration `decl` is.
*/
private string getDeclarationKeyword(DeclStmt decl) {
decl instanceof VarDeclStmt and result = "var"
or
decl instanceof ConstDeclStmt and result = "const"
or
decl instanceof LetStmt and result = "let"
}
}
private ASTNode getLocationSortedChild(ASTNode parent, int i) {
result =
rank[i](ASTNode child, int childIndex |
child = parent.getChild(childIndex)
|
child
order by
child.getLocation().getStartLine(), child.getLocation().getStartColumn(), childIndex
)
}
/**
* A print node for function invocations.
*
* The children of this node are split into 3.
* 1: The callee.
* 2: An aggregate node for all the arguments.
* 3: An aggregate node for all the type argument.
*/
class InvokeNode extends ElementNode {
override InvokeExpr element;
override PrintAstNode getChild(int childIndex) {
childIndex = 0 and result.(ElementNode).getElement() = element.getCallee()
or
childIndex = 1 and
exists(element.getAnArgument()) and
result.(InvokeArgumentsNode).getInvokeExpr() = element
or
childIndex = 2 and
exists(element.getATypeArgument()) and
result.(InvokeTypeArgumentsNode).getInvokeExpr() = element
}
}
/**
* An aggregate node representing all the arguments for an function invocation.
*/
class InvokeArgumentsNode extends PrintAstNode, TInvokeArgumentsNode {
InvokeExpr invk;
InvokeArgumentsNode() { this = TInvokeArgumentsNode(invk) and exists(invk.getAnArgument()) }
override string toString() { result = "(Arguments)" }
/**
* Gets the `InvokeExpr` for which this node represents the arguments.
*/
InvokeExpr getInvokeExpr() { result = invk }
override PrintAstNode getChild(int childIndex) {
result.(ElementNode).getElement() = invk.getArgument(childIndex)
}
}
/**
* An aggregate node representing all the type-arguments for an function invocation.
*/
class InvokeTypeArgumentsNode extends PrintAstNode, TInvokeTypeArgumentsNode {
InvokeExpr invk;
InvokeTypeArgumentsNode() {
this = TInvokeTypeArgumentsNode(invk) and exists(invk.getATypeArgument())
}
override string toString() { result = "(TypeArguments)" }
/**
* Gets the `InvokeExpr` for which this node represents the type-arguments.
*/
InvokeExpr getInvokeExpr() { result = invk }
override PrintAstNode getChild(int childIndex) {
result.(ElementNode).getElement() = invk.getTypeArgument(childIndex)
}
}
/**
* A print node for JSX nodes.
*
* The children of this node are split into 3.
* 1: The name of the JSX node (for example `Name` in `<Name href={foo} />`).
* 2: An aggregate node for all the attributes (for example `href={foo}` in `<Name href={foo} />`).
* 3: An aggregate node for all the body element (for example `foo` in `<span>foo</span>`).
*/
class JSXNodeNode extends ElementNode {
override JSXNode element;
override PrintAstNode getChild(int childIndex) {
childIndex = 0 and result.(ElementNode).getElement() = element.(JSXElement).getNameExpr()
or
childIndex = 1 and
exists(element.getABodyElement()) and
result.(JSXBodyElementsNode).getJSXNode() = element
or
childIndex = 2 and
exists(element.(JSXElement).getAttribute(_)) and
result.(JSXAttributesNode).getJSXElement() = element
}
}
/**
* An aggregate node representing all the attributes in a `JSXNode`.
*/
class JSXAttributesNode extends PrintAstNode, TJSXAttributesNode {
JSXElement n;
JSXAttributesNode() { this = TJSXAttributesNode(n) and exists(n.getAttribute(_)) }
override string toString() { result = "(Attributes)" }
/**
* Gets the `JSXElement` for which this node represents the attributes.
*/
JSXElement getJSXElement() { result = n }
override PrintAstNode getChild(int childIndex) {
result.(ElementNode).getElement() = n.getAttribute(childIndex)
}
}
/**
* An aggregate node representing all the body elements in a `JSXNode`.
*/
class JSXBodyElementsNode extends PrintAstNode, TJSXBodyElementsNode {
JSXNode n;
JSXBodyElementsNode() { this = TJSXBodyElementsNode(n) and exists(n.getBodyElement(_)) }
override string toString() { result = "(Body)" }
/**
* Gets the `JSXNode` for which this node represents the body elements.
*/
JSXNode getJSXNode() { result = n }
override PrintAstNode getChild(int childIndex) {
result.(ElementNode).getElement() = n.getBodyElement(childIndex)
}
}
/**
* A node representing any `ASTNode` that has type-parameters.
*
* The first child of this node is an aggregate node representing all the type-parameters.
*/
class TypeParameterizedNode extends ElementNode {
override TypeParameterized element;
override PrintAstNode getChild(int childIndex) {
childIndex = -100 and result.(TypeParametersNode).getTypeParameterized() = element
or
result = super.getChild(childIndex) and
not result.(ElementNode).getElement() = element.getATypeParameter()
}
}
/**
* A `PrintAstNode` for functions.
*
* The children of this node is split into 6:
* - The identifier (name) of the function.
* - An aggregate node for all the parameters of the function.
* - An aggregate node for all the type parameters of the function.
* - The `this` type annotation.
* - The return type annotation.
* - The body
*/
class FunctionNode extends TypeParameterizedNode {
override Function element;
override PrintAstNode getChild(int childIndex) {
childIndex = 0 and result.(ElementNode).getElement() = element.getIdentifier()
or
childIndex = 1 and
result.(ParametersNode).getFunction() = element and
exists(element.getAParameter())
or
childIndex = 2 and
result.(TypeParametersNode).getTypeParameterized() = element and
exists(element.getATypeParameter())
or
childIndex = 3 and result.(ElementNode).getElement() = element.getThisTypeAnnotation()
or
childIndex = 4 and result.(ElementNode).getElement() = element.getReturnTypeAnnotation()
or
childIndex = 5 and result.(ElementNode).getElement() = element.getBody()
}
}
/**
* A `PrintAstNode` for parameters.
*
* This node puts the type-annotation and default value of a parameter as children of the parameter itself.
* Instead of the default behavior (from `ElementNode`) where they would be children of the function.
*/
class ParameterNode extends ElementNode {
override Parameter element;
override ASTNode getChildNode(int childIndex) {
childIndex = 0 and result = element.getTypeAnnotation()
or
childIndex = 1 and result = element.getDefault()
}
}
/**
* An aggregate node representing all the parameters in a function.
*/
class ParametersNode extends PrintAstNode, TParametersNode {
Function f;
ParametersNode() { this = TParametersNode(f) and exists(f.getAParameter()) }
override string toString() { result = "(Parameters)" }
/**
* Gets the `Function` for which this node represents the parameters.
*/
Function getFunction() { result = f }
override PrintAstNode getChild(int childIndex) {
result.(ElementNode).getElement() = f.getParameter(childIndex)
}
}
/**
* An aggregate node representing all the type parameters in a function.
*/
class TypeParametersNode extends PrintAstNode, TTypeParametersNode {
TypeParameterized f;
TypeParametersNode() { this = TTypeParametersNode(f) and exists(f.getATypeParameter()) }
override string toString() { result = "(TypeParameters)" }
/**
* Gets the `Function` for which this node represents the type-parameters.
*/
TypeParameterized getTypeParameterized() { result = f }
override PrintAstNode getChild(int childIndex) {
result.(ElementNode).getElement() = f.getTypeParameter(childIndex)
}
}
}
/**
* Classes for printing JSON AST.
*/
private module PrintJSON {
/**
* A print node representing a JSON value in a .json file.
*/
class JSONNode extends PrintAstNode, TJSONNode {
JSONValue value;
JSONNode() { this = TJSONNode(value) }
override string toString() { result = getQlClass(value) + PrettyPrinting::print(value) }
override Location getLocation() { result = value.getLocation() }
/**
* Gets the `JSONValue` represented by this node.
*/
final JSONValue getValue() { result = value }
override PrintAstNode getChild(int childIndex) {
exists(JSONValue child | result.(JSONNode).getValue() = child |
child = value.getChild(childIndex)
)
}
}
/** Provied predicates for pretty printing JSON. */
private module PrettyPrinting {
/**
* Gets a string representation of `n`.
* Either using the default `JSONValue::toString`, or a custom printing of the JSON value.
*/
string print(JSONValue n) {
shouldPrint(n, _) and
(
result = n.toString().regexpReplaceAll("(\\\\n|\\\\r|\\\\t| )+", " ") and
not exists(repr(n))
or
result = repr(n)
)
}
/** Gets a string representing `n`. */
private string repr(JSONValue n) {
shouldPrint(n, _) and
(
exists(JSONObject obj, string name, JSONValue prop | obj = n |
prop = obj.getPropValue(name) and
prop = obj.getChild(0) and
result = "{" + name + ": ...}"
)
or
n instanceof JSONObject and not exists(n.getChild(_)) and result = "{}"
or
result = n.(JSONPrimitiveValue).getRawValue()
or
exists(JSONArray arr | arr = n |
result = "[]" and not exists(arr.getChild(_))
or
result = "[" + repr(arr.getChild(0)) + "]" and not exists(arr.getChild(1))
or
result = "[" + repr(arr.getChild(0)) + ", ...]" and exists(arr.getChild(1))
)
)
}
}
}
/**
* Classes for printing YAML AST.
*/
module PrintYAML {
/**
* A print node representing a YAML value in a .yml file.
*/
class YAMLNodeNode extends PrintAstNode, TYAMLNode {
YAMLNode node;
YAMLNodeNode() { this = TYAMLNode(node) }
override string toString() { result = getQlClass(node) + node.toString() }
override Location getLocation() { result = node.getLocation() }
/**
* Gets the `YAMLNode` represented by this node.
*/
final YAMLNode getValue() { result = node }
override PrintAstNode getChild(int childIndex) {
exists(YAMLNode child | result.(YAMLNodeNode).getValue() = child |
child = node.getChildNode(childIndex)
)
}
}
/**
* A print node representing a `YAMLMapping`.
*
* Each child of this node aggregates the key and value of a mapping.
*/
class YAMLMappingNode extends YAMLNodeNode {
override YAMLMapping node;
override PrintAstNode getChild(int childIndex) {
exists(YAMLMappingMapNode map | map = result | map.maps(node, childIndex))
}
}
/**
* A print node representing the `i`th mapping in `mapping`.
*/
class YAMLMappingMapNode extends PrintAstNode, TYAMLMappingNode {
YAMLMapping mapping;
int i;
YAMLMappingMapNode() { this = TYAMLMappingNode(mapping, i) }
override string toString() {
result = "(Mapping " + i + ")" and not exists(mapping.getKeyNode(i).(YAMLScalar).getValue())
or
result = "(Mapping " + i + ") " + mapping.getKeyNode(i).(YAMLScalar).getValue() + ":"
}
/**
* Holds if this print node represents the `index`th mapping of `m`.
*/
predicate maps(YAMLMapping m, int index) {
m = mapping and
index = i
}
override PrintAstNode getChild(int childIndex) {
childIndex = 0 and result.(YAMLNodeNode).getValue() = mapping.getKeyNode(i)
or
childIndex = 1 and result.(YAMLNodeNode).getValue() = mapping.getValueNode(i)
}
}
}
/**
* Classes for printing HTML AST.
*/
module PrintHTML {
/**
* A print node representing an HTML node in a .html file.
*/
class HTMLElementNode extends PrintAstNode, THTMLElementNode {
HTML::Element element;
HTMLElementNode() { this = THTMLElementNode(element) }
override string toString() { result = getQlClass(element) + "<" + element.getName() + " ..." }
override Location getLocation() { result = element.getLocation() }
/**
* Gets the `HTML::Element` represented by this node.
*/
final HTML::Element getElement() { result = element }
override PrintAstNode getChild(int childIndex) {
childIndex = -1 and result.(HTMLAttributesNodes).getElement() = element
or
exists(HTML::Element child | result.(HTMLElementNode).getElement() = child |
child = element.(HTML::Element).getChild(childIndex)
)
}
}
/**
* A print node representing an HTML node in a .html file.
*/
class HTMLScriptElementNode extends HTMLElementNode {
override HTML::ScriptElement element;
override PrintAstNode getChild(int childIndex) {
childIndex = -200 and result.(HTMLScript).getScript() = element.getScript()
or
result = super.getChild(childIndex)
}
}
/**
* A print node representing the code inside a `<script>` element.
*/
class HTMLScript extends PrintAstNode, THTMLScript {
Script script;
HTMLScript() {
this = THTMLScript(script) and
any(HTMLScriptElementNode se).getElement().(HTML::ScriptElement).getScript() = script
}
override string toString() { result = "(Script)" }
override Location getLocation() { result = script.getLocation() }
/**
* Gets the `Script` for which this node represents code.
*/
Script getScript() { result = script }
override PrintAstNode getChild(int childIndex) {
result.(PrintJavaScript::ElementNode).getElement() = script.getChild(childIndex)
}
}
/**
* A print node representing the code inside an attribute.
*/
class HTMLCodeInAttr extends PrintAstNode, THTMLCodeInAttr {
CodeInAttribute attr;
HTMLCodeInAttr() {
this = THTMLCodeInAttr(attr) and
any(HTMLAttributeNode an).getAttribute().getCodeInAttribute() = attr
}
override string toString() { result = "(Script)" }
override Location getLocation() { result = attr.getLocation() }
/**
* Gets the `CodeInAttribute` for which this node represents code.
*/
CodeInAttribute getCode() { result = attr }
override PrintAstNode getChild(int childIndex) {
result.(PrintJavaScript::ElementNode).getElement() = attr.getChild(childIndex)
}
}
/**
* An aggregate node representing all the attributes of an HTMLElement.
*/
class HTMLAttributesNodes extends PrintAstNode, THTMLAttributesNodes {
HTML::Element element;
HTMLAttributesNodes() {
this = THTMLAttributesNodes(element) and exists(element.getAttribute(_))
}
override string toString() { result = "(Attributes)" }
/**
* Gets the `HTMLElement` for which this node represents the attributes.
*/
HTML::Element getElement() { result = element }
override PrintAstNode getChild(int childIndex) {
result.(HTMLAttributeNode).getAttribute() = element.getAttribute(childIndex)
}
}
/**
* A print node representing an HTML attribute in a .html file.
*/
class HTMLAttributeNode extends PrintAstNode, THTMLAttributeNode {
HTML::Attribute attr;
HTMLAttributeNode() { this = THTMLAttributeNode(attr) }
override string toString() { result = getQlClass(attr) + attr.toString() }
override Location getLocation() { result = attr.getLocation() }
/**
* Gets the `HTMLAttribute` represented by this node.
*/
final HTML::Attribute getAttribute() { result = attr }
override PrintAstNode getChild(int childIndex) {
childIndex = 0 and result.(HTMLCodeInAttr).getCode() = attr.getCodeInAttribute()
}
}
}
/** Holds if `node` belongs to the output tree, and its property `key` has the given `value`. */
query predicate nodes(PrintAstNode node, string key, string value) { value = node.getProperty(key) }
/**
* Holds if `target` is a child of `source` in the AST, and property `key` of the edge has the
* given `value`.
*/
query predicate edges(PrintAstNode source, PrintAstNode target, string key, string value) {
exists(int childIndex |
target = source.getChild(childIndex) and
(
key = "semmle.label" and value = source.getChildEdgeLabel(childIndex)
or
key = "semmle.order" and value = childIndex.toString()
)
)
}
/** Holds if property `key` of the graph has the given `value`. */
query predicate graphProperties(string key, string value) {
key = "semmle.graphKind" and value = "tree"
}

View File

@@ -128,7 +128,9 @@ class LoopStmt extends TLoopStmt, ControlStmt {
* ;
* ```
*/
class EmptyStmt extends @empty_stmt, Stmt { }
class EmptyStmt extends @empty_stmt, Stmt {
override string getAPrimaryQlClass() { result = "EmptyStmt" }
}
/**
* A block of statements.
@@ -153,6 +155,8 @@ class BlockStmt extends @block_stmt, Stmt {
/** Holds if this block is a function body. */
predicate isFunctionBody() { this.getParent() instanceof Function }
override string getAPrimaryQlClass() { result = "BlockStmt" }
}
/**
@@ -192,6 +196,8 @@ class ExprStmt extends @expr_stmt, Stmt {
f = assgn.getRhs()
)
}
override string getAPrimaryQlClass() { result = "ExprStmt" }
}
/**
@@ -432,6 +438,8 @@ class IfStmt extends @if_stmt, ControlStmt {
/** Holds if this `if` statement is an `else if` of an outer `if` statement. */
predicate isElseIf() { exists(IfStmt outer | outer.getElse() = this) }
override string getAPrimaryQlClass() { result = "IfStmt" }
}
/**
@@ -455,6 +463,8 @@ class LabeledStmt extends @labeled_stmt, Stmt {
/** Gets the labeled statement of this statement. */
Stmt getStmt() { result = getChildStmt(1) }
override string getAPrimaryQlClass() { result = "LabeledStmt" }
}
private class TJumpStmt = TBreakOrContinueStmt or @return_stmt or @throw_stmt;
@@ -524,7 +534,9 @@ class BreakOrContinueStmt extends TBreakOrContinueStmt, JumpStmt {
* break;
* ```
*/
class BreakStmt extends @break_stmt, BreakOrContinueStmt { }
class BreakStmt extends @break_stmt, BreakOrContinueStmt {
override string getAPrimaryQlClass() { result = "BreakStmt" }
}
/**
* A `continue` statement.
@@ -536,7 +548,9 @@ class BreakStmt extends @break_stmt, BreakOrContinueStmt { }
* continue;
* ```
*/
class ContinueStmt extends @continue_stmt, BreakOrContinueStmt { }
class ContinueStmt extends @continue_stmt, BreakOrContinueStmt {
override string getAPrimaryQlClass() { result = "ContinueStmt" }
}
/**
* A `with` statement.
@@ -570,6 +584,8 @@ class WithStmt extends @with_stmt, ControlStmt {
}
override Stmt getAControlledStmt() { result = getBody() }
override string getAPrimaryQlClass() { result = "WithStmt" }
}
/**
@@ -604,6 +620,8 @@ class SwitchStmt extends @switch_stmt, ControlStmt {
int getNumCase() { result = count(getACase()) }
override Case getAControlledStmt() { result = getACase() }
override string getAPrimaryQlClass() { result = "SwitchStmt" }
}
/**
@@ -628,6 +646,8 @@ class ReturnStmt extends @return_stmt, JumpStmt {
}
override predicate isSubjectToSemicolonInsertion() { any() }
override string getAPrimaryQlClass() { result = "ReturnStmt" }
}
/**
@@ -661,6 +681,8 @@ class ThrowStmt extends @throw_stmt, JumpStmt {
}
override predicate isSubjectToSemicolonInsertion() { any() }
override string getAPrimaryQlClass() { result = "ThrowStmt" }
}
/**
@@ -710,6 +732,8 @@ class TryStmt extends @try_stmt, ControlStmt {
/** Gets the `finally` block of this `try` statement, if any. */
BlockStmt getFinally() { result = getChildStmt(-1) }
override string getAPrimaryQlClass() { result = "TryStmt" }
}
/**
@@ -730,6 +754,8 @@ class WhileStmt extends @while_stmt, LoopStmt {
override Expr getTest() { result = getExpr() }
override Stmt getBody() { result = getChildStmt(1) }
override string getAPrimaryQlClass() { result = "WhileStmt" }
}
/**
@@ -752,6 +778,8 @@ class DoWhileStmt extends @do_while_stmt, LoopStmt {
override Stmt getBody() { result = getChildStmt(0) }
override predicate isSubjectToSemicolonInsertion() { any() }
override string getAPrimaryQlClass() { result = "DoWhileStmt" }
}
/**
@@ -795,6 +823,8 @@ class ForStmt extends @for_stmt, LoopStmt {
Expr getUpdate() { result = getChildExpr(2) }
override Stmt getBody() { result = getChildStmt(3) }
override string getAPrimaryQlClass() { result = "ForStmt" }
}
/**
@@ -878,7 +908,9 @@ class EnhancedForLoop extends TEnhancedForLoop, LoopStmt {
* }
* ```
*/
class ForInStmt extends @for_in_stmt, EnhancedForLoop { }
class ForInStmt extends @for_in_stmt, EnhancedForLoop {
override string getAPrimaryQlClass() { result = "ForInStmt" }
}
/**
* A `for`-`of` loop.
@@ -896,6 +928,8 @@ class ForOfStmt extends @for_of_stmt, EnhancedForLoop {
* Holds if this is a `for-await-of` statement.
*/
predicate isAwait() { is_for_await_of(this) }
override string getAPrimaryQlClass() { result = "ForOfStmt" }
}
/**
@@ -909,7 +943,9 @@ class ForOfStmt extends @for_of_stmt, EnhancedForLoop {
* }
* ```
*/
class ForEachStmt extends @for_each_stmt, EnhancedForLoop { }
class ForEachStmt extends @for_each_stmt, EnhancedForLoop {
override string getAPrimaryQlClass() { result = "ForEachStmt" }
}
/**
* A `debugger` statement.
@@ -922,6 +958,8 @@ class ForEachStmt extends @for_each_stmt, EnhancedForLoop { }
*/
class DebuggerStmt extends @debugger_stmt, Stmt {
override predicate isSubjectToSemicolonInsertion() { any() }
override string getAPrimaryQlClass() { result = "DebuggerStmt" }
}
/**
@@ -937,6 +975,8 @@ class DebuggerStmt extends @debugger_stmt, Stmt {
*/
class FunctionDeclStmt extends @function_decl_stmt, Stmt, Function {
override Stmt getEnclosingStmt() { result = this }
override string getAPrimaryQlClass() { result = "FunctionDeclStmt" }
}
/**
@@ -962,6 +1002,8 @@ class DeclStmt extends @decl_stmt, Stmt {
// exclude variable declarations in the init part of for/for-in/for-of loops
not exists(LoopStmt for | this = for.getAChildStmt() and this != for.getBody())
}
override string getAPrimaryQlClass() { result = "DeclStmt" }
}
/**
@@ -1043,6 +1085,8 @@ class Case extends @case, Stmt {
/** Gets the `switch` statement to which this clause belongs. */
SwitchStmt getSwitch() { result = getParent() }
override string getAPrimaryQlClass() { result = "Case" }
}
/**
@@ -1067,4 +1111,6 @@ class CatchClause extends @catch_clause, ControlStmt, Parameterized {
/** Gets the scope induced by this `catch` clause. */
CatchScope getScope() { result.getCatchClause() = this }
override string getAPrimaryQlClass() { result = "CatchClause" }
}

View File

@@ -28,6 +28,8 @@ class TaggedTemplateExpr extends Expr, @tagged_template_expr {
int getNumTypeArgument() { result = count(getATypeArgument()) }
override predicate isImpure() { any() }
override string getAPrimaryQlClass() { result = "TaggedTemplateExpr" }
}
/**
@@ -57,6 +59,8 @@ class TemplateLiteral extends Expr, @template_literal {
int getNumElement() { result = count(getAnElement()) }
override predicate isImpure() { getAnElement().isImpure() }
override string getAPrimaryQlClass() { result = "TemplateLiteral" }
}
/**
@@ -94,4 +98,6 @@ class TemplateElement extends Expr, @template_element {
string getRawValue() { literals(_, result, this) }
override predicate isImpure() { none() }
override string getAPrimaryQlClass() { result = "TemplateElement" }
}

View File

@@ -88,6 +88,8 @@ class NamespaceDeclaration extends NamespaceDefinition, StmtContainer, @namespac
override ControlFlowNode getFirstControlFlowNode() {
if has_declare_keyword(this) then result = this else result = getIdentifier()
}
override string getAPrimaryQlClass() { result = "NamespaceDeclaration" }
}
/**
@@ -122,6 +124,8 @@ class TypeDefinition extends ASTNode, @type_definition {
* Gets the type defined by this declaration.
*/
Type getType() { ast_node_type(getIdentifier(), result) }
override string getAPrimaryQlClass() { result = "TypeDefinition" }
}
/**
@@ -158,6 +162,8 @@ class ExternalModuleDeclaration extends Stmt, StmtContainer, @external_module_de
int getNumStmt() { result = count(getAStmt()) }
override StmtContainer getEnclosingContainer() { result = this.getContainer() }
override string getAPrimaryQlClass() { result = "ExternalModuleDeclaration" }
}
/**
@@ -177,6 +183,8 @@ class GlobalAugmentationDeclaration extends Stmt, StmtContainer, @global_augment
int getNumStmt() { result = count(getAStmt()) }
override StmtContainer getEnclosingContainer() { result = this.getContainer() }
override string getAPrimaryQlClass() { result = "GlobalAugmentationDeclaration" }
}
/** A TypeScript "import-equals" declaration. */
@@ -195,6 +203,8 @@ class ImportEqualsDeclaration extends Stmt, @import_equals_declaration {
Expr getImportedEntity() { result = getChildExpr(1) }
override ControlFlowNode getFirstControlFlowNode() { result = getIdentifier() }
override string getAPrimaryQlClass() { result = "ImportEqualsDeclaration" }
}
/**
@@ -220,6 +230,8 @@ class ExternalModuleReference extends Expr, Import, @external_module_reference {
}
override DataFlow::Node getImportedModuleNode() { result = DataFlow::valueNode(this) }
override string getAPrimaryQlClass() { result = "ExternalModuleReference" }
}
/** A literal path expression appearing in an external module reference. */
@@ -235,6 +247,8 @@ private class LiteralExternalModulePath extends PathExpr, ConstantString {
class ExportAssignDeclaration extends Stmt, @export_assign_declaration {
/** Gets the expression exported by this declaration. */
Expr getExpression() { result = getChildExpr(0) }
override string getAPrimaryQlClass() { result = "ExportAssignDeclaration" }
}
/** A TypeScript export of form `export as namespace X` where `X` is an identifier. */
@@ -243,6 +257,8 @@ class ExportAsNamespaceDeclaration extends Stmt, @export_as_namespace_declaratio
* Gets the `X` in `export as namespace X`.
*/
Identifier getIdentifier() { result = getChildExpr(0) }
override string getAPrimaryQlClass() { result = "ExportAsNamespaceDeclaration" }
}
/**
@@ -267,6 +283,8 @@ class TypeAliasDeclaration extends @type_alias_declaration, TypeParameterized, S
* Gets the canonical name of the type being defined.
*/
TypeName getTypeName() { result.getADefinition() = this }
override string getAPrimaryQlClass() { result = "TypeAliasDeclaration" }
}
/**
@@ -274,6 +292,8 @@ class TypeAliasDeclaration extends @type_alias_declaration, TypeParameterized, S
*/
class InterfaceDefinition extends @interface_definition, ClassOrInterface {
override predicate isAbstract() { any() }
override string getAPrimaryQlClass() { result = "InterfaceDefinition" }
}
/** A TypeScript interface declaration. */
@@ -301,6 +321,8 @@ class InterfaceDeclaration extends Stmt, InterfaceDefinition, @interface_declara
* Gets any type from the `extends` clause of this interface.
*/
override TypeExpr getASuperInterface() { result = InterfaceDefinition.super.getASuperInterface() }
override string getAPrimaryQlClass() { result = "InterfaceDeclaration" }
}
/** An inline TypeScript interface type, such as `{x: number; y: number}`. */
@@ -308,6 +330,8 @@ class InterfaceTypeExpr extends TypeExpr, InterfaceDefinition, @interface_typeex
override Identifier getIdentifier() { none() }
override string describe() { result = "anonymous interface" }
override string getAPrimaryQlClass() { result = "InterfaceTypeExpr" }
}
/**
@@ -341,6 +365,8 @@ class FunctionTypeExpr extends TypeExpr, @function_typeexpr {
/** Gets the return type of this function type, if any. */
TypeExpr getReturnTypeAnnotation() { result = getFunction().getReturnTypeAnnotation() }
override string getAPrimaryQlClass() { result = "FunctionTypeExpr" }
}
/** A constructor type, such as `new (x: string) => Object`. */
@@ -596,6 +622,8 @@ private class KeywordTypeExpr extends @keyword_typeexpr, TypeExpr {
override predicate isBigInt() { getName() = "bigint" }
override predicate isConstKeyword() { getName() = "const" }
override string getAPrimaryQlClass() { result = "KeywordTypeExpr" }
}
/**
@@ -704,6 +732,8 @@ class TypeAccess extends @typeaccess, TypeExpr, TypeRef {
.getAMemberAccess(exportedName)
)
}
override string getAPrimaryQlClass() { result = "TypeAccess" }
}
/**
@@ -742,6 +772,8 @@ class LocalTypeAccess extends @local_type_access, TypeAccess, Identifier, Lexica
* a local type name as it is declared in `lib.d.ts`.
*/
LocalTypeName getLocalTypeName() { result.getAnAccess() = this }
override string getAPrimaryQlClass() { result = "LocalTypeAccess" }
}
/**
@@ -786,6 +818,8 @@ class GenericTypeExpr extends @generic_typeexpr, TypeExpr {
override predicate hasQualifiedName(string moduleName, string exportedName) {
getTypeAccess().hasQualifiedName(moduleName, exportedName)
}
override string getAPrimaryQlClass() { result = "GenericTypeExpr" }
}
/**
@@ -802,6 +836,8 @@ class LiteralTypeExpr extends @literal_typeexpr, TypeExpr {
* string literals.
*/
string getRawValue() { literals(_, result, this) }
override string getAPrimaryQlClass() { result = "LiteralTypeExpr" }
}
/** A string literal used as a type. */
@@ -842,6 +878,8 @@ class BigIntLiteralTypeExpr extends @bigint_literal_typeexpr, LiteralTypeExpr {
class ArrayTypeExpr extends @array_typeexpr, TypeExpr {
/** Gets the type of the array elements. */
TypeExpr getElementType() { result = getChildTypeExpr(0) }
override string getAPrimaryQlClass() { result = "ArrayTypeExpr" }
}
/**
@@ -858,6 +896,8 @@ class UnionTypeExpr extends @union_typeexpr, TypeExpr {
int getNumElementType() { result = count(getAnElementType()) }
override TypeExpr getAnUnderlyingType() { result = getAnElementType().getAnUnderlyingType() }
override string getAPrimaryQlClass() { result = "UnionTypeExpr" }
}
/**
@@ -869,6 +909,8 @@ class IndexedAccessTypeExpr extends @indexed_access_typeexpr, TypeExpr {
/** Gets the type `K` in `T[K]`, denoting the property names to extract from the object type. */
TypeExpr getIndexType() { result = getChildTypeExpr(1) }
override string getAPrimaryQlClass() { result = "IndexedAccessTypeExpr" }
}
/**
@@ -887,6 +929,8 @@ class IntersectionTypeExpr extends @intersection_typeexpr, TypeExpr {
int getNumElementType() { result = count(getAnElementType()) }
override TypeExpr getAnUnderlyingType() { result = getAnElementType().getAnUnderlyingType() }
override string getAPrimaryQlClass() { result = "IntersectionTypeExpr" }
}
/**
@@ -899,6 +943,8 @@ class ParenthesizedTypeExpr extends @parenthesized_typeexpr, TypeExpr {
override TypeExpr stripParens() { result = getElementType().stripParens() }
override TypeExpr getAnUnderlyingType() { result = getElementType().getAnUnderlyingType() }
override string getAPrimaryQlClass() { result = "ParenthesizedTypeExpr" }
}
/**
@@ -922,6 +968,8 @@ class TupleTypeExpr extends @tuple_typeexpr, TypeExpr {
// Type element names are at indices -1, -2, -3, ...
result = getChild(-(n + 1)) and n >= 0
}
override string getAPrimaryQlClass() { result = "TupleTypeExpr" }
}
/**
@@ -930,6 +978,8 @@ class TupleTypeExpr extends @tuple_typeexpr, TypeExpr {
class KeyofTypeExpr extends @keyof_typeexpr, TypeExpr {
/** Gets the type `T` in `keyof T`, denoting the object type whose property names are to be extracted. */
TypeExpr getElementType() { result = getChildTypeExpr(0) }
override string getAPrimaryQlClass() { result = "KeyofTypeExpr" }
}
/**
@@ -950,6 +1000,8 @@ class MappedTypeExpr extends @mapped_typeexpr, TypeParameterized, TypeExpr {
TypeExpr getElementType() { result = getChildTypeExpr(1) }
override string describe() { result = "mapped type" }
override string getAPrimaryQlClass() { result = "MappedTypeExpr" }
}
/**
@@ -962,6 +1014,8 @@ class TypeofTypeExpr extends @typeof_typeexpr, TypeExpr {
* variable, function, class, or namespace whose type is to be extracted.
*/
VarTypeAccess getExpressionName() { result = this.getChildTypeExpr(0) }
override string getAPrimaryQlClass() { result = "TypeofTypeExpr" }
}
/**
@@ -991,6 +1045,8 @@ class PredicateTypeExpr extends @predicate_typeexpr, TypeExpr {
* Holds if this is a type of form `asserts E is T` or `asserts E`.
*/
predicate hasAssertsKeyword() { has_asserts_keyword(this) }
override string getAPrimaryQlClass() { result = "PredicateTypeExpr" }
}
/**
@@ -1004,6 +1060,8 @@ class PredicateTypeExpr extends @predicate_typeexpr, TypeExpr {
*/
class IsTypeExpr extends PredicateTypeExpr {
IsTypeExpr() { exists(getPredicateType()) }
override string getAPrimaryQlClass() { result = "IsTypeExpr" }
}
/**
@@ -1014,6 +1072,8 @@ class OptionalTypeExpr extends @optional_typeexpr, TypeExpr {
TypeExpr getElementType() { result = getChildTypeExpr(0) }
override TypeExpr getAnUnderlyingType() { result = getElementType().getAnUnderlyingType() }
override string getAPrimaryQlClass() { result = "OptionalTypeExpr" }
}
/**
@@ -1025,6 +1085,8 @@ class RestTypeExpr extends @rest_typeexpr, TypeExpr {
/** Gets the type `T` in `...T[]`, such as `string` in `[number, ...string[]]`. */
TypeExpr getElementType() { result = getArrayType().(ArrayTypeExpr).getElementType() }
override string getAPrimaryQlClass() { result = "RestTypeExpr" }
}
/**
@@ -1035,6 +1097,8 @@ class ReadonlyTypeExpr extends @readonly_typeexpr, TypeExpr {
TypeExpr getElementType() { result = getChildTypeExpr(0) }
override TypeExpr getAnUnderlyingType() { result = getElementType().getAnUnderlyingType() }
override string getAPrimaryQlClass() { result = "ReadonlyTypeExpr" }
}
/**
@@ -1053,7 +1117,9 @@ class ReadonlyTypeExpr extends @readonly_typeexpr, TypeExpr {
*
* In the latter two cases, this may also refer to the pseudo-variable `this`.
*/
class VarTypeAccess extends @vartypeaccess, TypeExpr { }
class VarTypeAccess extends @vartypeaccess, TypeExpr {
override string getAPrimaryQlClass() { result = "VarTypeAccess" }
}
/**
* An identifier that refers to a variable from inside a type.
@@ -1063,6 +1129,8 @@ class VarTypeAccess extends @vartypeaccess, TypeExpr { }
class LocalVarTypeAccess extends @local_var_type_access, VarTypeAccess, LexicalAccess, Identifier {
/** Gets the variable being referenced, or nothing if this is a `this` keyword. */
Variable getVariable() { bind(this, result) }
override string getAPrimaryQlClass() { result = "LocalVarTypeAccess" }
}
/**
@@ -1073,7 +1141,9 @@ class LocalVarTypeAccess extends @local_var_type_access, VarTypeAccess, LexicalA
* interface Node { isLeaf(): this is Leaf; }
* ```
*/
class ThisVarTypeAccess extends @this_var_type_access, VarTypeAccess { }
class ThisVarTypeAccess extends @this_var_type_access, VarTypeAccess {
override string getAPrimaryQlClass() { result = "ThisVarTypeAccess" }
}
/**
* A qualified name that refers to a variable from inside a type.
@@ -1115,6 +1185,8 @@ class ConditionalTypeExpr extends @conditional_typeexpr, TypeExpr {
* Gets the type to be used if the `extend` condition fails, such as `B` in `T extends any[] ? A : B`.
*/
TypeExpr getFalseType() { result = getChildTypeExpr(3) }
override string getAPrimaryQlClass() { result = "ConditionalTypeExpr" }
}
/**
@@ -1129,6 +1201,8 @@ class InferTypeExpr extends @infer_typeexpr, TypeParameterized, TypeExpr {
override TypeParameter getTypeParameter(int n) { n = 0 and result = getTypeParameter() }
override string describe() { result = "'infer' type " + getTypeParameter().getName() }
override string getAPrimaryQlClass() { result = "InferTypeExpr" }
}
/**
@@ -1230,6 +1304,8 @@ class TypeParameter extends @type_parameter, TypeExpr {
* Gets the local type name declared by this type parameter.
*/
LocalTypeName getLocalTypeName() { result = getIdentifier().(TypeDecl).getLocalTypeName() }
override string getAPrimaryQlClass() { result = "TypeParameter" }
}
/**
@@ -1250,6 +1326,8 @@ class TypeAssertion extends Expr, @type_assertion {
override Expr getUnderlyingValue() { result = getExpression().getUnderlyingValue() }
override Expr getUnderlyingReference() { result = getExpression().getUnderlyingReference() }
override string getAPrimaryQlClass() { result = "TypeAssertion" }
}
/**
@@ -1272,6 +1350,8 @@ class NonNullAssertion extends Expr, @non_null_assertion {
override ControlFlowNode getFirstControlFlowNode() {
result = getExpression().getFirstControlFlowNode()
}
override string getAPrimaryQlClass() { result = "NonNullAssertion" }
}
/**
@@ -1326,6 +1406,8 @@ class NamespaceAccess extends TypeExpr, NamespaceRef, @namespace_access {
* Gets the canonical name of the namespace being accessed.
*/
Namespace getNamespace() { ast_node_symbol(this, result) }
override string getAPrimaryQlClass() { result = "NamespaceAccess" }
}
/**
@@ -1337,6 +1419,8 @@ class LocalNamespaceAccess extends NamespaceAccess, LexicalAccess, Identifier,
/** Gets the local name being accessed. */
LocalNamespaceName getLocalNamespaceName() { namespacebind(this, result) }
override string getAPrimaryQlClass() { result = "LocalNamespaceAccess" }
}
/**
@@ -1370,22 +1454,30 @@ class ImportTypeExpr extends TypeExpr, @import_typeexpr {
/** Holds if this import is used in the context of a variable type, such as `let x: typeof import("fs")`. */
predicate isVarTypeAccess() { this instanceof @import_var_type_access }
override string getAPrimaryQlClass() { result = "ImportTypeExpr" }
}
/**
* An import used in the context of a type, such as in `let x: import("foo")`.
*/
class ImportTypeAccess extends TypeAccess, ImportTypeExpr, @import_type_access { }
class ImportTypeAccess extends TypeAccess, ImportTypeExpr, @import_type_access {
override string getAPrimaryQlClass() { result = "ImportTypeAccess" }
}
/**
* An import used in the context of a namespace inside a type annotation, such as in `let x: import("http").ServerRequest`.
*/
class ImportNamespaceAccess extends NamespaceAccess, ImportTypeExpr, @import_namespace_access { }
class ImportNamespaceAccess extends NamespaceAccess, ImportTypeExpr, @import_namespace_access {
override string getAPrimaryQlClass() { result = "ImportNamespaceAccess" }
}
/**
* An import used in the context of a variable type, such as in `let x: typeof import("fs")`.
*/
class ImportVarTypeAccess extends VarTypeAccess, ImportTypeExpr, @import_var_type_access { }
class ImportVarTypeAccess extends VarTypeAccess, ImportTypeExpr, @import_var_type_access {
override string getAPrimaryQlClass() { result = "ImportVarTypeAccess" }
}
/**
* A TypeScript enum declaration, such as the following declaration:
@@ -1463,6 +1555,8 @@ class EnumDeclaration extends NamespaceDefinition, @enum_declaration, AST::Value
predicate isConst() { is_const_enum(this) }
override ControlFlowNode getFirstControlFlowNode() { result = getIdentifier() }
override string getAPrimaryQlClass() { result = "EnumDeclaration" }
}
/**
@@ -1508,6 +1602,8 @@ class EnumMember extends ASTNode, @enum_member {
* Gets the canonical name of the type defined by this enum member.
*/
TypeName getTypeName() { ast_node_symbol(this, result) }
override string getAPrimaryQlClass() { result = "EnumMember" }
}
/**

View File

@@ -235,6 +235,8 @@ class VarRef extends @varref, Identifier, BindingPattern, LexicalRef {
override predicate isImpure() { none() }
override Expr getUnderlyingReference() { result = this }
override string getAPrimaryQlClass() { result = "VarRef" }
}
/**
@@ -395,7 +397,7 @@ class BindingPattern extends @pattern, Expr {
*
* Only the outermost part of a binding pattern can have a type annotation.
* For instance, in the declaration,
* <pre>
*<pre>
* var {x}: Point
* </pre>
* the variable `x` has no type annotation, whereas the pattern `{x}` has the type
@@ -450,6 +452,8 @@ class VarDecl extends @var_decl, VarRef, LexicalDecl {
or
exists(BindingPattern p | this = p.getABindingVarRef() and p.isLValue())
}
override string getAPrimaryQlClass() { result = "VarDecl" }
}
/**
@@ -520,6 +524,8 @@ class ArrayPattern extends DestructuringPattern, @array_pattern {
override VarRef getABindingVarRef() {
result = getAnElement().(BindingPattern).getABindingVarRef()
}
override string getAPrimaryQlClass() { result = "ArrayPattern" }
}
/**
@@ -559,6 +565,8 @@ class ObjectPattern extends DestructuringPattern, @object_pattern {
result = getAPropertyPattern().getValuePattern().(BindingPattern).getABindingVarRef() or
result = getRest().(BindingPattern).getABindingVarRef()
}
override string getAPrimaryQlClass() { result = "ObjectPattern" }
}
/**
@@ -617,6 +625,8 @@ class PropertyPattern extends @property, ASTNode {
override ControlFlowNode getFirstControlFlowNode() {
result = getNameExpr().getFirstControlFlowNode()
}
override string getAPrimaryQlClass() { result = "PropertyPattern" }
}
/**
@@ -653,6 +663,8 @@ class VariableDeclarator extends Expr, @var_declarator {
override ControlFlowNode getFirstControlFlowNode() {
result = getBindingPattern().getFirstControlFlowNode()
}
override string getAPrimaryQlClass() { result = "VariableDeclarator" }
}
/**
@@ -783,6 +795,8 @@ class Parameter extends BindingPattern {
* ```
*/
predicate isDeclaredOptional() { is_optional_parameter_declaration(this) }
override string getAPrimaryQlClass() { result = "Parameter" }
}
/**
@@ -824,6 +838,8 @@ class SimpleParameter extends Parameter, VarDecl {
paramName <= tagName
)
}
override string getAPrimaryQlClass() { result = "SimpleParameter" }
}
/**
@@ -844,6 +860,8 @@ class FieldParameter extends SimpleParameter {
/** Gets the field induced by this parameter. */
ParameterField getField() { result.getParameter() = this }
override string getAPrimaryQlClass() { result = "FieldParameter" }
}
/**

View File

@@ -83,6 +83,8 @@ class YAMLNode extends @yaml_node, Locatable {
* Gets the YAML value this node corresponds to after resolving aliases and includes.
*/
YAMLValue eval() { result = this }
override string getAPrimaryQlClass() { result = "YAMLNode" }
}
/**
@@ -142,6 +144,8 @@ class YAMLScalar extends YAMLValue, @yaml_scalar_node {
* Gets the value of this scalar, as a string.
*/
string getValue() { yaml_scalars(this, _, result) }
override string getAPrimaryQlClass() { result = "YAMLScalar" }
}
/**
@@ -304,7 +308,9 @@ class YAMLInclude extends YAMLScalar {
* - -blue
* ```
*/
class YAMLCollection extends YAMLValue, @yaml_collection_node { }
class YAMLCollection extends YAMLValue, @yaml_collection_node {
override string getAPrimaryQlClass() { result = "YAMLCollection" }
}
/**
* A YAML mapping.
@@ -356,6 +362,8 @@ class YAMLMapping extends YAMLCollection, @yaml_mapping_node {
* Gets the value that this mapping maps `key` to.
*/
YAMLValue lookup(string key) { exists(YAMLScalar s | s.getValue() = key | maps(s, result)) }
override string getAPrimaryQlClass() { result = "YAMLMapping" }
}
/**
@@ -379,6 +387,8 @@ class YAMLSequence extends YAMLCollection, @yaml_sequence_node {
* Gets the `i`th element in this sequence, as a YAML value.
*/
YAMLValue getElement(int i) { result = getElementNode(i).eval() }
override string getAPrimaryQlClass() { result = "YAMLSequence" }
}
/**
@@ -400,6 +410,8 @@ class YAMLAliasNode extends YAMLNode, @yaml_alias_node {
* Gets the target anchor this alias refers to.
*/
string getTarget() { yaml_aliases(this, result) }
override string getAPrimaryQlClass() { result = "YAMLAliasNode" }
}
/**

View File

@@ -0,0 +1,954 @@
nodes
| arrays.js:1:1:68:2 | [ParExpr] (functi ... } }) | semmle.label | [ParExpr] (functi ... } }) |
| arrays.js:1:1:68:3 | [ExprStmt] (functi ... } }); | semmle.label | [ExprStmt] (functi ... } }); |
| arrays.js:1:1:68:3 | [ExprStmt] (functi ... } }); | semmle.order | 1 |
| arrays.js:1:2:68:1 | [FunctionExpr] functio ... K } } | semmle.label | [FunctionExpr] functio ... K } } |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | semmle.label | [BlockStmt] { let ... K } } |
| arrays.js:2:3:2:24 | [DeclStmt] let source = ... | semmle.label | [DeclStmt] let source = ... |
| arrays.js:2:7:2:12 | [VarDecl] source | semmle.label | [VarDecl] source |
| arrays.js:2:7:2:23 | [VariableDeclarator] source = "source" | semmle.label | [VariableDeclarator] source = "source" |
| arrays.js:2:16:2:23 | [Literal] "source" | semmle.label | [Literal] "source" |
| arrays.js:4:3:4:28 | [DeclStmt] var obj = ... | semmle.label | [DeclStmt] var obj = ... |
| arrays.js:4:7:4:9 | [VarDecl] obj | semmle.label | [VarDecl] obj |
| arrays.js:4:7:4:27 | [VariableDeclarator] obj = { ... ource } | semmle.label | [VariableDeclarator] obj = { ... ource } |
| arrays.js:4:13:4:27 | [ObjectExpr] {foo: ...} | semmle.label | [ObjectExpr] {foo: ...} |
| arrays.js:4:15:4:17 | [Label] foo | semmle.label | [Label] foo |
| arrays.js:4:15:4:25 | [Property] foo: source | semmle.label | [Property] foo: source |
| arrays.js:4:20:4:25 | [VarRef] source | semmle.label | [VarRef] source |
| arrays.js:5:3:5:6 | [VarRef] sink | semmle.label | [VarRef] sink |
| arrays.js:5:3:5:15 | [CallExpr] sink(obj.foo) | semmle.label | [CallExpr] sink(obj.foo) |
| arrays.js:5:3:5:16 | [ExprStmt] sink(obj.foo); | semmle.label | [ExprStmt] sink(obj.foo); |
| arrays.js:5:8:5:10 | [VarRef] obj | semmle.label | [VarRef] obj |
| arrays.js:5:8:5:14 | [DotExpr] obj.foo | semmle.label | [DotExpr] obj.foo |
| arrays.js:5:12:5:14 | [Label] foo | semmle.label | [Label] foo |
| arrays.js:7:3:7:15 | [DeclStmt] var arr = ... | semmle.label | [DeclStmt] var arr = ... |
| arrays.js:7:7:7:9 | [VarDecl] arr | semmle.label | [VarDecl] arr |
| arrays.js:7:7:7:14 | [VariableDeclarator] arr = [] | semmle.label | [VariableDeclarator] arr = [] |
| arrays.js:7:13:7:14 | [ArrayExpr] [] | semmle.label | [ArrayExpr] [] |
| arrays.js:8:3:8:5 | [VarRef] arr | semmle.label | [VarRef] arr |
| arrays.js:8:3:8:10 | [DotExpr] arr.push | semmle.label | [DotExpr] arr.push |
| arrays.js:8:3:8:18 | [MethodCallExpr] arr.push(source) | semmle.label | [MethodCallExpr] arr.push(source) |
| arrays.js:8:3:8:19 | [ExprStmt] arr.push(source); | semmle.label | [ExprStmt] arr.push(source); |
| arrays.js:8:7:8:10 | [Label] push | semmle.label | [Label] push |
| arrays.js:8:12:8:17 | [VarRef] source | semmle.label | [VarRef] source |
| arrays.js:10:3:12:3 | [ForStmt] for (va ... OK } | semmle.label | [ForStmt] for (va ... OK } |
| arrays.js:10:8:10:16 | [DeclStmt] var i = ... | semmle.label | [DeclStmt] var i = ... |
| arrays.js:10:12:10:12 | [VarDecl] i | semmle.label | [VarDecl] i |
| arrays.js:10:12:10:16 | [VariableDeclarator] i = 0 | semmle.label | [VariableDeclarator] i = 0 |
| arrays.js:10:16:10:16 | [Literal] 0 | semmle.label | [Literal] 0 |
| arrays.js:10:19:10:19 | [VarRef] i | semmle.label | [VarRef] i |
| arrays.js:10:19:10:32 | [BinaryExpr] i < arr.length | semmle.label | [BinaryExpr] i < arr.length |
| arrays.js:10:23:10:25 | [VarRef] arr | semmle.label | [VarRef] arr |
| arrays.js:10:23:10:32 | [DotExpr] arr.length | semmle.label | [DotExpr] arr.length |
| arrays.js:10:27:10:32 | [Label] length | semmle.label | [Label] length |
| arrays.js:10:35:10:35 | [VarRef] i | semmle.label | [VarRef] i |
| arrays.js:10:35:10:37 | [UpdateExpr] i++ | semmle.label | [UpdateExpr] i++ |
| arrays.js:10:40:12:3 | [BlockStmt] { s ... OK } | semmle.label | [BlockStmt] { s ... OK } |
| arrays.js:11:5:11:8 | [VarRef] sink | semmle.label | [VarRef] sink |
| arrays.js:11:5:11:16 | [CallExpr] sink(arr[i]) | semmle.label | [CallExpr] sink(arr[i]) |
| arrays.js:11:5:11:17 | [ExprStmt] sink(arr[i]); | semmle.label | [ExprStmt] sink(arr[i]); |
| arrays.js:11:10:11:12 | [VarRef] arr | semmle.label | [VarRef] arr |
| arrays.js:11:10:11:15 | [IndexExpr] arr[i] | semmle.label | [IndexExpr] arr[i] |
| arrays.js:11:14:11:14 | [VarRef] i | semmle.label | [VarRef] i |
| arrays.js:15:3:15:5 | [VarRef] arr | semmle.label | [VarRef] arr |
| arrays.js:15:3:15:13 | [DotExpr] arr.forEach | semmle.label | [DotExpr] arr.forEach |
| arrays.js:15:3:15:29 | [MethodCallExpr] arr.for ... ink(e)) | semmle.label | [MethodCallExpr] arr.for ... ink(e)) |
| arrays.js:15:3:15:30 | [ExprStmt] arr.for ... nk(e)); | semmle.label | [ExprStmt] arr.for ... nk(e)); |
| arrays.js:15:7:15:13 | [Label] forEach | semmle.label | [Label] forEach |
| arrays.js:15:15:15:28 | [ArrowFunctionExpr] (e) => sink(e) | semmle.label | [ArrowFunctionExpr] (e) => sink(e) |
| arrays.js:15:16:15:16 | [SimpleParameter] e | semmle.label | [SimpleParameter] e |
| arrays.js:15:22:15:25 | [VarRef] sink | semmle.label | [VarRef] sink |
| arrays.js:15:22:15:28 | [CallExpr] sink(e) | semmle.label | [CallExpr] sink(e) |
| arrays.js:15:27:15:27 | [VarRef] e | semmle.label | [VarRef] e |
| arrays.js:16:3:16:5 | [VarRef] arr | semmle.label | [VarRef] arr |
| arrays.js:16:3:16:9 | [DotExpr] arr.map | semmle.label | [DotExpr] arr.map |
| arrays.js:16:3:16:25 | [MethodCallExpr] arr.map ... ink(e)) | semmle.label | [MethodCallExpr] arr.map ... ink(e)) |
| arrays.js:16:3:16:26 | [ExprStmt] arr.map ... nk(e)); | semmle.label | [ExprStmt] arr.map ... nk(e)); |
| arrays.js:16:7:16:9 | [Label] map | semmle.label | [Label] map |
| arrays.js:16:11:16:24 | [ArrowFunctionExpr] (e) => sink(e) | semmle.label | [ArrowFunctionExpr] (e) => sink(e) |
| arrays.js:16:12:16:12 | [SimpleParameter] e | semmle.label | [SimpleParameter] e |
| arrays.js:16:18:16:21 | [VarRef] sink | semmle.label | [VarRef] sink |
| arrays.js:16:18:16:24 | [CallExpr] sink(e) | semmle.label | [CallExpr] sink(e) |
| arrays.js:16:23:16:23 | [VarRef] e | semmle.label | [VarRef] e |
| arrays.js:18:3:18:11 | [ArrayExpr] [1, 2, 3] | semmle.label | [ArrayExpr] [1, 2, 3] |
| arrays.js:18:3:18:15 | [DotExpr] [1, 2, 3].map | semmle.label | [DotExpr] [1, 2, 3].map |
| arrays.js:18:3:18:30 | [MethodCallExpr] [1, 2, ... ource") | semmle.label | [MethodCallExpr] [1, 2, ... ource") |
| arrays.js:18:3:18:38 | [DotExpr] [1, 2, ... forEach | semmle.label | [DotExpr] [1, 2, ... forEach |
| arrays.js:18:3:18:52 | [MethodCallExpr] [1, 2, ... ink(e)) | semmle.label | [MethodCallExpr] [1, 2, ... ink(e)) |
| arrays.js:18:3:18:53 | [ExprStmt] [1, 2, ... nk(e)); | semmle.label | [ExprStmt] [1, 2, ... nk(e)); |
| arrays.js:18:4:18:4 | [Literal] 1 | semmle.label | [Literal] 1 |
| arrays.js:18:7:18:7 | [Literal] 2 | semmle.label | [Literal] 2 |
| arrays.js:18:10:18:10 | [Literal] 3 | semmle.label | [Literal] 3 |
| arrays.js:18:13:18:15 | [Label] map | semmle.label | [Label] map |
| arrays.js:18:17:18:17 | [SimpleParameter] i | semmle.label | [SimpleParameter] i |
| arrays.js:18:17:18:29 | [ArrowFunctionExpr] i => "source" | semmle.label | [ArrowFunctionExpr] i => "source" |
| arrays.js:18:22:18:29 | [Literal] "source" | semmle.label | [Literal] "source" |
| arrays.js:18:32:18:38 | [Label] forEach | semmle.label | [Label] forEach |
| arrays.js:18:40:18:40 | [SimpleParameter] e | semmle.label | [SimpleParameter] e |
| arrays.js:18:40:18:51 | [ArrowFunctionExpr] e => sink(e) | semmle.label | [ArrowFunctionExpr] e => sink(e) |
| arrays.js:18:45:18:48 | [VarRef] sink | semmle.label | [VarRef] sink |
| arrays.js:18:45:18:51 | [CallExpr] sink(e) | semmle.label | [CallExpr] sink(e) |
| arrays.js:18:50:18:50 | [VarRef] e | semmle.label | [VarRef] e |
| arrays.js:20:3:20:6 | [VarRef] sink | semmle.label | [VarRef] sink |
| arrays.js:20:3:20:17 | [CallExpr] sink(arr.pop()) | semmle.label | [CallExpr] sink(arr.pop()) |
| arrays.js:20:3:20:18 | [ExprStmt] sink(arr.pop()); | semmle.label | [ExprStmt] sink(arr.pop()); |
| arrays.js:20:8:20:10 | [VarRef] arr | semmle.label | [VarRef] arr |
| arrays.js:20:8:20:14 | [DotExpr] arr.pop | semmle.label | [DotExpr] arr.pop |
| arrays.js:20:8:20:16 | [MethodCallExpr] arr.pop() | semmle.label | [MethodCallExpr] arr.pop() |
| arrays.js:20:12:20:14 | [Label] pop | semmle.label | [Label] pop |
| arrays.js:22:3:22:24 | [DeclStmt] var arr2 = ... | semmle.label | [DeclStmt] var arr2 = ... |
| arrays.js:22:7:22:10 | [VarDecl] arr2 | semmle.label | [VarDecl] arr2 |
| arrays.js:22:7:22:23 | [VariableDeclarator] arr2 = ["source"] | semmle.label | [VariableDeclarator] arr2 = ["source"] |
| arrays.js:22:14:22:23 | [ArrayExpr] ["source"] | semmle.label | [ArrayExpr] ["source"] |
| arrays.js:22:15:22:22 | [Literal] "source" | semmle.label | [Literal] "source" |
| arrays.js:23:3:23:6 | [VarRef] sink | semmle.label | [VarRef] sink |
| arrays.js:23:3:23:18 | [CallExpr] sink(arr2.pop()) | semmle.label | [CallExpr] sink(arr2.pop()) |
| arrays.js:23:3:23:19 | [ExprStmt] sink(arr2.pop()); | semmle.label | [ExprStmt] sink(arr2.pop()); |
| arrays.js:23:8:23:11 | [VarRef] arr2 | semmle.label | [VarRef] arr2 |
| arrays.js:23:8:23:15 | [DotExpr] arr2.pop | semmle.label | [DotExpr] arr2.pop |
| arrays.js:23:8:23:17 | [MethodCallExpr] arr2.pop() | semmle.label | [MethodCallExpr] arr2.pop() |
| arrays.js:23:13:23:15 | [Label] pop | semmle.label | [Label] pop |
| arrays.js:25:3:25:24 | [DeclStmt] var arr3 = ... | semmle.label | [DeclStmt] var arr3 = ... |
| arrays.js:25:7:25:10 | [VarDecl] arr3 | semmle.label | [VarDecl] arr3 |
| arrays.js:25:7:25:23 | [VariableDeclarator] arr3 = ["source"] | semmle.label | [VariableDeclarator] arr3 = ["source"] |
| arrays.js:25:14:25:23 | [ArrayExpr] ["source"] | semmle.label | [ArrayExpr] ["source"] |
| arrays.js:25:15:25:22 | [Literal] "source" | semmle.label | [Literal] "source" |
| arrays.js:26:3:26:6 | [VarRef] sink | semmle.label | [VarRef] sink |
| arrays.js:26:3:26:18 | [CallExpr] sink(arr3.pop()) | semmle.label | [CallExpr] sink(arr3.pop()) |
| arrays.js:26:3:26:19 | [ExprStmt] sink(arr3.pop()); | semmle.label | [ExprStmt] sink(arr3.pop()); |
| arrays.js:26:8:26:11 | [VarRef] arr3 | semmle.label | [VarRef] arr3 |
| arrays.js:26:8:26:15 | [DotExpr] arr3.pop | semmle.label | [DotExpr] arr3.pop |
| arrays.js:26:8:26:17 | [MethodCallExpr] arr3.pop() | semmle.label | [MethodCallExpr] arr3.pop() |
| arrays.js:26:13:26:15 | [Label] pop | semmle.label | [Label] pop |
| arrays.js:28:3:28:16 | [DeclStmt] var arr4 = ... | semmle.label | [DeclStmt] var arr4 = ... |
| arrays.js:28:7:28:10 | [VarDecl] arr4 | semmle.label | [VarDecl] arr4 |
| arrays.js:28:7:28:15 | [VariableDeclarator] arr4 = [] | semmle.label | [VariableDeclarator] arr4 = [] |
| arrays.js:28:14:28:15 | [ArrayExpr] [] | semmle.label | [ArrayExpr] [] |
| arrays.js:29:3:29:6 | [VarRef] arr4 | semmle.label | [VarRef] arr4 |
| arrays.js:29:3:29:13 | [DotExpr] arr4.splice | semmle.label | [DotExpr] arr4.splice |
| arrays.js:29:3:29:29 | [MethodCallExpr] arr4.sp ... ource") | semmle.label | [MethodCallExpr] arr4.sp ... ource") |
| arrays.js:29:3:29:30 | [ExprStmt] arr4.sp ... urce"); | semmle.label | [ExprStmt] arr4.sp ... urce"); |
| arrays.js:29:8:29:13 | [Label] splice | semmle.label | [Label] splice |
| arrays.js:29:15:29:15 | [Literal] 0 | semmle.label | [Literal] 0 |
| arrays.js:29:18:29:18 | [Literal] 0 | semmle.label | [Literal] 0 |
| arrays.js:29:21:29:28 | [Literal] "source" | semmle.label | [Literal] "source" |
| arrays.js:30:3:30:6 | [VarRef] sink | semmle.label | [VarRef] sink |
| arrays.js:30:3:30:18 | [CallExpr] sink(arr4.pop()) | semmle.label | [CallExpr] sink(arr4.pop()) |
| arrays.js:30:3:30:19 | [ExprStmt] sink(arr4.pop()); | semmle.label | [ExprStmt] sink(arr4.pop()); |
| arrays.js:30:8:30:11 | [VarRef] arr4 | semmle.label | [VarRef] arr4 |
| arrays.js:30:8:30:15 | [DotExpr] arr4.pop | semmle.label | [DotExpr] arr4.pop |
| arrays.js:30:8:30:17 | [MethodCallExpr] arr4.pop() | semmle.label | [MethodCallExpr] arr4.pop() |
| arrays.js:30:13:30:15 | [Label] pop | semmle.label | [Label] pop |
| arrays.js:32:3:32:29 | [DeclStmt] var arr5 = ... | semmle.label | [DeclStmt] var arr5 = ... |
| arrays.js:32:7:32:10 | [VarDecl] arr5 | semmle.label | [VarDecl] arr5 |
| arrays.js:32:7:32:28 | [VariableDeclarator] arr5 = ... t(arr4) | semmle.label | [VariableDeclarator] arr5 = ... t(arr4) |
| arrays.js:32:14:32:15 | [ArrayExpr] [] | semmle.label | [ArrayExpr] [] |
| arrays.js:32:14:32:22 | [DotExpr] [].concat | semmle.label | [DotExpr] [].concat |
| arrays.js:32:14:32:28 | [MethodCallExpr] [].concat(arr4) | semmle.label | [MethodCallExpr] [].concat(arr4) |
| arrays.js:32:17:32:22 | [Label] concat | semmle.label | [Label] concat |
| arrays.js:32:24:32:27 | [VarRef] arr4 | semmle.label | [VarRef] arr4 |
| arrays.js:33:3:33:6 | [VarRef] sink | semmle.label | [VarRef] sink |
| arrays.js:33:3:33:18 | [CallExpr] sink(arr5.pop()) | semmle.label | [CallExpr] sink(arr5.pop()) |
| arrays.js:33:3:33:19 | [ExprStmt] sink(arr5.pop()); | semmle.label | [ExprStmt] sink(arr5.pop()); |
| arrays.js:33:8:33:11 | [VarRef] arr5 | semmle.label | [VarRef] arr5 |
| arrays.js:33:8:33:15 | [DotExpr] arr5.pop | semmle.label | [DotExpr] arr5.pop |
| arrays.js:33:8:33:17 | [MethodCallExpr] arr5.pop() | semmle.label | [MethodCallExpr] arr5.pop() |
| arrays.js:33:13:33:15 | [Label] pop | semmle.label | [Label] pop |
| arrays.js:35:3:35:6 | [VarRef] sink | semmle.label | [VarRef] sink |
| arrays.js:35:3:35:27 | [CallExpr] sink(ar ... .pop()) | semmle.label | [CallExpr] sink(ar ... .pop()) |
| arrays.js:35:3:35:28 | [ExprStmt] sink(ar ... pop()); | semmle.label | [ExprStmt] sink(ar ... pop()); |
| arrays.js:35:8:35:11 | [VarRef] arr5 | semmle.label | [VarRef] arr5 |
| arrays.js:35:8:35:17 | [DotExpr] arr5.slice | semmle.label | [DotExpr] arr5.slice |
| arrays.js:35:8:35:20 | [MethodCallExpr] arr5.slice(2) | semmle.label | [MethodCallExpr] arr5.slice(2) |
| arrays.js:35:8:35:24 | [DotExpr] arr5.slice(2).pop | semmle.label | [DotExpr] arr5.slice(2).pop |
| arrays.js:35:8:35:26 | [MethodCallExpr] arr5.slice(2).pop() | semmle.label | [MethodCallExpr] arr5.slice(2).pop() |
| arrays.js:35:13:35:17 | [Label] slice | semmle.label | [Label] slice |
| arrays.js:35:19:35:19 | [Literal] 2 | semmle.label | [Literal] 2 |
| arrays.js:35:22:35:24 | [Label] pop | semmle.label | [Label] pop |
| arrays.js:37:3:37:16 | [DeclStmt] var arr6 = ... | semmle.label | [DeclStmt] var arr6 = ... |
| arrays.js:37:7:37:10 | [VarDecl] arr6 | semmle.label | [VarDecl] arr6 |
| arrays.js:37:7:37:15 | [VariableDeclarator] arr6 = [] | semmle.label | [VariableDeclarator] arr6 = [] |
| arrays.js:37:14:37:15 | [ArrayExpr] [] | semmle.label | [ArrayExpr] [] |
| arrays.js:38:3:40:3 | [ForStmt] for (va ... i]; } | semmle.label | [ForStmt] for (va ... i]; } |
| arrays.js:38:8:38:16 | [DeclStmt] var i = ... | semmle.label | [DeclStmt] var i = ... |
| arrays.js:38:12:38:12 | [VarDecl] i | semmle.label | [VarDecl] i |
| arrays.js:38:12:38:16 | [VariableDeclarator] i = 0 | semmle.label | [VariableDeclarator] i = 0 |
| arrays.js:38:16:38:16 | [Literal] 0 | semmle.label | [Literal] 0 |
| arrays.js:38:19:38:19 | [VarRef] i | semmle.label | [VarRef] i |
| arrays.js:38:19:38:33 | [BinaryExpr] i < arr5.length | semmle.label | [BinaryExpr] i < arr5.length |
| arrays.js:38:23:38:26 | [VarRef] arr5 | semmle.label | [VarRef] arr5 |
| arrays.js:38:23:38:33 | [DotExpr] arr5.length | semmle.label | [DotExpr] arr5.length |
| arrays.js:38:28:38:33 | [Label] length | semmle.label | [Label] length |
| arrays.js:38:36:38:36 | [VarRef] i | semmle.label | [VarRef] i |
| arrays.js:38:36:38:38 | [UpdateExpr] i++ | semmle.label | [UpdateExpr] i++ |
| arrays.js:38:41:40:3 | [BlockStmt] { a ... i]; } | semmle.label | [BlockStmt] { a ... i]; } |
| arrays.js:39:5:39:8 | [VarRef] arr6 | semmle.label | [VarRef] arr6 |
| arrays.js:39:5:39:11 | [IndexExpr] arr6[i] | semmle.label | [IndexExpr] arr6[i] |
| arrays.js:39:5:39:21 | [AssignExpr] arr6[i] = arr5[i] | semmle.label | [AssignExpr] arr6[i] = arr5[i] |
| arrays.js:39:5:39:22 | [ExprStmt] arr6[i] = arr5[i]; | semmle.label | [ExprStmt] arr6[i] = arr5[i]; |
| arrays.js:39:10:39:10 | [VarRef] i | semmle.label | [VarRef] i |
| arrays.js:39:15:39:18 | [VarRef] arr5 | semmle.label | [VarRef] arr5 |
| arrays.js:39:15:39:21 | [IndexExpr] arr5[i] | semmle.label | [IndexExpr] arr5[i] |
| arrays.js:39:20:39:20 | [VarRef] i | semmle.label | [VarRef] i |
| arrays.js:41:3:41:6 | [VarRef] sink | semmle.label | [VarRef] sink |
| arrays.js:41:3:41:18 | [CallExpr] sink(arr6.pop()) | semmle.label | [CallExpr] sink(arr6.pop()) |
| arrays.js:41:3:41:19 | [ExprStmt] sink(arr6.pop()); | semmle.label | [ExprStmt] sink(arr6.pop()); |
| arrays.js:41:8:41:11 | [VarRef] arr6 | semmle.label | [VarRef] arr6 |
| arrays.js:41:8:41:15 | [DotExpr] arr6.pop | semmle.label | [DotExpr] arr6.pop |
| arrays.js:41:8:41:17 | [MethodCallExpr] arr6.pop() | semmle.label | [MethodCallExpr] arr6.pop() |
| arrays.js:41:13:41:15 | [Label] pop | semmle.label | [Label] pop |
| arrays.js:44:3:44:12 | [ArrayExpr] ["source"] | semmle.label | [ArrayExpr] ["source"] |
| arrays.js:44:3:44:20 | [DotExpr] ["source"].forEach | semmle.label | [DotExpr] ["source"].forEach |
| arrays.js:44:3:47:4 | [MethodCallExpr] ["sourc ... t. }) | semmle.label | [MethodCallExpr] ["sourc ... t. }) |
| arrays.js:44:3:47:5 | [ExprStmt] ["sourc ... . }); | semmle.label | [ExprStmt] ["sourc ... . }); |
| arrays.js:44:4:44:11 | [Literal] "source" | semmle.label | [Literal] "source" |
| arrays.js:44:14:44:20 | [Label] forEach | semmle.label | [Label] forEach |
| arrays.js:44:22:47:3 | [ArrowFunctionExpr] (e, i, ... nt. } | semmle.label | [ArrowFunctionExpr] (e, i, ... nt. } |
| arrays.js:44:23:44:23 | [SimpleParameter] e | semmle.label | [SimpleParameter] e |
| arrays.js:44:26:44:26 | [SimpleParameter] i | semmle.label | [SimpleParameter] i |
| arrays.js:44:29:44:31 | [SimpleParameter] ary | semmle.label | [SimpleParameter] ary |
| arrays.js:44:37:47:3 | [BlockStmt] { s ... nt. } | semmle.label | [BlockStmt] { s ... nt. } |
| arrays.js:45:5:45:8 | [VarRef] sink | semmle.label | [VarRef] sink |
| arrays.js:45:5:45:19 | [CallExpr] sink(ary.pop()) | semmle.label | [CallExpr] sink(ary.pop()) |
| arrays.js:45:5:45:20 | [ExprStmt] sink(ary.pop()); | semmle.label | [ExprStmt] sink(ary.pop()); |
| arrays.js:45:10:45:12 | [VarRef] ary | semmle.label | [VarRef] ary |
| arrays.js:45:10:45:16 | [DotExpr] ary.pop | semmle.label | [DotExpr] ary.pop |
| arrays.js:45:10:45:18 | [MethodCallExpr] ary.pop() | semmle.label | [MethodCallExpr] ary.pop() |
| arrays.js:45:14:45:16 | [Label] pop | semmle.label | [Label] pop |
| arrays.js:46:5:46:8 | [VarRef] sink | semmle.label | [VarRef] sink |
| arrays.js:46:5:46:13 | [CallExpr] sink(ary) | semmle.label | [CallExpr] sink(ary) |
| arrays.js:46:5:46:14 | [ExprStmt] sink(ary); | semmle.label | [ExprStmt] sink(ary); |
| arrays.js:46:10:46:12 | [VarRef] ary | semmle.label | [VarRef] ary |
| arrays.js:49:3:49:6 | [VarRef] sink | semmle.label | [VarRef] sink |
| arrays.js:49:3:49:14 | [CallExpr] sink(arr[0]) | semmle.label | [CallExpr] sink(arr[0]) |
| arrays.js:49:3:49:15 | [ExprStmt] sink(arr[0]); | semmle.label | [ExprStmt] sink(arr[0]); |
| arrays.js:49:8:49:10 | [VarRef] arr | semmle.label | [VarRef] arr |
| arrays.js:49:8:49:13 | [IndexExpr] arr[0] | semmle.label | [IndexExpr] arr[0] |
| arrays.js:49:12:49:12 | [Literal] 0 | semmle.label | [Literal] 0 |
| arrays.js:51:3:53:3 | [ForOfStmt] for (co ... OK } | semmle.label | [ForOfStmt] for (co ... OK } |
| arrays.js:51:8:51:14 | [DeclStmt] const x = ... | semmle.label | [DeclStmt] const x = ... |
| arrays.js:51:14:51:14 | [VarDecl] x | semmle.label | [VarDecl] x |
| arrays.js:51:14:51:14 | [VariableDeclarator] x | semmle.label | [VariableDeclarator] x |
| arrays.js:51:19:51:21 | [VarRef] arr | semmle.label | [VarRef] arr |
| arrays.js:51:24:53:3 | [BlockStmt] { s ... OK } | semmle.label | [BlockStmt] { s ... OK } |
| arrays.js:52:5:52:8 | [VarRef] sink | semmle.label | [VarRef] sink |
| arrays.js:52:5:52:11 | [CallExpr] sink(x) | semmle.label | [CallExpr] sink(x) |
| arrays.js:52:5:52:12 | [ExprStmt] sink(x); | semmle.label | [ExprStmt] sink(x); |
| arrays.js:52:10:52:10 | [VarRef] x | semmle.label | [VarRef] x |
| arrays.js:55:3:57:3 | [ForOfStmt] for (co ... OK } | semmle.label | [ForOfStmt] for (co ... OK } |
| arrays.js:55:8:55:14 | [DeclStmt] const x = ... | semmle.label | [DeclStmt] const x = ... |
| arrays.js:55:14:55:14 | [VarDecl] x | semmle.label | [VarDecl] x |
| arrays.js:55:14:55:14 | [VariableDeclarator] x | semmle.label | [VariableDeclarator] x |
| arrays.js:55:19:55:23 | [VarRef] Array | semmle.label | [VarRef] Array |
| arrays.js:55:19:55:28 | [DotExpr] Array.from | semmle.label | [DotExpr] Array.from |
| arrays.js:55:19:55:33 | [MethodCallExpr] Array.from(arr) | semmle.label | [MethodCallExpr] Array.from(arr) |
| arrays.js:55:25:55:28 | [Label] from | semmle.label | [Label] from |
| arrays.js:55:30:55:32 | [VarRef] arr | semmle.label | [VarRef] arr |
| arrays.js:55:36:57:3 | [BlockStmt] { s ... OK } | semmle.label | [BlockStmt] { s ... OK } |
| arrays.js:56:5:56:8 | [VarRef] sink | semmle.label | [VarRef] sink |
| arrays.js:56:5:56:11 | [CallExpr] sink(x) | semmle.label | [CallExpr] sink(x) |
| arrays.js:56:5:56:12 | [ExprStmt] sink(x); | semmle.label | [ExprStmt] sink(x); |
| arrays.js:56:10:56:10 | [VarRef] x | semmle.label | [VarRef] x |
| arrays.js:59:3:61:3 | [ForOfStmt] for (co ... OK } | semmle.label | [ForOfStmt] for (co ... OK } |
| arrays.js:59:8:59:14 | [DeclStmt] const x = ... | semmle.label | [DeclStmt] const x = ... |
| arrays.js:59:14:59:14 | [VarDecl] x | semmle.label | [VarDecl] x |
| arrays.js:59:14:59:14 | [VariableDeclarator] x | semmle.label | [VariableDeclarator] x |
| arrays.js:59:19:59:26 | [ArrayExpr] [...arr] | semmle.label | [ArrayExpr] [...arr] |
| arrays.js:59:20:59:25 | [SpreadElement] ...arr | semmle.label | [SpreadElement] ...arr |
| arrays.js:59:23:59:25 | [VarRef] arr | semmle.label | [VarRef] arr |
| arrays.js:59:29:61:3 | [BlockStmt] { s ... OK } | semmle.label | [BlockStmt] { s ... OK } |
| arrays.js:60:5:60:8 | [VarRef] sink | semmle.label | [VarRef] sink |
| arrays.js:60:5:60:11 | [CallExpr] sink(x) | semmle.label | [CallExpr] sink(x) |
| arrays.js:60:5:60:12 | [ExprStmt] sink(x); | semmle.label | [ExprStmt] sink(x); |
| arrays.js:60:10:60:10 | [VarRef] x | semmle.label | [VarRef] x |
| arrays.js:63:3:63:16 | [DeclStmt] var arr7 = ... | semmle.label | [DeclStmt] var arr7 = ... |
| arrays.js:63:7:63:10 | [VarDecl] arr7 | semmle.label | [VarDecl] arr7 |
| arrays.js:63:7:63:15 | [VariableDeclarator] arr7 = [] | semmle.label | [VariableDeclarator] arr7 = [] |
| arrays.js:63:14:63:15 | [ArrayExpr] [] | semmle.label | [ArrayExpr] [] |
| arrays.js:64:3:64:6 | [VarRef] arr7 | semmle.label | [VarRef] arr7 |
| arrays.js:64:3:64:11 | [DotExpr] arr7.push | semmle.label | [DotExpr] arr7.push |
| arrays.js:64:3:64:19 | [MethodCallExpr] arr7.push(...arr) | semmle.label | [MethodCallExpr] arr7.push(...arr) |
| arrays.js:64:3:64:20 | [ExprStmt] arr7.push(...arr); | semmle.label | [ExprStmt] arr7.push(...arr); |
| arrays.js:64:8:64:11 | [Label] push | semmle.label | [Label] push |
| arrays.js:64:13:64:18 | [SpreadElement] ...arr | semmle.label | [SpreadElement] ...arr |
| arrays.js:64:16:64:18 | [VarRef] arr | semmle.label | [VarRef] arr |
| arrays.js:65:3:67:3 | [ForOfStmt] for (co ... OK } | semmle.label | [ForOfStmt] for (co ... OK } |
| arrays.js:65:8:65:14 | [DeclStmt] const x = ... | semmle.label | [DeclStmt] const x = ... |
| arrays.js:65:14:65:14 | [VarDecl] x | semmle.label | [VarDecl] x |
| arrays.js:65:14:65:14 | [VariableDeclarator] x | semmle.label | [VariableDeclarator] x |
| arrays.js:65:19:65:22 | [VarRef] arr7 | semmle.label | [VarRef] arr7 |
| arrays.js:65:25:67:3 | [BlockStmt] { s ... OK } | semmle.label | [BlockStmt] { s ... OK } |
| arrays.js:66:5:66:8 | [VarRef] sink | semmle.label | [VarRef] sink |
| arrays.js:66:5:66:11 | [CallExpr] sink(x) | semmle.label | [CallExpr] sink(x) |
| arrays.js:66:5:66:12 | [ExprStmt] sink(x); | semmle.label | [ExprStmt] sink(x); |
| arrays.js:66:10:66:10 | [VarRef] x | semmle.label | [VarRef] x |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) |
| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) |
| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) |
| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) |
| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) |
edges
| arrays.js:1:1:68:2 | [ParExpr] (functi ... } }) | arrays.js:1:2:68:1 | [FunctionExpr] functio ... K } } | semmle.label | 1 |
| arrays.js:1:1:68:2 | [ParExpr] (functi ... } }) | arrays.js:1:2:68:1 | [FunctionExpr] functio ... K } } | semmle.order | 1 |
| arrays.js:1:1:68:3 | [ExprStmt] (functi ... } }); | arrays.js:1:1:68:2 | [ParExpr] (functi ... } }) | semmle.label | 1 |
| arrays.js:1:1:68:3 | [ExprStmt] (functi ... } }); | arrays.js:1:1:68:2 | [ParExpr] (functi ... } }) | semmle.order | 1 |
| arrays.js:1:2:68:1 | [FunctionExpr] functio ... K } } | arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | semmle.label | 5 |
| arrays.js:1:2:68:1 | [FunctionExpr] functio ... K } } | arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | semmle.order | 5 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:2:3:2:24 | [DeclStmt] let source = ... | semmle.label | 1 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:2:3:2:24 | [DeclStmt] let source = ... | semmle.order | 1 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:4:3:4:28 | [DeclStmt] var obj = ... | semmle.label | 2 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:4:3:4:28 | [DeclStmt] var obj = ... | semmle.order | 2 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:5:3:5:16 | [ExprStmt] sink(obj.foo); | semmle.label | 3 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:5:3:5:16 | [ExprStmt] sink(obj.foo); | semmle.order | 3 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:7:3:7:15 | [DeclStmt] var arr = ... | semmle.label | 4 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:7:3:7:15 | [DeclStmt] var arr = ... | semmle.order | 4 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:8:3:8:19 | [ExprStmt] arr.push(source); | semmle.label | 5 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:8:3:8:19 | [ExprStmt] arr.push(source); | semmle.order | 5 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:10:3:12:3 | [ForStmt] for (va ... OK } | semmle.label | 6 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:10:3:12:3 | [ForStmt] for (va ... OK } | semmle.order | 6 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:15:3:15:30 | [ExprStmt] arr.for ... nk(e)); | semmle.label | 7 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:15:3:15:30 | [ExprStmt] arr.for ... nk(e)); | semmle.order | 7 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:16:3:16:26 | [ExprStmt] arr.map ... nk(e)); | semmle.label | 8 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:16:3:16:26 | [ExprStmt] arr.map ... nk(e)); | semmle.order | 8 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:18:3:18:53 | [ExprStmt] [1, 2, ... nk(e)); | semmle.label | 9 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:18:3:18:53 | [ExprStmt] [1, 2, ... nk(e)); | semmle.order | 9 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:20:3:20:18 | [ExprStmt] sink(arr.pop()); | semmle.label | 10 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:20:3:20:18 | [ExprStmt] sink(arr.pop()); | semmle.order | 10 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:22:3:22:24 | [DeclStmt] var arr2 = ... | semmle.label | 11 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:22:3:22:24 | [DeclStmt] var arr2 = ... | semmle.order | 11 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:23:3:23:19 | [ExprStmt] sink(arr2.pop()); | semmle.label | 12 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:23:3:23:19 | [ExprStmt] sink(arr2.pop()); | semmle.order | 12 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:25:3:25:24 | [DeclStmt] var arr3 = ... | semmle.label | 13 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:25:3:25:24 | [DeclStmt] var arr3 = ... | semmle.order | 13 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:26:3:26:19 | [ExprStmt] sink(arr3.pop()); | semmle.label | 14 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:26:3:26:19 | [ExprStmt] sink(arr3.pop()); | semmle.order | 14 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:28:3:28:16 | [DeclStmt] var arr4 = ... | semmle.label | 15 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:28:3:28:16 | [DeclStmt] var arr4 = ... | semmle.order | 15 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:29:3:29:30 | [ExprStmt] arr4.sp ... urce"); | semmle.label | 16 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:29:3:29:30 | [ExprStmt] arr4.sp ... urce"); | semmle.order | 16 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:30:3:30:19 | [ExprStmt] sink(arr4.pop()); | semmle.label | 17 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:30:3:30:19 | [ExprStmt] sink(arr4.pop()); | semmle.order | 17 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:32:3:32:29 | [DeclStmt] var arr5 = ... | semmle.label | 18 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:32:3:32:29 | [DeclStmt] var arr5 = ... | semmle.order | 18 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:33:3:33:19 | [ExprStmt] sink(arr5.pop()); | semmle.label | 19 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:33:3:33:19 | [ExprStmt] sink(arr5.pop()); | semmle.order | 19 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:35:3:35:28 | [ExprStmt] sink(ar ... pop()); | semmle.label | 20 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:35:3:35:28 | [ExprStmt] sink(ar ... pop()); | semmle.order | 20 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:37:3:37:16 | [DeclStmt] var arr6 = ... | semmle.label | 21 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:37:3:37:16 | [DeclStmt] var arr6 = ... | semmle.order | 21 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:38:3:40:3 | [ForStmt] for (va ... i]; } | semmle.label | 22 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:38:3:40:3 | [ForStmt] for (va ... i]; } | semmle.order | 22 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:41:3:41:19 | [ExprStmt] sink(arr6.pop()); | semmle.label | 23 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:41:3:41:19 | [ExprStmt] sink(arr6.pop()); | semmle.order | 23 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:44:3:47:5 | [ExprStmt] ["sourc ... . }); | semmle.label | 24 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:44:3:47:5 | [ExprStmt] ["sourc ... . }); | semmle.order | 24 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:49:3:49:15 | [ExprStmt] sink(arr[0]); | semmle.label | 25 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:49:3:49:15 | [ExprStmt] sink(arr[0]); | semmle.order | 25 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:51:3:53:3 | [ForOfStmt] for (co ... OK } | semmle.label | 26 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:51:3:53:3 | [ForOfStmt] for (co ... OK } | semmle.order | 26 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:55:3:57:3 | [ForOfStmt] for (co ... OK } | semmle.label | 27 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:55:3:57:3 | [ForOfStmt] for (co ... OK } | semmle.order | 27 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:59:3:61:3 | [ForOfStmt] for (co ... OK } | semmle.label | 28 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:59:3:61:3 | [ForOfStmt] for (co ... OK } | semmle.order | 28 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:63:3:63:16 | [DeclStmt] var arr7 = ... | semmle.label | 29 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:63:3:63:16 | [DeclStmt] var arr7 = ... | semmle.order | 29 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:64:3:64:20 | [ExprStmt] arr7.push(...arr); | semmle.label | 30 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:64:3:64:20 | [ExprStmt] arr7.push(...arr); | semmle.order | 30 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:65:3:67:3 | [ForOfStmt] for (co ... OK } | semmle.label | 31 |
| arrays.js:1:14:68:1 | [BlockStmt] { let ... K } } | arrays.js:65:3:67:3 | [ForOfStmt] for (co ... OK } | semmle.order | 31 |
| arrays.js:2:3:2:24 | [DeclStmt] let source = ... | arrays.js:2:7:2:23 | [VariableDeclarator] source = "source" | semmle.label | 1 |
| arrays.js:2:3:2:24 | [DeclStmt] let source = ... | arrays.js:2:7:2:23 | [VariableDeclarator] source = "source" | semmle.order | 1 |
| arrays.js:2:7:2:23 | [VariableDeclarator] source = "source" | arrays.js:2:7:2:12 | [VarDecl] source | semmle.label | 1 |
| arrays.js:2:7:2:23 | [VariableDeclarator] source = "source" | arrays.js:2:7:2:12 | [VarDecl] source | semmle.order | 1 |
| arrays.js:2:7:2:23 | [VariableDeclarator] source = "source" | arrays.js:2:16:2:23 | [Literal] "source" | semmle.label | 2 |
| arrays.js:2:7:2:23 | [VariableDeclarator] source = "source" | arrays.js:2:16:2:23 | [Literal] "source" | semmle.order | 2 |
| arrays.js:4:3:4:28 | [DeclStmt] var obj = ... | arrays.js:4:7:4:27 | [VariableDeclarator] obj = { ... ource } | semmle.label | 1 |
| arrays.js:4:3:4:28 | [DeclStmt] var obj = ... | arrays.js:4:7:4:27 | [VariableDeclarator] obj = { ... ource } | semmle.order | 1 |
| arrays.js:4:7:4:27 | [VariableDeclarator] obj = { ... ource } | arrays.js:4:7:4:9 | [VarDecl] obj | semmle.label | 1 |
| arrays.js:4:7:4:27 | [VariableDeclarator] obj = { ... ource } | arrays.js:4:7:4:9 | [VarDecl] obj | semmle.order | 1 |
| arrays.js:4:7:4:27 | [VariableDeclarator] obj = { ... ource } | arrays.js:4:13:4:27 | [ObjectExpr] {foo: ...} | semmle.label | 2 |
| arrays.js:4:7:4:27 | [VariableDeclarator] obj = { ... ource } | arrays.js:4:13:4:27 | [ObjectExpr] {foo: ...} | semmle.order | 2 |
| arrays.js:4:13:4:27 | [ObjectExpr] {foo: ...} | arrays.js:4:15:4:25 | [Property] foo: source | semmle.label | 1 |
| arrays.js:4:13:4:27 | [ObjectExpr] {foo: ...} | arrays.js:4:15:4:25 | [Property] foo: source | semmle.order | 1 |
| arrays.js:4:15:4:25 | [Property] foo: source | arrays.js:4:15:4:17 | [Label] foo | semmle.label | 1 |
| arrays.js:4:15:4:25 | [Property] foo: source | arrays.js:4:15:4:17 | [Label] foo | semmle.order | 1 |
| arrays.js:4:15:4:25 | [Property] foo: source | arrays.js:4:20:4:25 | [VarRef] source | semmle.label | 2 |
| arrays.js:4:15:4:25 | [Property] foo: source | arrays.js:4:20:4:25 | [VarRef] source | semmle.order | 2 |
| arrays.js:5:3:5:15 | [CallExpr] sink(obj.foo) | arrays.js:5:3:5:6 | [VarRef] sink | semmle.label | 0 |
| arrays.js:5:3:5:15 | [CallExpr] sink(obj.foo) | arrays.js:5:3:5:6 | [VarRef] sink | semmle.order | 0 |
| arrays.js:5:3:5:15 | [CallExpr] sink(obj.foo) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:5:3:5:15 | [CallExpr] sink(obj.foo) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:5:3:5:16 | [ExprStmt] sink(obj.foo); | arrays.js:5:3:5:15 | [CallExpr] sink(obj.foo) | semmle.label | 1 |
| arrays.js:5:3:5:16 | [ExprStmt] sink(obj.foo); | arrays.js:5:3:5:15 | [CallExpr] sink(obj.foo) | semmle.order | 1 |
| arrays.js:5:8:5:14 | [DotExpr] obj.foo | arrays.js:5:8:5:10 | [VarRef] obj | semmle.label | 1 |
| arrays.js:5:8:5:14 | [DotExpr] obj.foo | arrays.js:5:8:5:10 | [VarRef] obj | semmle.order | 1 |
| arrays.js:5:8:5:14 | [DotExpr] obj.foo | arrays.js:5:12:5:14 | [Label] foo | semmle.label | 2 |
| arrays.js:5:8:5:14 | [DotExpr] obj.foo | arrays.js:5:12:5:14 | [Label] foo | semmle.order | 2 |
| arrays.js:7:3:7:15 | [DeclStmt] var arr = ... | arrays.js:7:7:7:14 | [VariableDeclarator] arr = [] | semmle.label | 1 |
| arrays.js:7:3:7:15 | [DeclStmt] var arr = ... | arrays.js:7:7:7:14 | [VariableDeclarator] arr = [] | semmle.order | 1 |
| arrays.js:7:7:7:14 | [VariableDeclarator] arr = [] | arrays.js:7:7:7:9 | [VarDecl] arr | semmle.label | 1 |
| arrays.js:7:7:7:14 | [VariableDeclarator] arr = [] | arrays.js:7:7:7:9 | [VarDecl] arr | semmle.order | 1 |
| arrays.js:7:7:7:14 | [VariableDeclarator] arr = [] | arrays.js:7:13:7:14 | [ArrayExpr] [] | semmle.label | 2 |
| arrays.js:7:7:7:14 | [VariableDeclarator] arr = [] | arrays.js:7:13:7:14 | [ArrayExpr] [] | semmle.order | 2 |
| arrays.js:8:3:8:10 | [DotExpr] arr.push | arrays.js:8:3:8:5 | [VarRef] arr | semmle.label | 1 |
| arrays.js:8:3:8:10 | [DotExpr] arr.push | arrays.js:8:3:8:5 | [VarRef] arr | semmle.order | 1 |
| arrays.js:8:3:8:10 | [DotExpr] arr.push | arrays.js:8:7:8:10 | [Label] push | semmle.label | 2 |
| arrays.js:8:3:8:10 | [DotExpr] arr.push | arrays.js:8:7:8:10 | [Label] push | semmle.order | 2 |
| arrays.js:8:3:8:18 | [MethodCallExpr] arr.push(source) | arrays.js:8:3:8:10 | [DotExpr] arr.push | semmle.label | 0 |
| arrays.js:8:3:8:18 | [MethodCallExpr] arr.push(source) | arrays.js:8:3:8:10 | [DotExpr] arr.push | semmle.order | 0 |
| arrays.js:8:3:8:18 | [MethodCallExpr] arr.push(source) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:8:3:8:18 | [MethodCallExpr] arr.push(source) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:8:3:8:19 | [ExprStmt] arr.push(source); | arrays.js:8:3:8:18 | [MethodCallExpr] arr.push(source) | semmle.label | 1 |
| arrays.js:8:3:8:19 | [ExprStmt] arr.push(source); | arrays.js:8:3:8:18 | [MethodCallExpr] arr.push(source) | semmle.order | 1 |
| arrays.js:10:3:12:3 | [ForStmt] for (va ... OK } | arrays.js:10:8:10:16 | [DeclStmt] var i = ... | semmle.label | 1 |
| arrays.js:10:3:12:3 | [ForStmt] for (va ... OK } | arrays.js:10:8:10:16 | [DeclStmt] var i = ... | semmle.order | 1 |
| arrays.js:10:3:12:3 | [ForStmt] for (va ... OK } | arrays.js:10:19:10:32 | [BinaryExpr] i < arr.length | semmle.label | 2 |
| arrays.js:10:3:12:3 | [ForStmt] for (va ... OK } | arrays.js:10:19:10:32 | [BinaryExpr] i < arr.length | semmle.order | 2 |
| arrays.js:10:3:12:3 | [ForStmt] for (va ... OK } | arrays.js:10:35:10:37 | [UpdateExpr] i++ | semmle.label | 3 |
| arrays.js:10:3:12:3 | [ForStmt] for (va ... OK } | arrays.js:10:35:10:37 | [UpdateExpr] i++ | semmle.order | 3 |
| arrays.js:10:3:12:3 | [ForStmt] for (va ... OK } | arrays.js:10:40:12:3 | [BlockStmt] { s ... OK } | semmle.label | 4 |
| arrays.js:10:3:12:3 | [ForStmt] for (va ... OK } | arrays.js:10:40:12:3 | [BlockStmt] { s ... OK } | semmle.order | 4 |
| arrays.js:10:8:10:16 | [DeclStmt] var i = ... | arrays.js:10:12:10:16 | [VariableDeclarator] i = 0 | semmle.label | 1 |
| arrays.js:10:8:10:16 | [DeclStmt] var i = ... | arrays.js:10:12:10:16 | [VariableDeclarator] i = 0 | semmle.order | 1 |
| arrays.js:10:12:10:16 | [VariableDeclarator] i = 0 | arrays.js:10:12:10:12 | [VarDecl] i | semmle.label | 1 |
| arrays.js:10:12:10:16 | [VariableDeclarator] i = 0 | arrays.js:10:12:10:12 | [VarDecl] i | semmle.order | 1 |
| arrays.js:10:12:10:16 | [VariableDeclarator] i = 0 | arrays.js:10:16:10:16 | [Literal] 0 | semmle.label | 2 |
| arrays.js:10:12:10:16 | [VariableDeclarator] i = 0 | arrays.js:10:16:10:16 | [Literal] 0 | semmle.order | 2 |
| arrays.js:10:19:10:32 | [BinaryExpr] i < arr.length | arrays.js:10:19:10:19 | [VarRef] i | semmle.label | 1 |
| arrays.js:10:19:10:32 | [BinaryExpr] i < arr.length | arrays.js:10:19:10:19 | [VarRef] i | semmle.order | 1 |
| arrays.js:10:19:10:32 | [BinaryExpr] i < arr.length | arrays.js:10:23:10:32 | [DotExpr] arr.length | semmle.label | 2 |
| arrays.js:10:19:10:32 | [BinaryExpr] i < arr.length | arrays.js:10:23:10:32 | [DotExpr] arr.length | semmle.order | 2 |
| arrays.js:10:23:10:32 | [DotExpr] arr.length | arrays.js:10:23:10:25 | [VarRef] arr | semmle.label | 1 |
| arrays.js:10:23:10:32 | [DotExpr] arr.length | arrays.js:10:23:10:25 | [VarRef] arr | semmle.order | 1 |
| arrays.js:10:23:10:32 | [DotExpr] arr.length | arrays.js:10:27:10:32 | [Label] length | semmle.label | 2 |
| arrays.js:10:23:10:32 | [DotExpr] arr.length | arrays.js:10:27:10:32 | [Label] length | semmle.order | 2 |
| arrays.js:10:35:10:37 | [UpdateExpr] i++ | arrays.js:10:35:10:35 | [VarRef] i | semmle.label | 1 |
| arrays.js:10:35:10:37 | [UpdateExpr] i++ | arrays.js:10:35:10:35 | [VarRef] i | semmle.order | 1 |
| arrays.js:10:40:12:3 | [BlockStmt] { s ... OK } | arrays.js:11:5:11:17 | [ExprStmt] sink(arr[i]); | semmle.label | 1 |
| arrays.js:10:40:12:3 | [BlockStmt] { s ... OK } | arrays.js:11:5:11:17 | [ExprStmt] sink(arr[i]); | semmle.order | 1 |
| arrays.js:11:5:11:16 | [CallExpr] sink(arr[i]) | arrays.js:11:5:11:8 | [VarRef] sink | semmle.label | 0 |
| arrays.js:11:5:11:16 | [CallExpr] sink(arr[i]) | arrays.js:11:5:11:8 | [VarRef] sink | semmle.order | 0 |
| arrays.js:11:5:11:16 | [CallExpr] sink(arr[i]) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:11:5:11:16 | [CallExpr] sink(arr[i]) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:11:5:11:17 | [ExprStmt] sink(arr[i]); | arrays.js:11:5:11:16 | [CallExpr] sink(arr[i]) | semmle.label | 1 |
| arrays.js:11:5:11:17 | [ExprStmt] sink(arr[i]); | arrays.js:11:5:11:16 | [CallExpr] sink(arr[i]) | semmle.order | 1 |
| arrays.js:11:10:11:15 | [IndexExpr] arr[i] | arrays.js:11:10:11:12 | [VarRef] arr | semmle.label | 1 |
| arrays.js:11:10:11:15 | [IndexExpr] arr[i] | arrays.js:11:10:11:12 | [VarRef] arr | semmle.order | 1 |
| arrays.js:11:10:11:15 | [IndexExpr] arr[i] | arrays.js:11:14:11:14 | [VarRef] i | semmle.label | 2 |
| arrays.js:11:10:11:15 | [IndexExpr] arr[i] | arrays.js:11:14:11:14 | [VarRef] i | semmle.order | 2 |
| arrays.js:15:3:15:13 | [DotExpr] arr.forEach | arrays.js:15:3:15:5 | [VarRef] arr | semmle.label | 1 |
| arrays.js:15:3:15:13 | [DotExpr] arr.forEach | arrays.js:15:3:15:5 | [VarRef] arr | semmle.order | 1 |
| arrays.js:15:3:15:13 | [DotExpr] arr.forEach | arrays.js:15:7:15:13 | [Label] forEach | semmle.label | 2 |
| arrays.js:15:3:15:13 | [DotExpr] arr.forEach | arrays.js:15:7:15:13 | [Label] forEach | semmle.order | 2 |
| arrays.js:15:3:15:29 | [MethodCallExpr] arr.for ... ink(e)) | arrays.js:15:3:15:13 | [DotExpr] arr.forEach | semmle.label | 0 |
| arrays.js:15:3:15:29 | [MethodCallExpr] arr.for ... ink(e)) | arrays.js:15:3:15:13 | [DotExpr] arr.forEach | semmle.order | 0 |
| arrays.js:15:3:15:29 | [MethodCallExpr] arr.for ... ink(e)) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:15:3:15:29 | [MethodCallExpr] arr.for ... ink(e)) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:15:3:15:30 | [ExprStmt] arr.for ... nk(e)); | arrays.js:15:3:15:29 | [MethodCallExpr] arr.for ... ink(e)) | semmle.label | 1 |
| arrays.js:15:3:15:30 | [ExprStmt] arr.for ... nk(e)); | arrays.js:15:3:15:29 | [MethodCallExpr] arr.for ... ink(e)) | semmle.order | 1 |
| arrays.js:15:15:15:28 | [ArrowFunctionExpr] (e) => sink(e) | arrays.js:15:22:15:28 | [CallExpr] sink(e) | semmle.label | 5 |
| arrays.js:15:15:15:28 | [ArrowFunctionExpr] (e) => sink(e) | arrays.js:15:22:15:28 | [CallExpr] sink(e) | semmle.order | 5 |
| arrays.js:15:15:15:28 | [ArrowFunctionExpr] (e) => sink(e) | file://:0:0:0:0 | (Parameters) | semmle.label | 1 |
| arrays.js:15:15:15:28 | [ArrowFunctionExpr] (e) => sink(e) | file://:0:0:0:0 | (Parameters) | semmle.order | 1 |
| arrays.js:15:22:15:28 | [CallExpr] sink(e) | arrays.js:15:22:15:25 | [VarRef] sink | semmle.label | 0 |
| arrays.js:15:22:15:28 | [CallExpr] sink(e) | arrays.js:15:22:15:25 | [VarRef] sink | semmle.order | 0 |
| arrays.js:15:22:15:28 | [CallExpr] sink(e) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:15:22:15:28 | [CallExpr] sink(e) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:16:3:16:9 | [DotExpr] arr.map | arrays.js:16:3:16:5 | [VarRef] arr | semmle.label | 1 |
| arrays.js:16:3:16:9 | [DotExpr] arr.map | arrays.js:16:3:16:5 | [VarRef] arr | semmle.order | 1 |
| arrays.js:16:3:16:9 | [DotExpr] arr.map | arrays.js:16:7:16:9 | [Label] map | semmle.label | 2 |
| arrays.js:16:3:16:9 | [DotExpr] arr.map | arrays.js:16:7:16:9 | [Label] map | semmle.order | 2 |
| arrays.js:16:3:16:25 | [MethodCallExpr] arr.map ... ink(e)) | arrays.js:16:3:16:9 | [DotExpr] arr.map | semmle.label | 0 |
| arrays.js:16:3:16:25 | [MethodCallExpr] arr.map ... ink(e)) | arrays.js:16:3:16:9 | [DotExpr] arr.map | semmle.order | 0 |
| arrays.js:16:3:16:25 | [MethodCallExpr] arr.map ... ink(e)) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:16:3:16:25 | [MethodCallExpr] arr.map ... ink(e)) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:16:3:16:26 | [ExprStmt] arr.map ... nk(e)); | arrays.js:16:3:16:25 | [MethodCallExpr] arr.map ... ink(e)) | semmle.label | 1 |
| arrays.js:16:3:16:26 | [ExprStmt] arr.map ... nk(e)); | arrays.js:16:3:16:25 | [MethodCallExpr] arr.map ... ink(e)) | semmle.order | 1 |
| arrays.js:16:11:16:24 | [ArrowFunctionExpr] (e) => sink(e) | arrays.js:16:18:16:24 | [CallExpr] sink(e) | semmle.label | 5 |
| arrays.js:16:11:16:24 | [ArrowFunctionExpr] (e) => sink(e) | arrays.js:16:18:16:24 | [CallExpr] sink(e) | semmle.order | 5 |
| arrays.js:16:11:16:24 | [ArrowFunctionExpr] (e) => sink(e) | file://:0:0:0:0 | (Parameters) | semmle.label | 1 |
| arrays.js:16:11:16:24 | [ArrowFunctionExpr] (e) => sink(e) | file://:0:0:0:0 | (Parameters) | semmle.order | 1 |
| arrays.js:16:18:16:24 | [CallExpr] sink(e) | arrays.js:16:18:16:21 | [VarRef] sink | semmle.label | 0 |
| arrays.js:16:18:16:24 | [CallExpr] sink(e) | arrays.js:16:18:16:21 | [VarRef] sink | semmle.order | 0 |
| arrays.js:16:18:16:24 | [CallExpr] sink(e) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:16:18:16:24 | [CallExpr] sink(e) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:18:3:18:11 | [ArrayExpr] [1, 2, 3] | arrays.js:18:4:18:4 | [Literal] 1 | semmle.label | 1 |
| arrays.js:18:3:18:11 | [ArrayExpr] [1, 2, 3] | arrays.js:18:4:18:4 | [Literal] 1 | semmle.order | 1 |
| arrays.js:18:3:18:11 | [ArrayExpr] [1, 2, 3] | arrays.js:18:7:18:7 | [Literal] 2 | semmle.label | 2 |
| arrays.js:18:3:18:11 | [ArrayExpr] [1, 2, 3] | arrays.js:18:7:18:7 | [Literal] 2 | semmle.order | 2 |
| arrays.js:18:3:18:11 | [ArrayExpr] [1, 2, 3] | arrays.js:18:10:18:10 | [Literal] 3 | semmle.label | 3 |
| arrays.js:18:3:18:11 | [ArrayExpr] [1, 2, 3] | arrays.js:18:10:18:10 | [Literal] 3 | semmle.order | 3 |
| arrays.js:18:3:18:15 | [DotExpr] [1, 2, 3].map | arrays.js:18:3:18:11 | [ArrayExpr] [1, 2, 3] | semmle.label | 1 |
| arrays.js:18:3:18:15 | [DotExpr] [1, 2, 3].map | arrays.js:18:3:18:11 | [ArrayExpr] [1, 2, 3] | semmle.order | 1 |
| arrays.js:18:3:18:15 | [DotExpr] [1, 2, 3].map | arrays.js:18:13:18:15 | [Label] map | semmle.label | 2 |
| arrays.js:18:3:18:15 | [DotExpr] [1, 2, 3].map | arrays.js:18:13:18:15 | [Label] map | semmle.order | 2 |
| arrays.js:18:3:18:30 | [MethodCallExpr] [1, 2, ... ource") | arrays.js:18:3:18:15 | [DotExpr] [1, 2, 3].map | semmle.label | 0 |
| arrays.js:18:3:18:30 | [MethodCallExpr] [1, 2, ... ource") | arrays.js:18:3:18:15 | [DotExpr] [1, 2, 3].map | semmle.order | 0 |
| arrays.js:18:3:18:30 | [MethodCallExpr] [1, 2, ... ource") | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:18:3:18:30 | [MethodCallExpr] [1, 2, ... ource") | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:18:3:18:38 | [DotExpr] [1, 2, ... forEach | arrays.js:18:3:18:30 | [MethodCallExpr] [1, 2, ... ource") | semmle.label | 1 |
| arrays.js:18:3:18:38 | [DotExpr] [1, 2, ... forEach | arrays.js:18:3:18:30 | [MethodCallExpr] [1, 2, ... ource") | semmle.order | 1 |
| arrays.js:18:3:18:38 | [DotExpr] [1, 2, ... forEach | arrays.js:18:32:18:38 | [Label] forEach | semmle.label | 2 |
| arrays.js:18:3:18:38 | [DotExpr] [1, 2, ... forEach | arrays.js:18:32:18:38 | [Label] forEach | semmle.order | 2 |
| arrays.js:18:3:18:52 | [MethodCallExpr] [1, 2, ... ink(e)) | arrays.js:18:3:18:38 | [DotExpr] [1, 2, ... forEach | semmle.label | 0 |
| arrays.js:18:3:18:52 | [MethodCallExpr] [1, 2, ... ink(e)) | arrays.js:18:3:18:38 | [DotExpr] [1, 2, ... forEach | semmle.order | 0 |
| arrays.js:18:3:18:52 | [MethodCallExpr] [1, 2, ... ink(e)) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:18:3:18:52 | [MethodCallExpr] [1, 2, ... ink(e)) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:18:3:18:53 | [ExprStmt] [1, 2, ... nk(e)); | arrays.js:18:3:18:52 | [MethodCallExpr] [1, 2, ... ink(e)) | semmle.label | 1 |
| arrays.js:18:3:18:53 | [ExprStmt] [1, 2, ... nk(e)); | arrays.js:18:3:18:52 | [MethodCallExpr] [1, 2, ... ink(e)) | semmle.order | 1 |
| arrays.js:18:17:18:29 | [ArrowFunctionExpr] i => "source" | arrays.js:18:22:18:29 | [Literal] "source" | semmle.label | 5 |
| arrays.js:18:17:18:29 | [ArrowFunctionExpr] i => "source" | arrays.js:18:22:18:29 | [Literal] "source" | semmle.order | 5 |
| arrays.js:18:17:18:29 | [ArrowFunctionExpr] i => "source" | file://:0:0:0:0 | (Parameters) | semmle.label | 1 |
| arrays.js:18:17:18:29 | [ArrowFunctionExpr] i => "source" | file://:0:0:0:0 | (Parameters) | semmle.order | 1 |
| arrays.js:18:40:18:51 | [ArrowFunctionExpr] e => sink(e) | arrays.js:18:45:18:51 | [CallExpr] sink(e) | semmle.label | 5 |
| arrays.js:18:40:18:51 | [ArrowFunctionExpr] e => sink(e) | arrays.js:18:45:18:51 | [CallExpr] sink(e) | semmle.order | 5 |
| arrays.js:18:40:18:51 | [ArrowFunctionExpr] e => sink(e) | file://:0:0:0:0 | (Parameters) | semmle.label | 1 |
| arrays.js:18:40:18:51 | [ArrowFunctionExpr] e => sink(e) | file://:0:0:0:0 | (Parameters) | semmle.order | 1 |
| arrays.js:18:45:18:51 | [CallExpr] sink(e) | arrays.js:18:45:18:48 | [VarRef] sink | semmle.label | 0 |
| arrays.js:18:45:18:51 | [CallExpr] sink(e) | arrays.js:18:45:18:48 | [VarRef] sink | semmle.order | 0 |
| arrays.js:18:45:18:51 | [CallExpr] sink(e) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:18:45:18:51 | [CallExpr] sink(e) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:20:3:20:17 | [CallExpr] sink(arr.pop()) | arrays.js:20:3:20:6 | [VarRef] sink | semmle.label | 0 |
| arrays.js:20:3:20:17 | [CallExpr] sink(arr.pop()) | arrays.js:20:3:20:6 | [VarRef] sink | semmle.order | 0 |
| arrays.js:20:3:20:17 | [CallExpr] sink(arr.pop()) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:20:3:20:17 | [CallExpr] sink(arr.pop()) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:20:3:20:18 | [ExprStmt] sink(arr.pop()); | arrays.js:20:3:20:17 | [CallExpr] sink(arr.pop()) | semmle.label | 1 |
| arrays.js:20:3:20:18 | [ExprStmt] sink(arr.pop()); | arrays.js:20:3:20:17 | [CallExpr] sink(arr.pop()) | semmle.order | 1 |
| arrays.js:20:8:20:14 | [DotExpr] arr.pop | arrays.js:20:8:20:10 | [VarRef] arr | semmle.label | 1 |
| arrays.js:20:8:20:14 | [DotExpr] arr.pop | arrays.js:20:8:20:10 | [VarRef] arr | semmle.order | 1 |
| arrays.js:20:8:20:14 | [DotExpr] arr.pop | arrays.js:20:12:20:14 | [Label] pop | semmle.label | 2 |
| arrays.js:20:8:20:14 | [DotExpr] arr.pop | arrays.js:20:12:20:14 | [Label] pop | semmle.order | 2 |
| arrays.js:20:8:20:16 | [MethodCallExpr] arr.pop() | arrays.js:20:8:20:14 | [DotExpr] arr.pop | semmle.label | 0 |
| arrays.js:20:8:20:16 | [MethodCallExpr] arr.pop() | arrays.js:20:8:20:14 | [DotExpr] arr.pop | semmle.order | 0 |
| arrays.js:22:3:22:24 | [DeclStmt] var arr2 = ... | arrays.js:22:7:22:23 | [VariableDeclarator] arr2 = ["source"] | semmle.label | 1 |
| arrays.js:22:3:22:24 | [DeclStmt] var arr2 = ... | arrays.js:22:7:22:23 | [VariableDeclarator] arr2 = ["source"] | semmle.order | 1 |
| arrays.js:22:7:22:23 | [VariableDeclarator] arr2 = ["source"] | arrays.js:22:7:22:10 | [VarDecl] arr2 | semmle.label | 1 |
| arrays.js:22:7:22:23 | [VariableDeclarator] arr2 = ["source"] | arrays.js:22:7:22:10 | [VarDecl] arr2 | semmle.order | 1 |
| arrays.js:22:7:22:23 | [VariableDeclarator] arr2 = ["source"] | arrays.js:22:14:22:23 | [ArrayExpr] ["source"] | semmle.label | 2 |
| arrays.js:22:7:22:23 | [VariableDeclarator] arr2 = ["source"] | arrays.js:22:14:22:23 | [ArrayExpr] ["source"] | semmle.order | 2 |
| arrays.js:22:14:22:23 | [ArrayExpr] ["source"] | arrays.js:22:15:22:22 | [Literal] "source" | semmle.label | 1 |
| arrays.js:22:14:22:23 | [ArrayExpr] ["source"] | arrays.js:22:15:22:22 | [Literal] "source" | semmle.order | 1 |
| arrays.js:23:3:23:18 | [CallExpr] sink(arr2.pop()) | arrays.js:23:3:23:6 | [VarRef] sink | semmle.label | 0 |
| arrays.js:23:3:23:18 | [CallExpr] sink(arr2.pop()) | arrays.js:23:3:23:6 | [VarRef] sink | semmle.order | 0 |
| arrays.js:23:3:23:18 | [CallExpr] sink(arr2.pop()) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:23:3:23:18 | [CallExpr] sink(arr2.pop()) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:23:3:23:19 | [ExprStmt] sink(arr2.pop()); | arrays.js:23:3:23:18 | [CallExpr] sink(arr2.pop()) | semmle.label | 1 |
| arrays.js:23:3:23:19 | [ExprStmt] sink(arr2.pop()); | arrays.js:23:3:23:18 | [CallExpr] sink(arr2.pop()) | semmle.order | 1 |
| arrays.js:23:8:23:15 | [DotExpr] arr2.pop | arrays.js:23:8:23:11 | [VarRef] arr2 | semmle.label | 1 |
| arrays.js:23:8:23:15 | [DotExpr] arr2.pop | arrays.js:23:8:23:11 | [VarRef] arr2 | semmle.order | 1 |
| arrays.js:23:8:23:15 | [DotExpr] arr2.pop | arrays.js:23:13:23:15 | [Label] pop | semmle.label | 2 |
| arrays.js:23:8:23:15 | [DotExpr] arr2.pop | arrays.js:23:13:23:15 | [Label] pop | semmle.order | 2 |
| arrays.js:23:8:23:17 | [MethodCallExpr] arr2.pop() | arrays.js:23:8:23:15 | [DotExpr] arr2.pop | semmle.label | 0 |
| arrays.js:23:8:23:17 | [MethodCallExpr] arr2.pop() | arrays.js:23:8:23:15 | [DotExpr] arr2.pop | semmle.order | 0 |
| arrays.js:25:3:25:24 | [DeclStmt] var arr3 = ... | arrays.js:25:7:25:23 | [VariableDeclarator] arr3 = ["source"] | semmle.label | 1 |
| arrays.js:25:3:25:24 | [DeclStmt] var arr3 = ... | arrays.js:25:7:25:23 | [VariableDeclarator] arr3 = ["source"] | semmle.order | 1 |
| arrays.js:25:7:25:23 | [VariableDeclarator] arr3 = ["source"] | arrays.js:25:7:25:10 | [VarDecl] arr3 | semmle.label | 1 |
| arrays.js:25:7:25:23 | [VariableDeclarator] arr3 = ["source"] | arrays.js:25:7:25:10 | [VarDecl] arr3 | semmle.order | 1 |
| arrays.js:25:7:25:23 | [VariableDeclarator] arr3 = ["source"] | arrays.js:25:14:25:23 | [ArrayExpr] ["source"] | semmle.label | 2 |
| arrays.js:25:7:25:23 | [VariableDeclarator] arr3 = ["source"] | arrays.js:25:14:25:23 | [ArrayExpr] ["source"] | semmle.order | 2 |
| arrays.js:25:14:25:23 | [ArrayExpr] ["source"] | arrays.js:25:15:25:22 | [Literal] "source" | semmle.label | 1 |
| arrays.js:25:14:25:23 | [ArrayExpr] ["source"] | arrays.js:25:15:25:22 | [Literal] "source" | semmle.order | 1 |
| arrays.js:26:3:26:18 | [CallExpr] sink(arr3.pop()) | arrays.js:26:3:26:6 | [VarRef] sink | semmle.label | 0 |
| arrays.js:26:3:26:18 | [CallExpr] sink(arr3.pop()) | arrays.js:26:3:26:6 | [VarRef] sink | semmle.order | 0 |
| arrays.js:26:3:26:18 | [CallExpr] sink(arr3.pop()) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:26:3:26:18 | [CallExpr] sink(arr3.pop()) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:26:3:26:19 | [ExprStmt] sink(arr3.pop()); | arrays.js:26:3:26:18 | [CallExpr] sink(arr3.pop()) | semmle.label | 1 |
| arrays.js:26:3:26:19 | [ExprStmt] sink(arr3.pop()); | arrays.js:26:3:26:18 | [CallExpr] sink(arr3.pop()) | semmle.order | 1 |
| arrays.js:26:8:26:15 | [DotExpr] arr3.pop | arrays.js:26:8:26:11 | [VarRef] arr3 | semmle.label | 1 |
| arrays.js:26:8:26:15 | [DotExpr] arr3.pop | arrays.js:26:8:26:11 | [VarRef] arr3 | semmle.order | 1 |
| arrays.js:26:8:26:15 | [DotExpr] arr3.pop | arrays.js:26:13:26:15 | [Label] pop | semmle.label | 2 |
| arrays.js:26:8:26:15 | [DotExpr] arr3.pop | arrays.js:26:13:26:15 | [Label] pop | semmle.order | 2 |
| arrays.js:26:8:26:17 | [MethodCallExpr] arr3.pop() | arrays.js:26:8:26:15 | [DotExpr] arr3.pop | semmle.label | 0 |
| arrays.js:26:8:26:17 | [MethodCallExpr] arr3.pop() | arrays.js:26:8:26:15 | [DotExpr] arr3.pop | semmle.order | 0 |
| arrays.js:28:3:28:16 | [DeclStmt] var arr4 = ... | arrays.js:28:7:28:15 | [VariableDeclarator] arr4 = [] | semmle.label | 1 |
| arrays.js:28:3:28:16 | [DeclStmt] var arr4 = ... | arrays.js:28:7:28:15 | [VariableDeclarator] arr4 = [] | semmle.order | 1 |
| arrays.js:28:7:28:15 | [VariableDeclarator] arr4 = [] | arrays.js:28:7:28:10 | [VarDecl] arr4 | semmle.label | 1 |
| arrays.js:28:7:28:15 | [VariableDeclarator] arr4 = [] | arrays.js:28:7:28:10 | [VarDecl] arr4 | semmle.order | 1 |
| arrays.js:28:7:28:15 | [VariableDeclarator] arr4 = [] | arrays.js:28:14:28:15 | [ArrayExpr] [] | semmle.label | 2 |
| arrays.js:28:7:28:15 | [VariableDeclarator] arr4 = [] | arrays.js:28:14:28:15 | [ArrayExpr] [] | semmle.order | 2 |
| arrays.js:29:3:29:13 | [DotExpr] arr4.splice | arrays.js:29:3:29:6 | [VarRef] arr4 | semmle.label | 1 |
| arrays.js:29:3:29:13 | [DotExpr] arr4.splice | arrays.js:29:3:29:6 | [VarRef] arr4 | semmle.order | 1 |
| arrays.js:29:3:29:13 | [DotExpr] arr4.splice | arrays.js:29:8:29:13 | [Label] splice | semmle.label | 2 |
| arrays.js:29:3:29:13 | [DotExpr] arr4.splice | arrays.js:29:8:29:13 | [Label] splice | semmle.order | 2 |
| arrays.js:29:3:29:29 | [MethodCallExpr] arr4.sp ... ource") | arrays.js:29:3:29:13 | [DotExpr] arr4.splice | semmle.label | 0 |
| arrays.js:29:3:29:29 | [MethodCallExpr] arr4.sp ... ource") | arrays.js:29:3:29:13 | [DotExpr] arr4.splice | semmle.order | 0 |
| arrays.js:29:3:29:29 | [MethodCallExpr] arr4.sp ... ource") | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:29:3:29:29 | [MethodCallExpr] arr4.sp ... ource") | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:29:3:29:30 | [ExprStmt] arr4.sp ... urce"); | arrays.js:29:3:29:29 | [MethodCallExpr] arr4.sp ... ource") | semmle.label | 1 |
| arrays.js:29:3:29:30 | [ExprStmt] arr4.sp ... urce"); | arrays.js:29:3:29:29 | [MethodCallExpr] arr4.sp ... ource") | semmle.order | 1 |
| arrays.js:30:3:30:18 | [CallExpr] sink(arr4.pop()) | arrays.js:30:3:30:6 | [VarRef] sink | semmle.label | 0 |
| arrays.js:30:3:30:18 | [CallExpr] sink(arr4.pop()) | arrays.js:30:3:30:6 | [VarRef] sink | semmle.order | 0 |
| arrays.js:30:3:30:18 | [CallExpr] sink(arr4.pop()) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:30:3:30:18 | [CallExpr] sink(arr4.pop()) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:30:3:30:19 | [ExprStmt] sink(arr4.pop()); | arrays.js:30:3:30:18 | [CallExpr] sink(arr4.pop()) | semmle.label | 1 |
| arrays.js:30:3:30:19 | [ExprStmt] sink(arr4.pop()); | arrays.js:30:3:30:18 | [CallExpr] sink(arr4.pop()) | semmle.order | 1 |
| arrays.js:30:8:30:15 | [DotExpr] arr4.pop | arrays.js:30:8:30:11 | [VarRef] arr4 | semmle.label | 1 |
| arrays.js:30:8:30:15 | [DotExpr] arr4.pop | arrays.js:30:8:30:11 | [VarRef] arr4 | semmle.order | 1 |
| arrays.js:30:8:30:15 | [DotExpr] arr4.pop | arrays.js:30:13:30:15 | [Label] pop | semmle.label | 2 |
| arrays.js:30:8:30:15 | [DotExpr] arr4.pop | arrays.js:30:13:30:15 | [Label] pop | semmle.order | 2 |
| arrays.js:30:8:30:17 | [MethodCallExpr] arr4.pop() | arrays.js:30:8:30:15 | [DotExpr] arr4.pop | semmle.label | 0 |
| arrays.js:30:8:30:17 | [MethodCallExpr] arr4.pop() | arrays.js:30:8:30:15 | [DotExpr] arr4.pop | semmle.order | 0 |
| arrays.js:32:3:32:29 | [DeclStmt] var arr5 = ... | arrays.js:32:7:32:28 | [VariableDeclarator] arr5 = ... t(arr4) | semmle.label | 1 |
| arrays.js:32:3:32:29 | [DeclStmt] var arr5 = ... | arrays.js:32:7:32:28 | [VariableDeclarator] arr5 = ... t(arr4) | semmle.order | 1 |
| arrays.js:32:7:32:28 | [VariableDeclarator] arr5 = ... t(arr4) | arrays.js:32:7:32:10 | [VarDecl] arr5 | semmle.label | 1 |
| arrays.js:32:7:32:28 | [VariableDeclarator] arr5 = ... t(arr4) | arrays.js:32:7:32:10 | [VarDecl] arr5 | semmle.order | 1 |
| arrays.js:32:7:32:28 | [VariableDeclarator] arr5 = ... t(arr4) | arrays.js:32:14:32:28 | [MethodCallExpr] [].concat(arr4) | semmle.label | 2 |
| arrays.js:32:7:32:28 | [VariableDeclarator] arr5 = ... t(arr4) | arrays.js:32:14:32:28 | [MethodCallExpr] [].concat(arr4) | semmle.order | 2 |
| arrays.js:32:14:32:22 | [DotExpr] [].concat | arrays.js:32:14:32:15 | [ArrayExpr] [] | semmle.label | 1 |
| arrays.js:32:14:32:22 | [DotExpr] [].concat | arrays.js:32:14:32:15 | [ArrayExpr] [] | semmle.order | 1 |
| arrays.js:32:14:32:22 | [DotExpr] [].concat | arrays.js:32:17:32:22 | [Label] concat | semmle.label | 2 |
| arrays.js:32:14:32:22 | [DotExpr] [].concat | arrays.js:32:17:32:22 | [Label] concat | semmle.order | 2 |
| arrays.js:32:14:32:28 | [MethodCallExpr] [].concat(arr4) | arrays.js:32:14:32:22 | [DotExpr] [].concat | semmle.label | 0 |
| arrays.js:32:14:32:28 | [MethodCallExpr] [].concat(arr4) | arrays.js:32:14:32:22 | [DotExpr] [].concat | semmle.order | 0 |
| arrays.js:32:14:32:28 | [MethodCallExpr] [].concat(arr4) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:32:14:32:28 | [MethodCallExpr] [].concat(arr4) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:33:3:33:18 | [CallExpr] sink(arr5.pop()) | arrays.js:33:3:33:6 | [VarRef] sink | semmle.label | 0 |
| arrays.js:33:3:33:18 | [CallExpr] sink(arr5.pop()) | arrays.js:33:3:33:6 | [VarRef] sink | semmle.order | 0 |
| arrays.js:33:3:33:18 | [CallExpr] sink(arr5.pop()) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:33:3:33:18 | [CallExpr] sink(arr5.pop()) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:33:3:33:19 | [ExprStmt] sink(arr5.pop()); | arrays.js:33:3:33:18 | [CallExpr] sink(arr5.pop()) | semmle.label | 1 |
| arrays.js:33:3:33:19 | [ExprStmt] sink(arr5.pop()); | arrays.js:33:3:33:18 | [CallExpr] sink(arr5.pop()) | semmle.order | 1 |
| arrays.js:33:8:33:15 | [DotExpr] arr5.pop | arrays.js:33:8:33:11 | [VarRef] arr5 | semmle.label | 1 |
| arrays.js:33:8:33:15 | [DotExpr] arr5.pop | arrays.js:33:8:33:11 | [VarRef] arr5 | semmle.order | 1 |
| arrays.js:33:8:33:15 | [DotExpr] arr5.pop | arrays.js:33:13:33:15 | [Label] pop | semmle.label | 2 |
| arrays.js:33:8:33:15 | [DotExpr] arr5.pop | arrays.js:33:13:33:15 | [Label] pop | semmle.order | 2 |
| arrays.js:33:8:33:17 | [MethodCallExpr] arr5.pop() | arrays.js:33:8:33:15 | [DotExpr] arr5.pop | semmle.label | 0 |
| arrays.js:33:8:33:17 | [MethodCallExpr] arr5.pop() | arrays.js:33:8:33:15 | [DotExpr] arr5.pop | semmle.order | 0 |
| arrays.js:35:3:35:27 | [CallExpr] sink(ar ... .pop()) | arrays.js:35:3:35:6 | [VarRef] sink | semmle.label | 0 |
| arrays.js:35:3:35:27 | [CallExpr] sink(ar ... .pop()) | arrays.js:35:3:35:6 | [VarRef] sink | semmle.order | 0 |
| arrays.js:35:3:35:27 | [CallExpr] sink(ar ... .pop()) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:35:3:35:27 | [CallExpr] sink(ar ... .pop()) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:35:3:35:28 | [ExprStmt] sink(ar ... pop()); | arrays.js:35:3:35:27 | [CallExpr] sink(ar ... .pop()) | semmle.label | 1 |
| arrays.js:35:3:35:28 | [ExprStmt] sink(ar ... pop()); | arrays.js:35:3:35:27 | [CallExpr] sink(ar ... .pop()) | semmle.order | 1 |
| arrays.js:35:8:35:17 | [DotExpr] arr5.slice | arrays.js:35:8:35:11 | [VarRef] arr5 | semmle.label | 1 |
| arrays.js:35:8:35:17 | [DotExpr] arr5.slice | arrays.js:35:8:35:11 | [VarRef] arr5 | semmle.order | 1 |
| arrays.js:35:8:35:17 | [DotExpr] arr5.slice | arrays.js:35:13:35:17 | [Label] slice | semmle.label | 2 |
| arrays.js:35:8:35:17 | [DotExpr] arr5.slice | arrays.js:35:13:35:17 | [Label] slice | semmle.order | 2 |
| arrays.js:35:8:35:20 | [MethodCallExpr] arr5.slice(2) | arrays.js:35:8:35:17 | [DotExpr] arr5.slice | semmle.label | 0 |
| arrays.js:35:8:35:20 | [MethodCallExpr] arr5.slice(2) | arrays.js:35:8:35:17 | [DotExpr] arr5.slice | semmle.order | 0 |
| arrays.js:35:8:35:20 | [MethodCallExpr] arr5.slice(2) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:35:8:35:20 | [MethodCallExpr] arr5.slice(2) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:35:8:35:24 | [DotExpr] arr5.slice(2).pop | arrays.js:35:8:35:20 | [MethodCallExpr] arr5.slice(2) | semmle.label | 1 |
| arrays.js:35:8:35:24 | [DotExpr] arr5.slice(2).pop | arrays.js:35:8:35:20 | [MethodCallExpr] arr5.slice(2) | semmle.order | 1 |
| arrays.js:35:8:35:24 | [DotExpr] arr5.slice(2).pop | arrays.js:35:22:35:24 | [Label] pop | semmle.label | 2 |
| arrays.js:35:8:35:24 | [DotExpr] arr5.slice(2).pop | arrays.js:35:22:35:24 | [Label] pop | semmle.order | 2 |
| arrays.js:35:8:35:26 | [MethodCallExpr] arr5.slice(2).pop() | arrays.js:35:8:35:24 | [DotExpr] arr5.slice(2).pop | semmle.label | 0 |
| arrays.js:35:8:35:26 | [MethodCallExpr] arr5.slice(2).pop() | arrays.js:35:8:35:24 | [DotExpr] arr5.slice(2).pop | semmle.order | 0 |
| arrays.js:37:3:37:16 | [DeclStmt] var arr6 = ... | arrays.js:37:7:37:15 | [VariableDeclarator] arr6 = [] | semmle.label | 1 |
| arrays.js:37:3:37:16 | [DeclStmt] var arr6 = ... | arrays.js:37:7:37:15 | [VariableDeclarator] arr6 = [] | semmle.order | 1 |
| arrays.js:37:7:37:15 | [VariableDeclarator] arr6 = [] | arrays.js:37:7:37:10 | [VarDecl] arr6 | semmle.label | 1 |
| arrays.js:37:7:37:15 | [VariableDeclarator] arr6 = [] | arrays.js:37:7:37:10 | [VarDecl] arr6 | semmle.order | 1 |
| arrays.js:37:7:37:15 | [VariableDeclarator] arr6 = [] | arrays.js:37:14:37:15 | [ArrayExpr] [] | semmle.label | 2 |
| arrays.js:37:7:37:15 | [VariableDeclarator] arr6 = [] | arrays.js:37:14:37:15 | [ArrayExpr] [] | semmle.order | 2 |
| arrays.js:38:3:40:3 | [ForStmt] for (va ... i]; } | arrays.js:38:8:38:16 | [DeclStmt] var i = ... | semmle.label | 1 |
| arrays.js:38:3:40:3 | [ForStmt] for (va ... i]; } | arrays.js:38:8:38:16 | [DeclStmt] var i = ... | semmle.order | 1 |
| arrays.js:38:3:40:3 | [ForStmt] for (va ... i]; } | arrays.js:38:19:38:33 | [BinaryExpr] i < arr5.length | semmle.label | 2 |
| arrays.js:38:3:40:3 | [ForStmt] for (va ... i]; } | arrays.js:38:19:38:33 | [BinaryExpr] i < arr5.length | semmle.order | 2 |
| arrays.js:38:3:40:3 | [ForStmt] for (va ... i]; } | arrays.js:38:36:38:38 | [UpdateExpr] i++ | semmle.label | 3 |
| arrays.js:38:3:40:3 | [ForStmt] for (va ... i]; } | arrays.js:38:36:38:38 | [UpdateExpr] i++ | semmle.order | 3 |
| arrays.js:38:3:40:3 | [ForStmt] for (va ... i]; } | arrays.js:38:41:40:3 | [BlockStmt] { a ... i]; } | semmle.label | 4 |
| arrays.js:38:3:40:3 | [ForStmt] for (va ... i]; } | arrays.js:38:41:40:3 | [BlockStmt] { a ... i]; } | semmle.order | 4 |
| arrays.js:38:8:38:16 | [DeclStmt] var i = ... | arrays.js:38:12:38:16 | [VariableDeclarator] i = 0 | semmle.label | 1 |
| arrays.js:38:8:38:16 | [DeclStmt] var i = ... | arrays.js:38:12:38:16 | [VariableDeclarator] i = 0 | semmle.order | 1 |
| arrays.js:38:12:38:16 | [VariableDeclarator] i = 0 | arrays.js:38:12:38:12 | [VarDecl] i | semmle.label | 1 |
| arrays.js:38:12:38:16 | [VariableDeclarator] i = 0 | arrays.js:38:12:38:12 | [VarDecl] i | semmle.order | 1 |
| arrays.js:38:12:38:16 | [VariableDeclarator] i = 0 | arrays.js:38:16:38:16 | [Literal] 0 | semmle.label | 2 |
| arrays.js:38:12:38:16 | [VariableDeclarator] i = 0 | arrays.js:38:16:38:16 | [Literal] 0 | semmle.order | 2 |
| arrays.js:38:19:38:33 | [BinaryExpr] i < arr5.length | arrays.js:38:19:38:19 | [VarRef] i | semmle.label | 1 |
| arrays.js:38:19:38:33 | [BinaryExpr] i < arr5.length | arrays.js:38:19:38:19 | [VarRef] i | semmle.order | 1 |
| arrays.js:38:19:38:33 | [BinaryExpr] i < arr5.length | arrays.js:38:23:38:33 | [DotExpr] arr5.length | semmle.label | 2 |
| arrays.js:38:19:38:33 | [BinaryExpr] i < arr5.length | arrays.js:38:23:38:33 | [DotExpr] arr5.length | semmle.order | 2 |
| arrays.js:38:23:38:33 | [DotExpr] arr5.length | arrays.js:38:23:38:26 | [VarRef] arr5 | semmle.label | 1 |
| arrays.js:38:23:38:33 | [DotExpr] arr5.length | arrays.js:38:23:38:26 | [VarRef] arr5 | semmle.order | 1 |
| arrays.js:38:23:38:33 | [DotExpr] arr5.length | arrays.js:38:28:38:33 | [Label] length | semmle.label | 2 |
| arrays.js:38:23:38:33 | [DotExpr] arr5.length | arrays.js:38:28:38:33 | [Label] length | semmle.order | 2 |
| arrays.js:38:36:38:38 | [UpdateExpr] i++ | arrays.js:38:36:38:36 | [VarRef] i | semmle.label | 1 |
| arrays.js:38:36:38:38 | [UpdateExpr] i++ | arrays.js:38:36:38:36 | [VarRef] i | semmle.order | 1 |
| arrays.js:38:41:40:3 | [BlockStmt] { a ... i]; } | arrays.js:39:5:39:22 | [ExprStmt] arr6[i] = arr5[i]; | semmle.label | 1 |
| arrays.js:38:41:40:3 | [BlockStmt] { a ... i]; } | arrays.js:39:5:39:22 | [ExprStmt] arr6[i] = arr5[i]; | semmle.order | 1 |
| arrays.js:39:5:39:11 | [IndexExpr] arr6[i] | arrays.js:39:5:39:8 | [VarRef] arr6 | semmle.label | 1 |
| arrays.js:39:5:39:11 | [IndexExpr] arr6[i] | arrays.js:39:5:39:8 | [VarRef] arr6 | semmle.order | 1 |
| arrays.js:39:5:39:11 | [IndexExpr] arr6[i] | arrays.js:39:10:39:10 | [VarRef] i | semmle.label | 2 |
| arrays.js:39:5:39:11 | [IndexExpr] arr6[i] | arrays.js:39:10:39:10 | [VarRef] i | semmle.order | 2 |
| arrays.js:39:5:39:21 | [AssignExpr] arr6[i] = arr5[i] | arrays.js:39:5:39:11 | [IndexExpr] arr6[i] | semmle.label | 1 |
| arrays.js:39:5:39:21 | [AssignExpr] arr6[i] = arr5[i] | arrays.js:39:5:39:11 | [IndexExpr] arr6[i] | semmle.order | 1 |
| arrays.js:39:5:39:21 | [AssignExpr] arr6[i] = arr5[i] | arrays.js:39:15:39:21 | [IndexExpr] arr5[i] | semmle.label | 2 |
| arrays.js:39:5:39:21 | [AssignExpr] arr6[i] = arr5[i] | arrays.js:39:15:39:21 | [IndexExpr] arr5[i] | semmle.order | 2 |
| arrays.js:39:5:39:22 | [ExprStmt] arr6[i] = arr5[i]; | arrays.js:39:5:39:21 | [AssignExpr] arr6[i] = arr5[i] | semmle.label | 1 |
| arrays.js:39:5:39:22 | [ExprStmt] arr6[i] = arr5[i]; | arrays.js:39:5:39:21 | [AssignExpr] arr6[i] = arr5[i] | semmle.order | 1 |
| arrays.js:39:15:39:21 | [IndexExpr] arr5[i] | arrays.js:39:15:39:18 | [VarRef] arr5 | semmle.label | 1 |
| arrays.js:39:15:39:21 | [IndexExpr] arr5[i] | arrays.js:39:15:39:18 | [VarRef] arr5 | semmle.order | 1 |
| arrays.js:39:15:39:21 | [IndexExpr] arr5[i] | arrays.js:39:20:39:20 | [VarRef] i | semmle.label | 2 |
| arrays.js:39:15:39:21 | [IndexExpr] arr5[i] | arrays.js:39:20:39:20 | [VarRef] i | semmle.order | 2 |
| arrays.js:41:3:41:18 | [CallExpr] sink(arr6.pop()) | arrays.js:41:3:41:6 | [VarRef] sink | semmle.label | 0 |
| arrays.js:41:3:41:18 | [CallExpr] sink(arr6.pop()) | arrays.js:41:3:41:6 | [VarRef] sink | semmle.order | 0 |
| arrays.js:41:3:41:18 | [CallExpr] sink(arr6.pop()) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:41:3:41:18 | [CallExpr] sink(arr6.pop()) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:41:3:41:19 | [ExprStmt] sink(arr6.pop()); | arrays.js:41:3:41:18 | [CallExpr] sink(arr6.pop()) | semmle.label | 1 |
| arrays.js:41:3:41:19 | [ExprStmt] sink(arr6.pop()); | arrays.js:41:3:41:18 | [CallExpr] sink(arr6.pop()) | semmle.order | 1 |
| arrays.js:41:8:41:15 | [DotExpr] arr6.pop | arrays.js:41:8:41:11 | [VarRef] arr6 | semmle.label | 1 |
| arrays.js:41:8:41:15 | [DotExpr] arr6.pop | arrays.js:41:8:41:11 | [VarRef] arr6 | semmle.order | 1 |
| arrays.js:41:8:41:15 | [DotExpr] arr6.pop | arrays.js:41:13:41:15 | [Label] pop | semmle.label | 2 |
| arrays.js:41:8:41:15 | [DotExpr] arr6.pop | arrays.js:41:13:41:15 | [Label] pop | semmle.order | 2 |
| arrays.js:41:8:41:17 | [MethodCallExpr] arr6.pop() | arrays.js:41:8:41:15 | [DotExpr] arr6.pop | semmle.label | 0 |
| arrays.js:41:8:41:17 | [MethodCallExpr] arr6.pop() | arrays.js:41:8:41:15 | [DotExpr] arr6.pop | semmle.order | 0 |
| arrays.js:44:3:44:12 | [ArrayExpr] ["source"] | arrays.js:44:4:44:11 | [Literal] "source" | semmle.label | 1 |
| arrays.js:44:3:44:12 | [ArrayExpr] ["source"] | arrays.js:44:4:44:11 | [Literal] "source" | semmle.order | 1 |
| arrays.js:44:3:44:20 | [DotExpr] ["source"].forEach | arrays.js:44:3:44:12 | [ArrayExpr] ["source"] | semmle.label | 1 |
| arrays.js:44:3:44:20 | [DotExpr] ["source"].forEach | arrays.js:44:3:44:12 | [ArrayExpr] ["source"] | semmle.order | 1 |
| arrays.js:44:3:44:20 | [DotExpr] ["source"].forEach | arrays.js:44:14:44:20 | [Label] forEach | semmle.label | 2 |
| arrays.js:44:3:44:20 | [DotExpr] ["source"].forEach | arrays.js:44:14:44:20 | [Label] forEach | semmle.order | 2 |
| arrays.js:44:3:47:4 | [MethodCallExpr] ["sourc ... t. }) | arrays.js:44:3:44:20 | [DotExpr] ["source"].forEach | semmle.label | 0 |
| arrays.js:44:3:47:4 | [MethodCallExpr] ["sourc ... t. }) | arrays.js:44:3:44:20 | [DotExpr] ["source"].forEach | semmle.order | 0 |
| arrays.js:44:3:47:4 | [MethodCallExpr] ["sourc ... t. }) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:44:3:47:4 | [MethodCallExpr] ["sourc ... t. }) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:44:3:47:5 | [ExprStmt] ["sourc ... . }); | arrays.js:44:3:47:4 | [MethodCallExpr] ["sourc ... t. }) | semmle.label | 1 |
| arrays.js:44:3:47:5 | [ExprStmt] ["sourc ... . }); | arrays.js:44:3:47:4 | [MethodCallExpr] ["sourc ... t. }) | semmle.order | 1 |
| arrays.js:44:22:47:3 | [ArrowFunctionExpr] (e, i, ... nt. } | arrays.js:44:37:47:3 | [BlockStmt] { s ... nt. } | semmle.label | 5 |
| arrays.js:44:22:47:3 | [ArrowFunctionExpr] (e, i, ... nt. } | arrays.js:44:37:47:3 | [BlockStmt] { s ... nt. } | semmle.order | 5 |
| arrays.js:44:22:47:3 | [ArrowFunctionExpr] (e, i, ... nt. } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 |
| arrays.js:44:22:47:3 | [ArrowFunctionExpr] (e, i, ... nt. } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 |
| arrays.js:44:37:47:3 | [BlockStmt] { s ... nt. } | arrays.js:45:5:45:20 | [ExprStmt] sink(ary.pop()); | semmle.label | 1 |
| arrays.js:44:37:47:3 | [BlockStmt] { s ... nt. } | arrays.js:45:5:45:20 | [ExprStmt] sink(ary.pop()); | semmle.order | 1 |
| arrays.js:44:37:47:3 | [BlockStmt] { s ... nt. } | arrays.js:46:5:46:14 | [ExprStmt] sink(ary); | semmle.label | 2 |
| arrays.js:44:37:47:3 | [BlockStmt] { s ... nt. } | arrays.js:46:5:46:14 | [ExprStmt] sink(ary); | semmle.order | 2 |
| arrays.js:45:5:45:19 | [CallExpr] sink(ary.pop()) | arrays.js:45:5:45:8 | [VarRef] sink | semmle.label | 0 |
| arrays.js:45:5:45:19 | [CallExpr] sink(ary.pop()) | arrays.js:45:5:45:8 | [VarRef] sink | semmle.order | 0 |
| arrays.js:45:5:45:19 | [CallExpr] sink(ary.pop()) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:45:5:45:19 | [CallExpr] sink(ary.pop()) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:45:5:45:20 | [ExprStmt] sink(ary.pop()); | arrays.js:45:5:45:19 | [CallExpr] sink(ary.pop()) | semmle.label | 1 |
| arrays.js:45:5:45:20 | [ExprStmt] sink(ary.pop()); | arrays.js:45:5:45:19 | [CallExpr] sink(ary.pop()) | semmle.order | 1 |
| arrays.js:45:10:45:16 | [DotExpr] ary.pop | arrays.js:45:10:45:12 | [VarRef] ary | semmle.label | 1 |
| arrays.js:45:10:45:16 | [DotExpr] ary.pop | arrays.js:45:10:45:12 | [VarRef] ary | semmle.order | 1 |
| arrays.js:45:10:45:16 | [DotExpr] ary.pop | arrays.js:45:14:45:16 | [Label] pop | semmle.label | 2 |
| arrays.js:45:10:45:16 | [DotExpr] ary.pop | arrays.js:45:14:45:16 | [Label] pop | semmle.order | 2 |
| arrays.js:45:10:45:18 | [MethodCallExpr] ary.pop() | arrays.js:45:10:45:16 | [DotExpr] ary.pop | semmle.label | 0 |
| arrays.js:45:10:45:18 | [MethodCallExpr] ary.pop() | arrays.js:45:10:45:16 | [DotExpr] ary.pop | semmle.order | 0 |
| arrays.js:46:5:46:13 | [CallExpr] sink(ary) | arrays.js:46:5:46:8 | [VarRef] sink | semmle.label | 0 |
| arrays.js:46:5:46:13 | [CallExpr] sink(ary) | arrays.js:46:5:46:8 | [VarRef] sink | semmle.order | 0 |
| arrays.js:46:5:46:13 | [CallExpr] sink(ary) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:46:5:46:13 | [CallExpr] sink(ary) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:46:5:46:14 | [ExprStmt] sink(ary); | arrays.js:46:5:46:13 | [CallExpr] sink(ary) | semmle.label | 1 |
| arrays.js:46:5:46:14 | [ExprStmt] sink(ary); | arrays.js:46:5:46:13 | [CallExpr] sink(ary) | semmle.order | 1 |
| arrays.js:49:3:49:14 | [CallExpr] sink(arr[0]) | arrays.js:49:3:49:6 | [VarRef] sink | semmle.label | 0 |
| arrays.js:49:3:49:14 | [CallExpr] sink(arr[0]) | arrays.js:49:3:49:6 | [VarRef] sink | semmle.order | 0 |
| arrays.js:49:3:49:14 | [CallExpr] sink(arr[0]) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:49:3:49:14 | [CallExpr] sink(arr[0]) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:49:3:49:15 | [ExprStmt] sink(arr[0]); | arrays.js:49:3:49:14 | [CallExpr] sink(arr[0]) | semmle.label | 1 |
| arrays.js:49:3:49:15 | [ExprStmt] sink(arr[0]); | arrays.js:49:3:49:14 | [CallExpr] sink(arr[0]) | semmle.order | 1 |
| arrays.js:49:8:49:13 | [IndexExpr] arr[0] | arrays.js:49:8:49:10 | [VarRef] arr | semmle.label | 1 |
| arrays.js:49:8:49:13 | [IndexExpr] arr[0] | arrays.js:49:8:49:10 | [VarRef] arr | semmle.order | 1 |
| arrays.js:49:8:49:13 | [IndexExpr] arr[0] | arrays.js:49:12:49:12 | [Literal] 0 | semmle.label | 2 |
| arrays.js:49:8:49:13 | [IndexExpr] arr[0] | arrays.js:49:12:49:12 | [Literal] 0 | semmle.order | 2 |
| arrays.js:51:3:53:3 | [ForOfStmt] for (co ... OK } | arrays.js:51:8:51:14 | [DeclStmt] const x = ... | semmle.label | 1 |
| arrays.js:51:3:53:3 | [ForOfStmt] for (co ... OK } | arrays.js:51:8:51:14 | [DeclStmt] const x = ... | semmle.order | 1 |
| arrays.js:51:3:53:3 | [ForOfStmt] for (co ... OK } | arrays.js:51:19:51:21 | [VarRef] arr | semmle.label | 2 |
| arrays.js:51:3:53:3 | [ForOfStmt] for (co ... OK } | arrays.js:51:19:51:21 | [VarRef] arr | semmle.order | 2 |
| arrays.js:51:3:53:3 | [ForOfStmt] for (co ... OK } | arrays.js:51:24:53:3 | [BlockStmt] { s ... OK } | semmle.label | 3 |
| arrays.js:51:3:53:3 | [ForOfStmt] for (co ... OK } | arrays.js:51:24:53:3 | [BlockStmt] { s ... OK } | semmle.order | 3 |
| arrays.js:51:8:51:14 | [DeclStmt] const x = ... | arrays.js:51:14:51:14 | [VariableDeclarator] x | semmle.label | 1 |
| arrays.js:51:8:51:14 | [DeclStmt] const x = ... | arrays.js:51:14:51:14 | [VariableDeclarator] x | semmle.order | 1 |
| arrays.js:51:14:51:14 | [VariableDeclarator] x | arrays.js:51:14:51:14 | [VarDecl] x | semmle.label | 1 |
| arrays.js:51:14:51:14 | [VariableDeclarator] x | arrays.js:51:14:51:14 | [VarDecl] x | semmle.order | 1 |
| arrays.js:51:24:53:3 | [BlockStmt] { s ... OK } | arrays.js:52:5:52:12 | [ExprStmt] sink(x); | semmle.label | 1 |
| arrays.js:51:24:53:3 | [BlockStmt] { s ... OK } | arrays.js:52:5:52:12 | [ExprStmt] sink(x); | semmle.order | 1 |
| arrays.js:52:5:52:11 | [CallExpr] sink(x) | arrays.js:52:5:52:8 | [VarRef] sink | semmle.label | 0 |
| arrays.js:52:5:52:11 | [CallExpr] sink(x) | arrays.js:52:5:52:8 | [VarRef] sink | semmle.order | 0 |
| arrays.js:52:5:52:11 | [CallExpr] sink(x) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:52:5:52:11 | [CallExpr] sink(x) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:52:5:52:12 | [ExprStmt] sink(x); | arrays.js:52:5:52:11 | [CallExpr] sink(x) | semmle.label | 1 |
| arrays.js:52:5:52:12 | [ExprStmt] sink(x); | arrays.js:52:5:52:11 | [CallExpr] sink(x) | semmle.order | 1 |
| arrays.js:55:3:57:3 | [ForOfStmt] for (co ... OK } | arrays.js:55:8:55:14 | [DeclStmt] const x = ... | semmle.label | 1 |
| arrays.js:55:3:57:3 | [ForOfStmt] for (co ... OK } | arrays.js:55:8:55:14 | [DeclStmt] const x = ... | semmle.order | 1 |
| arrays.js:55:3:57:3 | [ForOfStmt] for (co ... OK } | arrays.js:55:19:55:33 | [MethodCallExpr] Array.from(arr) | semmle.label | 2 |
| arrays.js:55:3:57:3 | [ForOfStmt] for (co ... OK } | arrays.js:55:19:55:33 | [MethodCallExpr] Array.from(arr) | semmle.order | 2 |
| arrays.js:55:3:57:3 | [ForOfStmt] for (co ... OK } | arrays.js:55:36:57:3 | [BlockStmt] { s ... OK } | semmle.label | 3 |
| arrays.js:55:3:57:3 | [ForOfStmt] for (co ... OK } | arrays.js:55:36:57:3 | [BlockStmt] { s ... OK } | semmle.order | 3 |
| arrays.js:55:8:55:14 | [DeclStmt] const x = ... | arrays.js:55:14:55:14 | [VariableDeclarator] x | semmle.label | 1 |
| arrays.js:55:8:55:14 | [DeclStmt] const x = ... | arrays.js:55:14:55:14 | [VariableDeclarator] x | semmle.order | 1 |
| arrays.js:55:14:55:14 | [VariableDeclarator] x | arrays.js:55:14:55:14 | [VarDecl] x | semmle.label | 1 |
| arrays.js:55:14:55:14 | [VariableDeclarator] x | arrays.js:55:14:55:14 | [VarDecl] x | semmle.order | 1 |
| arrays.js:55:19:55:28 | [DotExpr] Array.from | arrays.js:55:19:55:23 | [VarRef] Array | semmle.label | 1 |
| arrays.js:55:19:55:28 | [DotExpr] Array.from | arrays.js:55:19:55:23 | [VarRef] Array | semmle.order | 1 |
| arrays.js:55:19:55:28 | [DotExpr] Array.from | arrays.js:55:25:55:28 | [Label] from | semmle.label | 2 |
| arrays.js:55:19:55:28 | [DotExpr] Array.from | arrays.js:55:25:55:28 | [Label] from | semmle.order | 2 |
| arrays.js:55:19:55:33 | [MethodCallExpr] Array.from(arr) | arrays.js:55:19:55:28 | [DotExpr] Array.from | semmle.label | 0 |
| arrays.js:55:19:55:33 | [MethodCallExpr] Array.from(arr) | arrays.js:55:19:55:28 | [DotExpr] Array.from | semmle.order | 0 |
| arrays.js:55:19:55:33 | [MethodCallExpr] Array.from(arr) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:55:19:55:33 | [MethodCallExpr] Array.from(arr) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:55:36:57:3 | [BlockStmt] { s ... OK } | arrays.js:56:5:56:12 | [ExprStmt] sink(x); | semmle.label | 1 |
| arrays.js:55:36:57:3 | [BlockStmt] { s ... OK } | arrays.js:56:5:56:12 | [ExprStmt] sink(x); | semmle.order | 1 |
| arrays.js:56:5:56:11 | [CallExpr] sink(x) | arrays.js:56:5:56:8 | [VarRef] sink | semmle.label | 0 |
| arrays.js:56:5:56:11 | [CallExpr] sink(x) | arrays.js:56:5:56:8 | [VarRef] sink | semmle.order | 0 |
| arrays.js:56:5:56:11 | [CallExpr] sink(x) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:56:5:56:11 | [CallExpr] sink(x) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:56:5:56:12 | [ExprStmt] sink(x); | arrays.js:56:5:56:11 | [CallExpr] sink(x) | semmle.label | 1 |
| arrays.js:56:5:56:12 | [ExprStmt] sink(x); | arrays.js:56:5:56:11 | [CallExpr] sink(x) | semmle.order | 1 |
| arrays.js:59:3:61:3 | [ForOfStmt] for (co ... OK } | arrays.js:59:8:59:14 | [DeclStmt] const x = ... | semmle.label | 1 |
| arrays.js:59:3:61:3 | [ForOfStmt] for (co ... OK } | arrays.js:59:8:59:14 | [DeclStmt] const x = ... | semmle.order | 1 |
| arrays.js:59:3:61:3 | [ForOfStmt] for (co ... OK } | arrays.js:59:19:59:26 | [ArrayExpr] [...arr] | semmle.label | 2 |
| arrays.js:59:3:61:3 | [ForOfStmt] for (co ... OK } | arrays.js:59:19:59:26 | [ArrayExpr] [...arr] | semmle.order | 2 |
| arrays.js:59:3:61:3 | [ForOfStmt] for (co ... OK } | arrays.js:59:29:61:3 | [BlockStmt] { s ... OK } | semmle.label | 3 |
| arrays.js:59:3:61:3 | [ForOfStmt] for (co ... OK } | arrays.js:59:29:61:3 | [BlockStmt] { s ... OK } | semmle.order | 3 |
| arrays.js:59:8:59:14 | [DeclStmt] const x = ... | arrays.js:59:14:59:14 | [VariableDeclarator] x | semmle.label | 1 |
| arrays.js:59:8:59:14 | [DeclStmt] const x = ... | arrays.js:59:14:59:14 | [VariableDeclarator] x | semmle.order | 1 |
| arrays.js:59:14:59:14 | [VariableDeclarator] x | arrays.js:59:14:59:14 | [VarDecl] x | semmle.label | 1 |
| arrays.js:59:14:59:14 | [VariableDeclarator] x | arrays.js:59:14:59:14 | [VarDecl] x | semmle.order | 1 |
| arrays.js:59:19:59:26 | [ArrayExpr] [...arr] | arrays.js:59:20:59:25 | [SpreadElement] ...arr | semmle.label | 1 |
| arrays.js:59:19:59:26 | [ArrayExpr] [...arr] | arrays.js:59:20:59:25 | [SpreadElement] ...arr | semmle.order | 1 |
| arrays.js:59:20:59:25 | [SpreadElement] ...arr | arrays.js:59:23:59:25 | [VarRef] arr | semmle.label | 1 |
| arrays.js:59:20:59:25 | [SpreadElement] ...arr | arrays.js:59:23:59:25 | [VarRef] arr | semmle.order | 1 |
| arrays.js:59:29:61:3 | [BlockStmt] { s ... OK } | arrays.js:60:5:60:12 | [ExprStmt] sink(x); | semmle.label | 1 |
| arrays.js:59:29:61:3 | [BlockStmt] { s ... OK } | arrays.js:60:5:60:12 | [ExprStmt] sink(x); | semmle.order | 1 |
| arrays.js:60:5:60:11 | [CallExpr] sink(x) | arrays.js:60:5:60:8 | [VarRef] sink | semmle.label | 0 |
| arrays.js:60:5:60:11 | [CallExpr] sink(x) | arrays.js:60:5:60:8 | [VarRef] sink | semmle.order | 0 |
| arrays.js:60:5:60:11 | [CallExpr] sink(x) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:60:5:60:11 | [CallExpr] sink(x) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:60:5:60:12 | [ExprStmt] sink(x); | arrays.js:60:5:60:11 | [CallExpr] sink(x) | semmle.label | 1 |
| arrays.js:60:5:60:12 | [ExprStmt] sink(x); | arrays.js:60:5:60:11 | [CallExpr] sink(x) | semmle.order | 1 |
| arrays.js:63:3:63:16 | [DeclStmt] var arr7 = ... | arrays.js:63:7:63:15 | [VariableDeclarator] arr7 = [] | semmle.label | 1 |
| arrays.js:63:3:63:16 | [DeclStmt] var arr7 = ... | arrays.js:63:7:63:15 | [VariableDeclarator] arr7 = [] | semmle.order | 1 |
| arrays.js:63:7:63:15 | [VariableDeclarator] arr7 = [] | arrays.js:63:7:63:10 | [VarDecl] arr7 | semmle.label | 1 |
| arrays.js:63:7:63:15 | [VariableDeclarator] arr7 = [] | arrays.js:63:7:63:10 | [VarDecl] arr7 | semmle.order | 1 |
| arrays.js:63:7:63:15 | [VariableDeclarator] arr7 = [] | arrays.js:63:14:63:15 | [ArrayExpr] [] | semmle.label | 2 |
| arrays.js:63:7:63:15 | [VariableDeclarator] arr7 = [] | arrays.js:63:14:63:15 | [ArrayExpr] [] | semmle.order | 2 |
| arrays.js:64:3:64:11 | [DotExpr] arr7.push | arrays.js:64:3:64:6 | [VarRef] arr7 | semmle.label | 1 |
| arrays.js:64:3:64:11 | [DotExpr] arr7.push | arrays.js:64:3:64:6 | [VarRef] arr7 | semmle.order | 1 |
| arrays.js:64:3:64:11 | [DotExpr] arr7.push | arrays.js:64:8:64:11 | [Label] push | semmle.label | 2 |
| arrays.js:64:3:64:11 | [DotExpr] arr7.push | arrays.js:64:8:64:11 | [Label] push | semmle.order | 2 |
| arrays.js:64:3:64:19 | [MethodCallExpr] arr7.push(...arr) | arrays.js:64:3:64:11 | [DotExpr] arr7.push | semmle.label | 0 |
| arrays.js:64:3:64:19 | [MethodCallExpr] arr7.push(...arr) | arrays.js:64:3:64:11 | [DotExpr] arr7.push | semmle.order | 0 |
| arrays.js:64:3:64:19 | [MethodCallExpr] arr7.push(...arr) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:64:3:64:19 | [MethodCallExpr] arr7.push(...arr) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:64:3:64:20 | [ExprStmt] arr7.push(...arr); | arrays.js:64:3:64:19 | [MethodCallExpr] arr7.push(...arr) | semmle.label | 1 |
| arrays.js:64:3:64:20 | [ExprStmt] arr7.push(...arr); | arrays.js:64:3:64:19 | [MethodCallExpr] arr7.push(...arr) | semmle.order | 1 |
| arrays.js:64:13:64:18 | [SpreadElement] ...arr | arrays.js:64:16:64:18 | [VarRef] arr | semmle.label | 1 |
| arrays.js:64:13:64:18 | [SpreadElement] ...arr | arrays.js:64:16:64:18 | [VarRef] arr | semmle.order | 1 |
| arrays.js:65:3:67:3 | [ForOfStmt] for (co ... OK } | arrays.js:65:8:65:14 | [DeclStmt] const x = ... | semmle.label | 1 |
| arrays.js:65:3:67:3 | [ForOfStmt] for (co ... OK } | arrays.js:65:8:65:14 | [DeclStmt] const x = ... | semmle.order | 1 |
| arrays.js:65:3:67:3 | [ForOfStmt] for (co ... OK } | arrays.js:65:19:65:22 | [VarRef] arr7 | semmle.label | 2 |
| arrays.js:65:3:67:3 | [ForOfStmt] for (co ... OK } | arrays.js:65:19:65:22 | [VarRef] arr7 | semmle.order | 2 |
| arrays.js:65:3:67:3 | [ForOfStmt] for (co ... OK } | arrays.js:65:25:67:3 | [BlockStmt] { s ... OK } | semmle.label | 3 |
| arrays.js:65:3:67:3 | [ForOfStmt] for (co ... OK } | arrays.js:65:25:67:3 | [BlockStmt] { s ... OK } | semmle.order | 3 |
| arrays.js:65:8:65:14 | [DeclStmt] const x = ... | arrays.js:65:14:65:14 | [VariableDeclarator] x | semmle.label | 1 |
| arrays.js:65:8:65:14 | [DeclStmt] const x = ... | arrays.js:65:14:65:14 | [VariableDeclarator] x | semmle.order | 1 |
| arrays.js:65:14:65:14 | [VariableDeclarator] x | arrays.js:65:14:65:14 | [VarDecl] x | semmle.label | 1 |
| arrays.js:65:14:65:14 | [VariableDeclarator] x | arrays.js:65:14:65:14 | [VarDecl] x | semmle.order | 1 |
| arrays.js:65:25:67:3 | [BlockStmt] { s ... OK } | arrays.js:66:5:66:12 | [ExprStmt] sink(x); | semmle.label | 1 |
| arrays.js:65:25:67:3 | [BlockStmt] { s ... OK } | arrays.js:66:5:66:12 | [ExprStmt] sink(x); | semmle.order | 1 |
| arrays.js:66:5:66:11 | [CallExpr] sink(x) | arrays.js:66:5:66:8 | [VarRef] sink | semmle.label | 0 |
| arrays.js:66:5:66:11 | [CallExpr] sink(x) | arrays.js:66:5:66:8 | [VarRef] sink | semmle.order | 0 |
| arrays.js:66:5:66:11 | [CallExpr] sink(x) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| arrays.js:66:5:66:11 | [CallExpr] sink(x) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| arrays.js:66:5:66:12 | [ExprStmt] sink(x); | arrays.js:66:5:66:11 | [CallExpr] sink(x) | semmle.label | 1 |
| arrays.js:66:5:66:12 | [ExprStmt] sink(x); | arrays.js:66:5:66:11 | [CallExpr] sink(x) | semmle.order | 1 |
| file://:0:0:0:0 | (Arguments) | arrays.js:5:8:5:14 | [DotExpr] obj.foo | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:5:8:5:14 | [DotExpr] obj.foo | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:8:12:8:17 | [VarRef] source | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:8:12:8:17 | [VarRef] source | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:11:10:11:15 | [IndexExpr] arr[i] | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:11:10:11:15 | [IndexExpr] arr[i] | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:15:15:15:28 | [ArrowFunctionExpr] (e) => sink(e) | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:15:15:15:28 | [ArrowFunctionExpr] (e) => sink(e) | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:15:27:15:27 | [VarRef] e | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:15:27:15:27 | [VarRef] e | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:16:11:16:24 | [ArrowFunctionExpr] (e) => sink(e) | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:16:11:16:24 | [ArrowFunctionExpr] (e) => sink(e) | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:16:23:16:23 | [VarRef] e | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:16:23:16:23 | [VarRef] e | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:18:17:18:29 | [ArrowFunctionExpr] i => "source" | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:18:17:18:29 | [ArrowFunctionExpr] i => "source" | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:18:40:18:51 | [ArrowFunctionExpr] e => sink(e) | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:18:40:18:51 | [ArrowFunctionExpr] e => sink(e) | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:18:50:18:50 | [VarRef] e | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:18:50:18:50 | [VarRef] e | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:20:8:20:16 | [MethodCallExpr] arr.pop() | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:20:8:20:16 | [MethodCallExpr] arr.pop() | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:23:8:23:17 | [MethodCallExpr] arr2.pop() | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:23:8:23:17 | [MethodCallExpr] arr2.pop() | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:26:8:26:17 | [MethodCallExpr] arr3.pop() | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:26:8:26:17 | [MethodCallExpr] arr3.pop() | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:29:15:29:15 | [Literal] 0 | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:29:15:29:15 | [Literal] 0 | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:29:18:29:18 | [Literal] 0 | semmle.label | 1 |
| file://:0:0:0:0 | (Arguments) | arrays.js:29:18:29:18 | [Literal] 0 | semmle.order | 1 |
| file://:0:0:0:0 | (Arguments) | arrays.js:29:21:29:28 | [Literal] "source" | semmle.label | 2 |
| file://:0:0:0:0 | (Arguments) | arrays.js:29:21:29:28 | [Literal] "source" | semmle.order | 2 |
| file://:0:0:0:0 | (Arguments) | arrays.js:30:8:30:17 | [MethodCallExpr] arr4.pop() | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:30:8:30:17 | [MethodCallExpr] arr4.pop() | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:32:24:32:27 | [VarRef] arr4 | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:32:24:32:27 | [VarRef] arr4 | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:33:8:33:17 | [MethodCallExpr] arr5.pop() | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:33:8:33:17 | [MethodCallExpr] arr5.pop() | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:35:8:35:26 | [MethodCallExpr] arr5.slice(2).pop() | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:35:8:35:26 | [MethodCallExpr] arr5.slice(2).pop() | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:35:19:35:19 | [Literal] 2 | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:35:19:35:19 | [Literal] 2 | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:41:8:41:17 | [MethodCallExpr] arr6.pop() | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:41:8:41:17 | [MethodCallExpr] arr6.pop() | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:44:22:47:3 | [ArrowFunctionExpr] (e, i, ... nt. } | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:44:22:47:3 | [ArrowFunctionExpr] (e, i, ... nt. } | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:45:10:45:18 | [MethodCallExpr] ary.pop() | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:45:10:45:18 | [MethodCallExpr] ary.pop() | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:46:10:46:12 | [VarRef] ary | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:46:10:46:12 | [VarRef] ary | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:49:8:49:13 | [IndexExpr] arr[0] | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:49:8:49:13 | [IndexExpr] arr[0] | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:52:10:52:10 | [VarRef] x | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:52:10:52:10 | [VarRef] x | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:55:30:55:32 | [VarRef] arr | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:55:30:55:32 | [VarRef] arr | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:56:10:56:10 | [VarRef] x | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:56:10:56:10 | [VarRef] x | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:60:10:60:10 | [VarRef] x | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:60:10:60:10 | [VarRef] x | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:64:13:64:18 | [SpreadElement] ...arr | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:64:13:64:18 | [SpreadElement] ...arr | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:66:10:66:10 | [VarRef] x | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | arrays.js:66:10:66:10 | [VarRef] x | semmle.order | 0 |
| file://:0:0:0:0 | (Parameters) | arrays.js:15:16:15:16 | [SimpleParameter] e | semmle.label | 0 |
| file://:0:0:0:0 | (Parameters) | arrays.js:15:16:15:16 | [SimpleParameter] e | semmle.order | 0 |
| file://:0:0:0:0 | (Parameters) | arrays.js:16:12:16:12 | [SimpleParameter] e | semmle.label | 0 |
| file://:0:0:0:0 | (Parameters) | arrays.js:16:12:16:12 | [SimpleParameter] e | semmle.order | 0 |
| file://:0:0:0:0 | (Parameters) | arrays.js:18:17:18:17 | [SimpleParameter] i | semmle.label | 0 |
| file://:0:0:0:0 | (Parameters) | arrays.js:18:17:18:17 | [SimpleParameter] i | semmle.order | 0 |
| file://:0:0:0:0 | (Parameters) | arrays.js:18:40:18:40 | [SimpleParameter] e | semmle.label | 0 |
| file://:0:0:0:0 | (Parameters) | arrays.js:18:40:18:40 | [SimpleParameter] e | semmle.order | 0 |
| file://:0:0:0:0 | (Parameters) | arrays.js:44:23:44:23 | [SimpleParameter] e | semmle.label | 0 |
| file://:0:0:0:0 | (Parameters) | arrays.js:44:23:44:23 | [SimpleParameter] e | semmle.order | 0 |
| file://:0:0:0:0 | (Parameters) | arrays.js:44:26:44:26 | [SimpleParameter] i | semmle.label | 1 |
| file://:0:0:0:0 | (Parameters) | arrays.js:44:26:44:26 | [SimpleParameter] i | semmle.order | 1 |
| file://:0:0:0:0 | (Parameters) | arrays.js:44:29:44:31 | [SimpleParameter] ary | semmle.label | 2 |
| file://:0:0:0:0 | (Parameters) | arrays.js:44:29:44:31 | [SimpleParameter] ary | semmle.order | 2 |
graphProperties
| semmle.graphKind | tree |

View File

@@ -0,0 +1,2 @@
import javascript
import semmle.javascript.PrintAst

View File

@@ -0,0 +1,84 @@
nodes
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) |
| file://:0:0:0:0 | (Attributes) | semmle.label | (Attributes) |
| file://:0:0:0:0 | (Attributes) | semmle.label | (Attributes) |
| file://:0:0:0:0 | (Attributes) | semmle.label | (Attributes) |
| tst.html:2:1:13:7 | [HTML::Element] <html ... | semmle.label | [HTML::Element] <html ... |
| tst.html:2:1:13:7 | [HTML::Element] <html ... | semmle.order | 1 |
| tst.html:3:5:9:11 | [HTML::Element] <head ... | semmle.label | [HTML::Element] <head ... |
| tst.html:4:9:4:32 | [HTML::Element] <title ... | semmle.label | [HTML::Element] <title ... |
| tst.html:5:9:5:43 | [HTML::ScriptElement] <script ... | semmle.label | [HTML::ScriptElement] <script ... |
| tst.html:5:17:5:33 | [HTML::Attribute] src=external.js | semmle.label | [HTML::Attribute] src=external.js |
| tst.html:6:9:8:17 | [HTML::ScriptElement] <script ... | semmle.label | [HTML::ScriptElement] <script ... |
| tst.html:6:17:8:8 | (Script) | semmle.label | (Script) |
| tst.html:7:13:7:17 | [VarRef] alert | semmle.label | [VarRef] alert |
| tst.html:7:13:7:34 | [CallExpr] alert(" ... orld!") | semmle.label | [CallExpr] alert(" ... orld!") |
| tst.html:7:13:7:35 | [ExprStmt] alert(" ... rld!"); | semmle.label | [ExprStmt] alert(" ... rld!"); |
| tst.html:7:19:7:33 | [Literal] "Hello, world!" | semmle.label | [Literal] "Hello, world!" |
| tst.html:10:5:12:11 | [HTML::Element] <body ... | semmle.label | [HTML::Element] <body ... |
| tst.html:10:11:10:16 | [HTML::Attribute] ng-app= | semmle.label | [HTML::Attribute] ng-app= |
| tst.html:11:9:11:64 | [HTML::Element] <a ... | semmle.label | [HTML::Element] <a ... |
| tst.html:11:12:11:49 | [HTML::Attribute] href=javascript:void(alert('Nope!')) | semmle.label | [HTML::Attribute] href=javascript:void(alert('Nope!')) |
| tst.html:11:29:11:48 | (Script) | semmle.label | (Script) |
| tst.html:11:29:11:48 | [ExprStmt] void(alert('Nope!')) | semmle.label | [ExprStmt] void(alert('Nope!')) |
| tst.html:11:29:11:48 | [UnaryExpr] void(alert('Nope!')) | semmle.label | [UnaryExpr] void(alert('Nope!')) |
| tst.html:11:33:11:48 | [ParExpr] (alert('Nope!')) | semmle.label | [ParExpr] (alert('Nope!')) |
| tst.html:11:34:11:38 | [VarRef] alert | semmle.label | [VarRef] alert |
| tst.html:11:34:11:47 | [CallExpr] alert('Nope!') | semmle.label | [CallExpr] alert('Nope!') |
| tst.html:11:40:11:46 | [Literal] 'Nope!' | semmle.label | [Literal] 'Nope!' |
edges
| file://:0:0:0:0 | (Arguments) | tst.html:7:19:7:33 | [Literal] "Hello, world!" | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | tst.html:7:19:7:33 | [Literal] "Hello, world!" | semmle.order | 0 |
| file://:0:0:0:0 | (Arguments) | tst.html:11:40:11:46 | [Literal] 'Nope!' | semmle.label | 0 |
| file://:0:0:0:0 | (Arguments) | tst.html:11:40:11:46 | [Literal] 'Nope!' | semmle.order | 0 |
| file://:0:0:0:0 | (Attributes) | tst.html:5:17:5:33 | [HTML::Attribute] src=external.js | semmle.label | 0 |
| file://:0:0:0:0 | (Attributes) | tst.html:5:17:5:33 | [HTML::Attribute] src=external.js | semmle.order | 0 |
| file://:0:0:0:0 | (Attributes) | tst.html:10:11:10:16 | [HTML::Attribute] ng-app= | semmle.label | 0 |
| file://:0:0:0:0 | (Attributes) | tst.html:10:11:10:16 | [HTML::Attribute] ng-app= | semmle.order | 0 |
| file://:0:0:0:0 | (Attributes) | tst.html:11:12:11:49 | [HTML::Attribute] href=javascript:void(alert('Nope!')) | semmle.label | 0 |
| file://:0:0:0:0 | (Attributes) | tst.html:11:12:11:49 | [HTML::Attribute] href=javascript:void(alert('Nope!')) | semmle.order | 0 |
| tst.html:2:1:13:7 | [HTML::Element] <html ... | tst.html:3:5:9:11 | [HTML::Element] <head ... | semmle.label | 1 |
| tst.html:2:1:13:7 | [HTML::Element] <html ... | tst.html:3:5:9:11 | [HTML::Element] <head ... | semmle.order | 1 |
| tst.html:2:1:13:7 | [HTML::Element] <html ... | tst.html:10:5:12:11 | [HTML::Element] <body ... | semmle.label | 3 |
| tst.html:2:1:13:7 | [HTML::Element] <html ... | tst.html:10:5:12:11 | [HTML::Element] <body ... | semmle.order | 3 |
| tst.html:3:5:9:11 | [HTML::Element] <head ... | tst.html:4:9:4:32 | [HTML::Element] <title ... | semmle.label | 1 |
| tst.html:3:5:9:11 | [HTML::Element] <head ... | tst.html:4:9:4:32 | [HTML::Element] <title ... | semmle.order | 1 |
| tst.html:3:5:9:11 | [HTML::Element] <head ... | tst.html:5:9:5:43 | [HTML::ScriptElement] <script ... | semmle.label | 3 |
| tst.html:3:5:9:11 | [HTML::Element] <head ... | tst.html:5:9:5:43 | [HTML::ScriptElement] <script ... | semmle.order | 3 |
| tst.html:3:5:9:11 | [HTML::Element] <head ... | tst.html:6:9:8:17 | [HTML::ScriptElement] <script ... | semmle.label | 5 |
| tst.html:3:5:9:11 | [HTML::Element] <head ... | tst.html:6:9:8:17 | [HTML::ScriptElement] <script ... | semmle.order | 5 |
| tst.html:5:9:5:43 | [HTML::ScriptElement] <script ... | file://:0:0:0:0 | (Attributes) | semmle.label | -1 |
| tst.html:5:9:5:43 | [HTML::ScriptElement] <script ... | file://:0:0:0:0 | (Attributes) | semmle.order | -1 |
| tst.html:6:9:8:17 | [HTML::ScriptElement] <script ... | tst.html:6:17:8:8 | (Script) | semmle.label | -200 |
| tst.html:6:9:8:17 | [HTML::ScriptElement] <script ... | tst.html:6:17:8:8 | (Script) | semmle.order | -200 |
| tst.html:6:17:8:8 | (Script) | tst.html:7:13:7:35 | [ExprStmt] alert(" ... rld!"); | semmle.label | 0 |
| tst.html:6:17:8:8 | (Script) | tst.html:7:13:7:35 | [ExprStmt] alert(" ... rld!"); | semmle.order | 0 |
| tst.html:7:13:7:34 | [CallExpr] alert(" ... orld!") | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| tst.html:7:13:7:34 | [CallExpr] alert(" ... orld!") | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| tst.html:7:13:7:34 | [CallExpr] alert(" ... orld!") | tst.html:7:13:7:17 | [VarRef] alert | semmle.label | 0 |
| tst.html:7:13:7:34 | [CallExpr] alert(" ... orld!") | tst.html:7:13:7:17 | [VarRef] alert | semmle.order | 0 |
| tst.html:7:13:7:35 | [ExprStmt] alert(" ... rld!"); | tst.html:7:13:7:34 | [CallExpr] alert(" ... orld!") | semmle.label | 1 |
| tst.html:7:13:7:35 | [ExprStmt] alert(" ... rld!"); | tst.html:7:13:7:34 | [CallExpr] alert(" ... orld!") | semmle.order | 1 |
| tst.html:10:5:12:11 | [HTML::Element] <body ... | file://:0:0:0:0 | (Attributes) | semmle.label | -1 |
| tst.html:10:5:12:11 | [HTML::Element] <body ... | file://:0:0:0:0 | (Attributes) | semmle.order | -1 |
| tst.html:10:5:12:11 | [HTML::Element] <body ... | tst.html:11:9:11:64 | [HTML::Element] <a ... | semmle.label | 1 |
| tst.html:10:5:12:11 | [HTML::Element] <body ... | tst.html:11:9:11:64 | [HTML::Element] <a ... | semmle.order | 1 |
| tst.html:11:9:11:64 | [HTML::Element] <a ... | file://:0:0:0:0 | (Attributes) | semmle.label | -1 |
| tst.html:11:9:11:64 | [HTML::Element] <a ... | file://:0:0:0:0 | (Attributes) | semmle.order | -1 |
| tst.html:11:12:11:49 | [HTML::Attribute] href=javascript:void(alert('Nope!')) | tst.html:11:29:11:48 | (Script) | semmle.label | 0 |
| tst.html:11:12:11:49 | [HTML::Attribute] href=javascript:void(alert('Nope!')) | tst.html:11:29:11:48 | (Script) | semmle.order | 0 |
| tst.html:11:29:11:48 | (Script) | tst.html:11:29:11:48 | [ExprStmt] void(alert('Nope!')) | semmle.label | 0 |
| tst.html:11:29:11:48 | (Script) | tst.html:11:29:11:48 | [ExprStmt] void(alert('Nope!')) | semmle.order | 0 |
| tst.html:11:29:11:48 | [ExprStmt] void(alert('Nope!')) | tst.html:11:29:11:48 | [UnaryExpr] void(alert('Nope!')) | semmle.label | 1 |
| tst.html:11:29:11:48 | [ExprStmt] void(alert('Nope!')) | tst.html:11:29:11:48 | [UnaryExpr] void(alert('Nope!')) | semmle.order | 1 |
| tst.html:11:29:11:48 | [UnaryExpr] void(alert('Nope!')) | tst.html:11:33:11:48 | [ParExpr] (alert('Nope!')) | semmle.label | 1 |
| tst.html:11:29:11:48 | [UnaryExpr] void(alert('Nope!')) | tst.html:11:33:11:48 | [ParExpr] (alert('Nope!')) | semmle.order | 1 |
| tst.html:11:33:11:48 | [ParExpr] (alert('Nope!')) | tst.html:11:34:11:47 | [CallExpr] alert('Nope!') | semmle.label | 1 |
| tst.html:11:33:11:48 | [ParExpr] (alert('Nope!')) | tst.html:11:34:11:47 | [CallExpr] alert('Nope!') | semmle.order | 1 |
| tst.html:11:34:11:47 | [CallExpr] alert('Nope!') | file://:0:0:0:0 | (Arguments) | semmle.label | 1 |
| tst.html:11:34:11:47 | [CallExpr] alert('Nope!') | file://:0:0:0:0 | (Arguments) | semmle.order | 1 |
| tst.html:11:34:11:47 | [CallExpr] alert('Nope!') | tst.html:11:34:11:38 | [VarRef] alert | semmle.label | 0 |
| tst.html:11:34:11:47 | [CallExpr] alert('Nope!') | tst.html:11:34:11:38 | [VarRef] alert | semmle.order | 0 |
graphProperties
| semmle.graphKind | tree |

View File

@@ -0,0 +1,2 @@
import javascript
import semmle.javascript.PrintAst

View File

@@ -0,0 +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" |
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 |
graphProperties
| semmle.graphKind | tree |

View File

@@ -0,0 +1,2 @@
import javascript
import semmle.javascript.PrintAst

View File

@@ -0,0 +1,308 @@
nodes
| file://:0:0:0:0 | (Attributes) | semmle.label | (Attributes) |
| file://:0:0:0:0 | (Attributes) | semmle.label | (Attributes) |
| file://:0:0:0:0 | (Attributes) | semmle.label | (Attributes) |
| file://:0:0:0:0 | (Attributes) | semmle.label | (Attributes) |
| file://:0:0:0:0 | (Body) | semmle.label | (Body) |
| file://:0:0:0:0 | (Body) | semmle.label | (Body) |
| file://:0:0:0:0 | (Body) | semmle.label | (Body) |
| file://:0:0:0:0 | (Body) | semmle.label | (Body) |
| tst.js:1:1:1:32 | [DeclStmt] var href = ... | semmle.label | [DeclStmt] var href = ... |
| tst.js:1:1:1:32 | [DeclStmt] var href = ... | semmle.order | 1 |
| tst.js:1:5:1:8 | [VarDecl] href | semmle.label | [VarDecl] href |
| tst.js:1:5:1:31 | [VariableDeclarator] href = ... le.com" | semmle.label | [VariableDeclarator] href = ... le.com" |
| tst.js:1:12:1:31 | [Literal] "http://example.com" | semmle.label | [Literal] "http://example.com" |
| tst.js:2:1:2:47 | [DeclStmt] var linkTypes = ... | semmle.label | [DeclStmt] var linkTypes = ... |
| tst.js:2:1:2:47 | [DeclStmt] var linkTypes = ... | semmle.order | 2 |
| tst.js:2:5:2:13 | [VarDecl] linkTypes | semmle.label | [VarDecl] linkTypes |
| tst.js:2:5:2:46 | [VariableDeclarator] linkTyp ... rrer" } | semmle.label | [VariableDeclarator] linkTyp ... rrer" } |
| tst.js:2:17:2:46 | [ObjectExpr] {rel: ...} | semmle.label | [ObjectExpr] {rel: ...} |
| 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: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: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: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 | [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: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: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: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: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 |
| tst.js:7:1:7:52 | [DeclStmt] var fragment = ... | semmle.label | [DeclStmt] var fragment = ... |
| 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: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: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 = ... |
| tstest.tsx:1:1:1:32 | [DeclStmt] var href = ... | semmle.order | 8 |
| tstest.tsx:1:5:1:8 | [VarDecl] href | semmle.label | [VarDecl] href |
| tstest.tsx:1:5:1:31 | [VariableDeclarator] href = ... le.com" | semmle.label | [VariableDeclarator] href = ... le.com" |
| tstest.tsx:1:12:1:31 | [Literal] "http://example.com" | semmle.label | [Literal] "http://example.com" |
| tstest.tsx:2:1:2:47 | [DeclStmt] var linkTypes = ... | semmle.label | [DeclStmt] var linkTypes = ... |
| tstest.tsx:2:1:2:47 | [DeclStmt] var linkTypes = ... | semmle.order | 9 |
| tstest.tsx:2:5:2:13 | [VarDecl] linkTypes | semmle.label | [VarDecl] linkTypes |
| tstest.tsx:2:5:2:46 | [VariableDeclarator] linkTyp ... rrer" } | semmle.label | [VariableDeclarator] linkTyp ... rrer" } |
| tstest.tsx:2:17:2:46 | [ObjectExpr] {rel: ...} | semmle.label | [ObjectExpr] {rel: ...} |
| 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: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: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: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 | [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: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: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: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: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 |
| tstest.tsx:7:1:7:52 | [DeclStmt] var fragment = ... | semmle.label | [DeclStmt] var fragment = ... |
| 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: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: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 | (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: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: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 |
| file://:0:0:0:0 | (Body) | tstest.tsx:3:47:3:54 | [Literal] Link to | semmle.order | 0 |
| file://:0:0:0:0 | (Body) | tstest.tsx:3:56:3:59 | [VarRef] href | semmle.label | 1 |
| 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: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: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 |
| tst.js:1:1:1:32 | [DeclStmt] var href = ... | tst.js:1:5:1:31 | [VariableDeclarator] href = ... le.com" | semmle.order | 1 |
| tst.js:1:5:1:31 | [VariableDeclarator] href = ... le.com" | tst.js:1:5:1:8 | [VarDecl] href | semmle.label | 1 |
| tst.js:1:5:1:31 | [VariableDeclarator] href = ... le.com" | tst.js:1:5:1:8 | [VarDecl] href | semmle.order | 1 |
| tst.js:1:5:1:31 | [VariableDeclarator] href = ... le.com" | tst.js:1:12:1:31 | [Literal] "http://example.com" | semmle.label | 2 |
| tst.js:1:5:1:31 | [VariableDeclarator] href = ... le.com" | tst.js:1:12:1:31 | [Literal] "http://example.com" | semmle.order | 2 |
| tst.js:2:1:2:47 | [DeclStmt] var linkTypes = ... | tst.js:2:5:2:46 | [VariableDeclarator] linkTyp ... rrer" } | semmle.label | 1 |
| tst.js:2:1:2:47 | [DeclStmt] var linkTypes = ... | tst.js:2:5:2:46 | [VariableDeclarator] linkTyp ... rrer" } | semmle.order | 1 |
| tst.js:2:5:2:46 | [VariableDeclarator] linkTyp ... rrer" } | tst.js:2:5:2:13 | [VarDecl] linkTypes | semmle.label | 1 |
| tst.js:2:5:2:46 | [VariableDeclarator] linkTyp ... rrer" } | tst.js:2:5:2:13 | [VarDecl] linkTypes | semmle.order | 1 |
| tst.js:2:5:2:46 | [VariableDeclarator] linkTyp ... rrer" } | tst.js:2:17:2:46 | [ObjectExpr] {rel: ...} | semmle.label | 2 |
| tst.js:2:5:2:46 | [VariableDeclarator] linkTyp ... rrer" } | tst.js:2:17:2:46 | [ObjectExpr] {rel: ...} | semmle.order | 2 |
| tst.js:2:17:2:46 | [ObjectExpr] {rel: ...} | tst.js:2:19:2:44 | [Property] rel: "noopener noreferrer" | semmle.label | 1 |
| tst.js:2:17:2:46 | [ObjectExpr] {rel: ...} | tst.js:2:19:2:44 | [Property] rel: "noopener noreferrer" | semmle.order | 1 |
| tst.js:2:19:2:44 | [Property] rel: "noopener noreferrer" | tst.js:2:19:2:21 | [Label] rel | semmle.label | 1 |
| 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: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: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: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 |
| 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 |
| tstest.tsx:1:5:1:31 | [VariableDeclarator] href = ... le.com" | tstest.tsx:1:5:1:8 | [VarDecl] href | semmle.order | 1 |
| tstest.tsx:1:5:1:31 | [VariableDeclarator] href = ... le.com" | tstest.tsx:1:12:1:31 | [Literal] "http://example.com" | semmle.label | 2 |
| tstest.tsx:1:5:1:31 | [VariableDeclarator] href = ... le.com" | tstest.tsx:1:12:1:31 | [Literal] "http://example.com" | semmle.order | 2 |
| tstest.tsx:2:1:2:47 | [DeclStmt] var linkTypes = ... | tstest.tsx:2:5:2:46 | [VariableDeclarator] linkTyp ... rrer" } | semmle.label | 1 |
| tstest.tsx:2:1:2:47 | [DeclStmt] var linkTypes = ... | tstest.tsx:2:5:2:46 | [VariableDeclarator] linkTyp ... rrer" } | semmle.order | 1 |
| tstest.tsx:2:5:2:46 | [VariableDeclarator] linkTyp ... rrer" } | tstest.tsx:2:5:2:13 | [VarDecl] linkTypes | semmle.label | 1 |
| tstest.tsx:2:5:2:46 | [VariableDeclarator] linkTyp ... rrer" } | tstest.tsx:2:5:2:13 | [VarDecl] linkTypes | semmle.order | 1 |
| tstest.tsx:2:5:2:46 | [VariableDeclarator] linkTyp ... rrer" } | tstest.tsx:2:17:2:46 | [ObjectExpr] {rel: ...} | semmle.label | 2 |
| tstest.tsx:2:5:2:46 | [VariableDeclarator] linkTyp ... rrer" } | tstest.tsx:2:17:2:46 | [ObjectExpr] {rel: ...} | semmle.order | 2 |
| tstest.tsx:2:17:2:46 | [ObjectExpr] {rel: ...} | tstest.tsx:2:19:2:44 | [Property] rel: "noopener noreferrer" | semmle.label | 1 |
| tstest.tsx:2:17:2:46 | [ObjectExpr] {rel: ...} | tstest.tsx:2:19:2:44 | [Property] rel: "noopener noreferrer" | semmle.order | 1 |
| tstest.tsx:2:19:2:44 | [Property] rel: "noopener noreferrer" | tstest.tsx:2:19:2:21 | [Label] rel | semmle.label | 1 |
| 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: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: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: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 |
graphProperties
| semmle.graphKind | tree |

View File

@@ -0,0 +1,2 @@
import javascript
import semmle.javascript.PrintAst

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
import javascript
import semmle.javascript.PrintAst

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
import javascript
import semmle.javascript.PrintAst

View File

@@ -0,0 +1,151 @@
nodes
| external.yml:1:1:1:2 | [YAMLScalar] 42 | semmle.label | [YAMLScalar] 42 |
| external.yml:1:1:1:2 | [YAMLScalar] 42 | semmle.order | 1 |
| file://:0:0:0:0 | (Mapping 0) name: | semmle.label | (Mapping 0) name: |
| file://:0:0:0:0 | (Mapping 0) name: | semmle.label | (Mapping 0) name: |
| file://:0:0:0:0 | (Mapping 0) street: | semmle.label | (Mapping 0) street: |
| file://:0:0:0:0 | (Mapping 0) street: | semmle.label | (Mapping 0) street: |
| file://:0:0:0:0 | (Mapping 0) x: | semmle.label | (Mapping 0) x: |
| file://:0:0:0:0 | (Mapping 0) x: | semmle.label | (Mapping 0) x: |
| file://:0:0:0:0 | (Mapping 1) <<: | semmle.label | (Mapping 1) <<: |
| file://:0:0:0:0 | (Mapping 1) address: | semmle.label | (Mapping 1) address: |
| file://:0:0:0:0 | (Mapping 1) address: | semmle.label | (Mapping 1) address: |
| file://:0:0:0:0 | (Mapping 1) number: | semmle.label | (Mapping 1) number: |
| file://:0:0:0:0 | (Mapping 1) number: | semmle.label | (Mapping 1) number: |
| file://:0:0:0:0 | (Mapping 1) y: | semmle.label | (Mapping 1) y: |
| file://:0:0:0:0 | (Mapping 2) country: | semmle.label | (Mapping 2) country: |
| file://:0:0:0:0 | (Mapping 2) country: | semmle.label | (Mapping 2) country: |
| merge.yaml:1:1:3:8 | [YAMLSequence] - &A { ... y: 42 } | semmle.label | [YAMLSequence] - &A { ... y: 42 } |
| merge.yaml:1:1:3:8 | [YAMLSequence] - &A { ... y: 42 } | semmle.order | 2 |
| merge.yaml:1:3:1:21 | [YAMLMapping] &A { x: 23, y: 42 } | semmle.label | [YAMLMapping] &A { x: 23, y: 42 } |
| merge.yaml:1:8:1:8 | [YAMLScalar] x | semmle.label | [YAMLScalar] x |
| merge.yaml:1:11:1:12 | [YAMLScalar] 23 | semmle.label | [YAMLScalar] 23 |
| merge.yaml:1:15:1:15 | [YAMLScalar] y | semmle.label | [YAMLScalar] y |
| merge.yaml:1:18:1:19 | [YAMLScalar] 42 | semmle.label | [YAMLScalar] 42 |
| merge.yaml:2:3:2:3 | [YAMLScalar] x | semmle.label | [YAMLScalar] x |
| merge.yaml:2:3:3:8 | [YAMLMapping] x: 56 | semmle.label | [YAMLMapping] x: 56 |
| merge.yaml:2:6:2:7 | [YAMLScalar] 56 | semmle.label | [YAMLScalar] 56 |
| merge.yaml:3:3:3:4 | [YAMLScalar] << | semmle.label | [YAMLScalar] << |
| merge.yaml:3:7:3:8 | [YAMLAliasNode] *A | semmle.label | [YAMLAliasNode] *A |
| tst.yml:1:1:14:23 | [YAMLSequence] - "name ... Knopf" | semmle.label | [YAMLSequence] - "name ... Knopf" |
| tst.yml:1:1:14:23 | [YAMLSequence] - "name ... Knopf" | semmle.order | 3 |
| tst.yml:1:3:1:8 | [YAMLScalar] "name" | semmle.label | [YAMLScalar] "name" |
| tst.yml:1:3:7:0 | [YAMLMapping] "name": "Jim Knopf" | semmle.label | [YAMLMapping] "name": "Jim Knopf" |
| tst.yml:1:11:1:21 | [YAMLScalar] "Jim Knopf" | semmle.label | [YAMLScalar] "Jim Knopf" |
| tst.yml:2:3:2:9 | [YAMLScalar] address | semmle.label | [YAMLScalar] address |
| tst.yml:2:12:6:3 | [YAMLMapping] { | semmle.label | [YAMLMapping] { |
| tst.yml:3:5:3:12 | [YAMLScalar] "street" | semmle.label | [YAMLScalar] "street" |
| tst.yml:3:14:3:13 | [YAMLScalar] | semmle.label | [YAMLScalar] |
| tst.yml:4:5:4:12 | [YAMLScalar] "number" | semmle.label | [YAMLScalar] "number" |
| tst.yml:4:15:4:16 | [YAMLScalar] -1 | semmle.label | [YAMLScalar] -1 |
| tst.yml:5:5:5:13 | [YAMLScalar] "country" | semmle.label | [YAMLScalar] "country" |
| tst.yml:5:16:5:27 | [YAMLScalar] "Lummerland" | semmle.label | [YAMLScalar] "Lummerland" |
| tst.yml:7:3:7:6 | [YAMLScalar] name | semmle.label | [YAMLScalar] name |
| tst.yml:7:3:14:0 | [YAMLMapping] name: Frau Mahlzahn | semmle.label | [YAMLMapping] name: Frau Mahlzahn |
| tst.yml:7:9:7:21 | [YAMLScalar] Frau Mahlzahn | semmle.label | [YAMLScalar] Frau Mahlzahn |
| tst.yml:8:3:8:9 | [YAMLScalar] address | semmle.label | [YAMLScalar] address |
| tst.yml:9:5:9:10 | [YAMLScalar] street | semmle.label | [YAMLScalar] street |
| tst.yml:9:5:14:0 | [YAMLMapping] street: \| | semmle.label | [YAMLMapping] street: \| |
| tst.yml:9:13:11:0 | [YAMLScalar] \| | semmle.label | [YAMLScalar] \| |
| tst.yml:11:5:11:10 | [YAMLScalar] number | semmle.label | [YAMLScalar] number |
| tst.yml:11:13:11:15 | [YAMLScalar] 133 | semmle.label | [YAMLScalar] 133 |
| tst.yml:12:5:12:11 | [YAMLScalar] country | semmle.label | [YAMLScalar] country |
| tst.yml:12:14:13:18 | [YAMLScalar] < | semmle.label | [YAMLScalar] < |
| tst.yml:14:3:14:23 | [YAMLScalar] !includ ... nal.yml | semmle.label | [YAMLScalar] !includ ... nal.yml |
edges
| file://:0:0:0:0 | (Mapping 0) name: | tst.yml:1:3:1:8 | [YAMLScalar] "name" | semmle.label | 0 |
| file://:0:0:0:0 | (Mapping 0) name: | tst.yml:1:3:1:8 | [YAMLScalar] "name" | semmle.order | 0 |
| file://:0:0:0:0 | (Mapping 0) name: | tst.yml:1:11:1:21 | [YAMLScalar] "Jim Knopf" | semmle.label | 1 |
| file://:0:0:0:0 | (Mapping 0) name: | tst.yml:1:11:1:21 | [YAMLScalar] "Jim Knopf" | semmle.order | 1 |
| file://:0:0:0:0 | (Mapping 0) name: | tst.yml:7:3:7:6 | [YAMLScalar] name | semmle.label | 0 |
| file://:0:0:0:0 | (Mapping 0) name: | tst.yml:7:3:7:6 | [YAMLScalar] name | semmle.order | 0 |
| file://:0:0:0:0 | (Mapping 0) name: | tst.yml:7:9:7:21 | [YAMLScalar] Frau Mahlzahn | semmle.label | 1 |
| file://:0:0:0:0 | (Mapping 0) name: | tst.yml:7:9:7:21 | [YAMLScalar] Frau Mahlzahn | semmle.order | 1 |
| file://:0:0:0:0 | (Mapping 0) street: | tst.yml:3:5:3:12 | [YAMLScalar] "street" | semmle.label | 0 |
| file://:0:0:0:0 | (Mapping 0) street: | tst.yml:3:5:3:12 | [YAMLScalar] "street" | semmle.order | 0 |
| file://:0:0:0:0 | (Mapping 0) street: | tst.yml:3:14:3:13 | [YAMLScalar] | semmle.label | 1 |
| file://:0:0:0:0 | (Mapping 0) street: | tst.yml:3:14:3:13 | [YAMLScalar] | semmle.order | 1 |
| file://:0:0:0:0 | (Mapping 0) street: | tst.yml:9:5:9:10 | [YAMLScalar] street | semmle.label | 0 |
| file://:0:0:0:0 | (Mapping 0) street: | tst.yml:9:5:9:10 | [YAMLScalar] street | semmle.order | 0 |
| file://:0:0:0:0 | (Mapping 0) street: | tst.yml:9:13:11:0 | [YAMLScalar] \| | semmle.label | 1 |
| file://:0:0:0:0 | (Mapping 0) street: | tst.yml:9:13:11:0 | [YAMLScalar] \| | semmle.order | 1 |
| file://:0:0:0:0 | (Mapping 0) x: | merge.yaml:1:8:1:8 | [YAMLScalar] x | semmle.label | 0 |
| file://:0:0:0:0 | (Mapping 0) x: | merge.yaml:1:8:1:8 | [YAMLScalar] x | semmle.order | 0 |
| file://:0:0:0:0 | (Mapping 0) x: | merge.yaml:1:11:1:12 | [YAMLScalar] 23 | semmle.label | 1 |
| file://:0:0:0:0 | (Mapping 0) x: | merge.yaml:1:11:1:12 | [YAMLScalar] 23 | semmle.order | 1 |
| file://:0:0:0:0 | (Mapping 0) x: | merge.yaml:2:3:2:3 | [YAMLScalar] x | semmle.label | 0 |
| file://:0:0:0:0 | (Mapping 0) x: | merge.yaml:2:3:2:3 | [YAMLScalar] x | semmle.order | 0 |
| file://:0:0:0:0 | (Mapping 0) x: | merge.yaml:2:6:2:7 | [YAMLScalar] 56 | semmle.label | 1 |
| file://:0:0:0:0 | (Mapping 0) x: | merge.yaml:2:6:2:7 | [YAMLScalar] 56 | semmle.order | 1 |
| file://:0:0:0:0 | (Mapping 1) <<: | merge.yaml:3:3:3:4 | [YAMLScalar] << | semmle.label | 0 |
| file://:0:0:0:0 | (Mapping 1) <<: | merge.yaml:3:3:3:4 | [YAMLScalar] << | semmle.order | 0 |
| file://:0:0:0:0 | (Mapping 1) <<: | merge.yaml:3:7:3:8 | [YAMLAliasNode] *A | semmle.label | 1 |
| file://:0:0:0:0 | (Mapping 1) <<: | merge.yaml:3:7:3:8 | [YAMLAliasNode] *A | semmle.order | 1 |
| file://:0:0:0:0 | (Mapping 1) address: | tst.yml:2:3:2:9 | [YAMLScalar] address | semmle.label | 0 |
| file://:0:0:0:0 | (Mapping 1) address: | tst.yml:2:3:2:9 | [YAMLScalar] address | semmle.order | 0 |
| file://:0:0:0:0 | (Mapping 1) address: | tst.yml:2:12:6:3 | [YAMLMapping] { | semmle.label | 1 |
| file://:0:0:0:0 | (Mapping 1) address: | tst.yml:2:12:6:3 | [YAMLMapping] { | semmle.order | 1 |
| file://:0:0:0:0 | (Mapping 1) address: | tst.yml:8:3:8:9 | [YAMLScalar] address | semmle.label | 0 |
| file://:0:0:0:0 | (Mapping 1) address: | tst.yml:8:3:8:9 | [YAMLScalar] address | semmle.order | 0 |
| file://:0:0:0:0 | (Mapping 1) address: | tst.yml:9:5:14:0 | [YAMLMapping] street: \| | semmle.label | 1 |
| file://:0:0:0:0 | (Mapping 1) address: | tst.yml:9:5:14:0 | [YAMLMapping] street: \| | semmle.order | 1 |
| file://:0:0:0:0 | (Mapping 1) number: | tst.yml:4:5:4:12 | [YAMLScalar] "number" | semmle.label | 0 |
| file://:0:0:0:0 | (Mapping 1) number: | tst.yml:4:5:4:12 | [YAMLScalar] "number" | semmle.order | 0 |
| file://:0:0:0:0 | (Mapping 1) number: | tst.yml:4:15:4:16 | [YAMLScalar] -1 | semmle.label | 1 |
| file://:0:0:0:0 | (Mapping 1) number: | tst.yml:4:15:4:16 | [YAMLScalar] -1 | semmle.order | 1 |
| file://:0:0:0:0 | (Mapping 1) number: | tst.yml:11:5:11:10 | [YAMLScalar] number | semmle.label | 0 |
| file://:0:0:0:0 | (Mapping 1) number: | tst.yml:11:5:11:10 | [YAMLScalar] number | semmle.order | 0 |
| file://:0:0:0:0 | (Mapping 1) number: | tst.yml:11:13:11:15 | [YAMLScalar] 133 | semmle.label | 1 |
| file://:0:0:0:0 | (Mapping 1) number: | tst.yml:11:13:11:15 | [YAMLScalar] 133 | semmle.order | 1 |
| file://:0:0:0:0 | (Mapping 1) y: | merge.yaml:1:15:1:15 | [YAMLScalar] y | semmle.label | 0 |
| file://:0:0:0:0 | (Mapping 1) y: | merge.yaml:1:15:1:15 | [YAMLScalar] y | semmle.order | 0 |
| file://:0:0:0:0 | (Mapping 1) y: | merge.yaml:1:18:1:19 | [YAMLScalar] 42 | semmle.label | 1 |
| file://:0:0:0:0 | (Mapping 1) y: | merge.yaml:1:18:1:19 | [YAMLScalar] 42 | semmle.order | 1 |
| file://:0:0:0:0 | (Mapping 2) country: | tst.yml:5:5:5:13 | [YAMLScalar] "country" | semmle.label | 0 |
| file://:0:0:0:0 | (Mapping 2) country: | tst.yml:5:5:5:13 | [YAMLScalar] "country" | semmle.order | 0 |
| file://:0:0:0:0 | (Mapping 2) country: | tst.yml:5:16:5:27 | [YAMLScalar] "Lummerland" | semmle.label | 1 |
| file://:0:0:0:0 | (Mapping 2) country: | tst.yml:5:16:5:27 | [YAMLScalar] "Lummerland" | semmle.order | 1 |
| file://:0:0:0:0 | (Mapping 2) country: | tst.yml:12:5:12:11 | [YAMLScalar] country | semmle.label | 0 |
| file://:0:0:0:0 | (Mapping 2) country: | tst.yml:12:5:12:11 | [YAMLScalar] country | semmle.order | 0 |
| file://:0:0:0:0 | (Mapping 2) country: | tst.yml:12:14:13:18 | [YAMLScalar] < | semmle.label | 1 |
| file://:0:0:0:0 | (Mapping 2) country: | tst.yml:12:14:13:18 | [YAMLScalar] < | semmle.order | 1 |
| merge.yaml:1:1:3:8 | [YAMLSequence] - &A { ... y: 42 } | merge.yaml:1:3:1:21 | [YAMLMapping] &A { x: 23, y: 42 } | semmle.label | 0 |
| merge.yaml:1:1:3:8 | [YAMLSequence] - &A { ... y: 42 } | merge.yaml:1:3:1:21 | [YAMLMapping] &A { x: 23, y: 42 } | semmle.order | 0 |
| merge.yaml:1:1:3:8 | [YAMLSequence] - &A { ... y: 42 } | merge.yaml:2:3:3:8 | [YAMLMapping] x: 56 | semmle.label | 1 |
| merge.yaml:1:1:3:8 | [YAMLSequence] - &A { ... y: 42 } | merge.yaml:2:3:3:8 | [YAMLMapping] x: 56 | semmle.order | 1 |
| merge.yaml:1:3:1:21 | [YAMLMapping] &A { x: 23, y: 42 } | file://:0:0:0:0 | (Mapping 0) x: | semmle.label | 0 |
| merge.yaml:1:3:1:21 | [YAMLMapping] &A { x: 23, y: 42 } | file://:0:0:0:0 | (Mapping 0) x: | semmle.order | 0 |
| merge.yaml:1:3:1:21 | [YAMLMapping] &A { x: 23, y: 42 } | file://:0:0:0:0 | (Mapping 1) y: | semmle.label | 1 |
| merge.yaml:1:3:1:21 | [YAMLMapping] &A { x: 23, y: 42 } | file://:0:0:0:0 | (Mapping 1) y: | semmle.order | 1 |
| merge.yaml:2:3:3:8 | [YAMLMapping] x: 56 | file://:0:0:0:0 | (Mapping 0) x: | semmle.label | 0 |
| merge.yaml:2:3:3:8 | [YAMLMapping] x: 56 | file://:0:0:0:0 | (Mapping 0) x: | semmle.order | 0 |
| merge.yaml:2:3:3:8 | [YAMLMapping] x: 56 | file://:0:0:0:0 | (Mapping 1) <<: | semmle.label | 1 |
| merge.yaml:2:3:3:8 | [YAMLMapping] x: 56 | file://:0:0:0:0 | (Mapping 1) <<: | semmle.order | 1 |
| tst.yml:1:1:14:23 | [YAMLSequence] - "name ... Knopf" | tst.yml:1:3:7:0 | [YAMLMapping] "name": "Jim Knopf" | semmle.label | 0 |
| tst.yml:1:1:14:23 | [YAMLSequence] - "name ... Knopf" | tst.yml:1:3:7:0 | [YAMLMapping] "name": "Jim Knopf" | semmle.order | 0 |
| tst.yml:1:1:14:23 | [YAMLSequence] - "name ... Knopf" | tst.yml:7:3:14:0 | [YAMLMapping] name: Frau Mahlzahn | semmle.label | 1 |
| tst.yml:1:1:14:23 | [YAMLSequence] - "name ... Knopf" | tst.yml:7:3:14:0 | [YAMLMapping] name: Frau Mahlzahn | semmle.order | 1 |
| tst.yml:1:1:14:23 | [YAMLSequence] - "name ... Knopf" | tst.yml:14:3:14:23 | [YAMLScalar] !includ ... nal.yml | semmle.label | 2 |
| tst.yml:1:1:14:23 | [YAMLSequence] - "name ... Knopf" | tst.yml:14:3:14:23 | [YAMLScalar] !includ ... nal.yml | semmle.order | 2 |
| tst.yml:1:3:7:0 | [YAMLMapping] "name": "Jim Knopf" | file://:0:0:0:0 | (Mapping 0) name: | semmle.label | 0 |
| tst.yml:1:3:7:0 | [YAMLMapping] "name": "Jim Knopf" | file://:0:0:0:0 | (Mapping 0) name: | semmle.order | 0 |
| tst.yml:1:3:7:0 | [YAMLMapping] "name": "Jim Knopf" | file://:0:0:0:0 | (Mapping 1) address: | semmle.label | 1 |
| tst.yml:1:3:7:0 | [YAMLMapping] "name": "Jim Knopf" | file://:0:0:0:0 | (Mapping 1) address: | semmle.order | 1 |
| tst.yml:2:12:6:3 | [YAMLMapping] { | file://:0:0:0:0 | (Mapping 0) street: | semmle.label | 0 |
| tst.yml:2:12:6:3 | [YAMLMapping] { | file://:0:0:0:0 | (Mapping 0) street: | semmle.order | 0 |
| tst.yml:2:12:6:3 | [YAMLMapping] { | file://:0:0:0:0 | (Mapping 1) number: | semmle.label | 1 |
| tst.yml:2:12:6:3 | [YAMLMapping] { | file://:0:0:0:0 | (Mapping 1) number: | semmle.order | 1 |
| tst.yml:2:12:6:3 | [YAMLMapping] { | file://:0:0:0:0 | (Mapping 2) country: | semmle.label | 2 |
| tst.yml:2:12:6:3 | [YAMLMapping] { | file://:0:0:0:0 | (Mapping 2) country: | semmle.order | 2 |
| tst.yml:7:3:14:0 | [YAMLMapping] name: Frau Mahlzahn | file://:0:0:0:0 | (Mapping 0) name: | semmle.label | 0 |
| tst.yml:7:3:14:0 | [YAMLMapping] name: Frau Mahlzahn | file://:0:0:0:0 | (Mapping 0) name: | semmle.order | 0 |
| tst.yml:7:3:14:0 | [YAMLMapping] name: Frau Mahlzahn | file://:0:0:0:0 | (Mapping 1) address: | semmle.label | 1 |
| tst.yml:7:3:14:0 | [YAMLMapping] name: Frau Mahlzahn | file://:0:0:0:0 | (Mapping 1) address: | semmle.order | 1 |
| tst.yml:9:5:14:0 | [YAMLMapping] street: \| | file://:0:0:0:0 | (Mapping 0) street: | semmle.label | 0 |
| tst.yml:9:5:14:0 | [YAMLMapping] street: \| | file://:0:0:0:0 | (Mapping 0) street: | semmle.order | 0 |
| tst.yml:9:5:14:0 | [YAMLMapping] street: \| | file://:0:0:0:0 | (Mapping 1) number: | semmle.label | 1 |
| tst.yml:9:5:14:0 | [YAMLMapping] street: \| | file://:0:0:0:0 | (Mapping 1) number: | semmle.order | 1 |
| tst.yml:9:5:14:0 | [YAMLMapping] street: \| | file://:0:0:0:0 | (Mapping 2) country: | semmle.label | 2 |
| tst.yml:9:5:14:0 | [YAMLMapping] street: \| | file://:0:0:0:0 | (Mapping 2) country: | semmle.order | 2 |
graphProperties
| semmle.graphKind | tree |

View File

@@ -0,0 +1,2 @@
import javascript
import semmle.javascript.PrintAst