mirror of
https://github.com/github/codeql.git
synced 2026-05-01 11:45:14 +02:00
28
javascript/ql/src/printAst.ql
Normal file
28
javascript/ql/src/printAst.ql
Normal 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())
|
||||
}
|
||||
}
|
||||
@@ -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" }
|
||||
}
|
||||
|
||||
@@ -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" }
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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" }
|
||||
}
|
||||
|
||||
@@ -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" }
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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" }
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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 */ }
|
||||
* </pre>
|
||||
*/
|
||||
class JSXEmptyExpr extends Expr, @jsx_empty_expr { }
|
||||
class JSXEmptyExpr extends Expr, @jsx_empty_expr {
|
||||
override string getAPrimaryQlClass() { result = "JSXEmptyExpr" }
|
||||
}
|
||||
|
||||
/**
|
||||
* A legacy `@jsx` pragma.
|
||||
|
||||
@@ -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 = "???" }
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
798
javascript/ql/src/semmle/javascript/PrintAst.qll
Normal file
798
javascript/ql/src/semmle/javascript/PrintAst.qll
Normal 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"
|
||||
}
|
||||
@@ -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" }
|
||||
}
|
||||
|
||||
@@ -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" }
|
||||
}
|
||||
|
||||
@@ -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" }
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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" }
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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" }
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
954
javascript/ql/test/library-tests/Arrays/printAst.expected
Normal file
954
javascript/ql/test/library-tests/Arrays/printAst.expected
Normal 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 |
|
||||
2
javascript/ql/test/library-tests/Arrays/printAst.ql
Normal file
2
javascript/ql/test/library-tests/Arrays/printAst.ql
Normal file
@@ -0,0 +1,2 @@
|
||||
import javascript
|
||||
import semmle.javascript.PrintAst
|
||||
@@ -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 |
|
||||
@@ -0,0 +1,2 @@
|
||||
import javascript
|
||||
import semmle.javascript.PrintAst
|
||||
44
javascript/ql/test/library-tests/JSON/printAst.expected
Normal file
44
javascript/ql/test/library-tests/JSON/printAst.expected
Normal 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 |
|
||||
2
javascript/ql/test/library-tests/JSON/printAst.ql
Normal file
2
javascript/ql/test/library-tests/JSON/printAst.ql
Normal file
@@ -0,0 +1,2 @@
|
||||
import javascript
|
||||
import semmle.javascript.PrintAst
|
||||
308
javascript/ql/test/library-tests/JSX/printAst.expected
Normal file
308
javascript/ql/test/library-tests/JSX/printAst.expected
Normal 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 |
|
||||
2
javascript/ql/test/library-tests/JSX/printAst.ql
Normal file
2
javascript/ql/test/library-tests/JSX/printAst.ql
Normal file
@@ -0,0 +1,2 @@
|
||||
import javascript
|
||||
import semmle.javascript.PrintAst
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,2 @@
|
||||
import javascript
|
||||
import semmle.javascript.PrintAst
|
||||
1329
javascript/ql/test/library-tests/TypeScript/Types/printAst.expected
Normal file
1329
javascript/ql/test/library-tests/TypeScript/Types/printAst.expected
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,2 @@
|
||||
import javascript
|
||||
import semmle.javascript.PrintAst
|
||||
151
javascript/ql/test/library-tests/YAML/printAst.expected
Normal file
151
javascript/ql/test/library-tests/YAML/printAst.expected
Normal 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 |
|
||||
2
javascript/ql/test/library-tests/YAML/printAst.ql
Normal file
2
javascript/ql/test/library-tests/YAML/printAst.ql
Normal file
@@ -0,0 +1,2 @@
|
||||
import javascript
|
||||
import semmle.javascript.PrintAst
|
||||
Reference in New Issue
Block a user