Packages

  • package root
    Definition Classes
    root
  • package io
    Definition Classes
    root
  • package shiftleft
    Definition Classes
    io
  • package semanticcpg

    Domain specific language for querying code property graphs

    Domain specific language for querying code property graphs

    This is the API reference for the CPG query language, a language to mine code for defects and vulnerabilities both interactively on a code analysis shell (REPL), or using non-interactive scripts.

    Queries written in the CPG query language express graph traversals (see https://en.wikipedia.org/wiki/Graph_traversal). Similar to the standard graph traversal language "Gremlin" (see https://en.wikipedia.org/wiki/Gremlin_(programming_language))) these traversals are formulated as sequences of primitive language elements referred to as "steps". You can think of a step as a small program, similar to a unix shell utility, however, instead of processing lines one by one, the step processes nodes of the graph.

    Starting a traversal

    All traversals begin by selecting a set of start nodes, e.g.,

    cpg.method

    will start the traversal at all methods, while

    cpg.local

    will start at all local variables. The complete list of starting points can be found at

    io.shiftleft.codepropertygraph.Cpg

    Lazy evaluation

    Queries are lazily evaluated, e.g., cpg.method creates a traversal which you can add more steps to. You can, for example, evaluate the traversal by converting it to a list:

    cpg.method.toList

    Since toList is such a common operation, we provide the shorthand l, meaning that

    cpg.method.l

    provides the same result as the former query.

    Properties

    Nodes have "properties", key-value pairs where keys are strings and values are primitive data types such as strings, integers, or Booleans. Properties of nodes can be selected based on their key, e.g.,

    cpg.method.name

    traverses to all method names. Nodes can also be filtered based on properties, e.g.,

    cpg.method.name(".*exec.*")

    traverse to all methods where name matches the regular expression ".*exec.*". You can see a complete list of properties by browsing to the API documentation of the corresponding step. For example, you can find the properties of method nodes at io.shiftleft.semanticcpg.language.types.structure.MethodTraversal.

    Side effects

    Useful if you want to mutate something outside the traversal, or simply debug it: This prints all typeDecl names as it traverses the graph and increments i for each one.

    var i = 0
    cpg.typeDecl.sideEffect{typeTemplate => println(typeTemplate.name); i = i + 1}.exec

    [advanced] Selecting multiple things from your traversal

    If you are interested in multiple things along the way of your traversal, you label anything using the as modulator, and use select at the end. Note that the compiler automatically derived the correct return type as a tuple of the labelled steps, in this case with two elements.

    cpg.method.as("method").definingTypeDecl.as("classDef").select.toList
    // return type: List[(Method, TypeDecl)]

    [advanced] For comprehensions

    You can always start a new traversal from a node, e.g.,

    val someMethod = cpg.method.head
    someMethod.start.parameter.toList

    You can use this e.g. in a for comprehension, which is (in this context) essentially an alternative way to select multiple intermediate things. It is more expressive, but more computationally expensive.

    val query = for {
      method <- cpg.method
      param <- method.start.parameter
    } yield (method.name, param.name)
    
    query.toList
    Definition Classes
    shiftleft
  • package accesspath
    Definition Classes
    semanticcpg
  • package codedumper
    Definition Classes
    semanticcpg
  • package dotgenerator
    Definition Classes
    semanticcpg
  • package language

    Language for traversing the code property graph

    Language for traversing the code property graph

    Implicit conversions to specific steps, based on the node at hand. Automatically in scope when using anything in the steps package, e.g. Steps

    Definition Classes
    semanticcpg
  • package bindingextension
  • package callgraphextension
  • package dotextension
  • package nodemethods
  • package operatorextension
  • package types
  • AccessPathHandling
  • DefaultNodeExtensionFinder
  • HasLocation
  • HasStoreMethod
  • ICallResolver
  • LocationCreator
  • NewNodeSteps
  • NewNodeTypeDeco
  • NewTagNodePairTraversal
  • NoResolve
  • NodeExtensionFinder
  • NodeSteps
  • NodeTypeStarters
  • Show
  • Steps
  • TagTraversal
  • package layers
    Definition Classes
    semanticcpg
  • package passes
    Definition Classes
    semanticcpg
  • package testing
    Definition Classes
    semanticcpg
  • package utils
    Definition Classes
    semanticcpg

package language

Language for traversing the code property graph

Implicit conversions to specific steps, based on the node at hand. Automatically in scope when using anything in the steps package, e.g. Steps

Linear Supertypes
NodeTraversalImplicits, NodeBaseTypeTraversalImplicits, LowPrioImplicits, LowLowPrioImplicits, language.operatorextension.Implicits, AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. language
  2. NodeTraversalImplicits
  3. NodeBaseTypeTraversalImplicits
  4. LowPrioImplicits
  5. LowLowPrioImplicits
  6. Implicits
  7. AnyRef
  8. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Package Members

  1. package bindingextension
  2. package callgraphextension
  3. package dotextension
  4. package nodemethods
  5. package operatorextension
  6. package types

Type Members

  1. trait HasLocation extends Any
  2. trait HasStoreMethod extends AnyRef
  3. trait ICallResolver extends AnyRef
  4. class NewNodeSteps[A <: NewNode] extends HasStoreMethod
  5. implicit final class NewNodeTypeDeco[NodeType <: NewNode] extends AnyVal
  6. class NewTagNodePairTraversal extends HasStoreMethod
  7. trait NodeExtensionFinder extends AnyRef
  8. final class NodeSteps[NodeType <: StoredNode] extends AnyVal

    Steps for all node types

    Steps for all node types

    This is the base class for all steps defined on

    Annotations
    @Traversal()
  9. class NodeTypeStarters extends AnyRef
    Annotations
    @TraversalSource()
  10. trait Show[A] extends AnyRef

    Typeclass for (pretty) printing an object

  11. final class Steps[A] extends AnyVal

    Base class for our DSL These are the base steps available in all steps of the query language.

    Base class for our DSL These are the base steps available in all steps of the query language. There are no constraints on the element types, unlike e.g. NodeSteps

  12. final class TagTraversal extends AnyVal

Value Members

  1. implicit def cfgNodeToAsNode(node: CfgNode): AstNodeMethods
  2. implicit def toArrayAccessExt(arrayAccess: ArrayAccess): ArrayAccessMethods
    Definition Classes
    Implicits
  3. implicit def toArrayAccessTrav(steps: Traversal[ArrayAccess]): ArrayAccessTraversal
    Definition Classes
    Implicits
  4. implicit def toAssignmentExt(assignment: Assignment): AssignmentMethods
    Definition Classes
    Implicits
  5. implicit def toAssignmentTrav(steps: Traversal[Assignment]): AssignmentTraversal
    Definition Classes
    Implicits
  6. implicit def toAstNode[A, NodeType <: AstNode](a: A)(implicit f: (A) => Traversal[NodeType]): AstNodeTraversal[NodeType]
    Definition Classes
    LowLowPrioImplicits
  7. implicit def toAstNodeDot[A, NodeType <: AstNode](a: A)(implicit f: (A) => Traversal[NodeType]): AstNodeDot[NodeType]
  8. implicit def toAstNodeMethods(node: AstNode): AstNodeMethods
  9. implicit def toAstNodeTraversalExtGen[NodeType <: AstNode](trav: Traversal[NodeType]): AstNodeTraversalExtGen[NodeType]
    Definition Classes
    NodeBaseTypeTraversalImplicits
  10. implicit def toBinding[A](a: A)(implicit f: (A) => Traversal[Binding]): BindingTraversal
  11. implicit def toBindingTraversalExtGen[NodeType <: Binding](trav: Traversal[NodeType]): BindingTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  12. implicit def toBlock[A](a: A)(implicit f: (A) => Traversal[Block]): BlockTraversal
  13. implicit def toBlockTraversalExtGen[NodeType <: Block](trav: Traversal[NodeType]): BlockTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  14. implicit def toCall[A](a: A)(implicit f: (A) => Traversal[Call]): CallTraversal
  15. implicit def toCallForCallGraph[A](a: A)(implicit f: (A) => Traversal[Call]): CallTraversal
  16. implicit def toCallMethods(node: Call): CallMethods
  17. implicit def toCallReprTraversalExtGen[NodeType <: CallRepr](trav: Traversal[NodeType]): CallReprTraversalExtGen[NodeType]
    Definition Classes
    NodeBaseTypeTraversalImplicits
  18. implicit def toCallTraversalExtGen[NodeType <: Call](trav: Traversal[NodeType]): CallTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  19. implicit def toCfgNode[A, NodeType <: CfgNode](a: A)(implicit f: (A) => Traversal[NodeType]): CfgNodeTraversal[NodeType]
    Definition Classes
    LowLowPrioImplicits
  20. implicit def toCfgNodeDot[A](a: A)(implicit f: (A) => Traversal[Method]): CfgNodeDot
  21. implicit def toCfgNodeMethods(node: CfgNode): CfgNodeMethods
  22. implicit def toCfgNodeTraversalExtGen[NodeType <: CfgNode](trav: Traversal[NodeType]): CfgNodeTraversalExtGen[NodeType]
    Definition Classes
    NodeBaseTypeTraversalImplicits
  23. implicit def toClosureBindingTraversalExtGen[NodeType <: ClosureBinding](trav: Traversal[NodeType]): ClosureBindingTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  24. implicit def toCommentTraversalExtGen[NodeType <: Comment](trav: Traversal[NodeType]): CommentTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  25. implicit def toConfigFileTraversalExtGen[NodeType <: ConfigFile](trav: Traversal[NodeType]): ConfigFileTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  26. implicit def toControlStructure[A](a: A)(implicit f: (A) => Traversal[ControlStructure]): ControlStructureTraversal
  27. implicit def toControlStructureTraversalExtGen[NodeType <: ControlStructure](trav: Traversal[NodeType]): ControlStructureTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  28. implicit def toDeclarationTraversalExtGen[NodeType <: Declaration](trav: Traversal[NodeType]): DeclarationTraversalExtGen[NodeType]
    Definition Classes
    NodeBaseTypeTraversalImplicits
  29. implicit def toDependencyTraversalExtGen[NodeType <: Dependency](trav: Traversal[NodeType]): DependencyTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  30. implicit def toEvalTypeAccessorsExpression[A, NodeType <: Expression](a: A)(implicit f: (A) => Traversal[NodeType]): EvalTypeAccessors[NodeType]
    Definition Classes
    LowPrioImplicits
  31. implicit def toEvalTypeAccessorsLocal[A](a: A)(implicit f: (A) => Traversal[Local]): EvalTypeAccessors[Local]
  32. implicit def toEvalTypeAccessorsMember[A](a: A)(implicit f: (A) => Traversal[Member]): EvalTypeAccessors[Member]
  33. implicit def toEvalTypeAccessorsMethod[A](a: A)(implicit f: (A) => Traversal[Method]): EvalTypeAccessors[Method]
  34. implicit def toEvalTypeAccessorsMethodParameterIn[A](a: A)(implicit f: (A) => Traversal[MethodParameterIn]): EvalTypeAccessors[MethodParameterIn]
  35. implicit def toEvalTypeAccessorsMethodParameterOut[A](a: A)(implicit f: (A) => Traversal[MethodParameterOut]): EvalTypeAccessors[MethodParameterOut]
  36. implicit def toEvalTypeAccessorsMethodReturn[A](a: A)(implicit f: (A) => Traversal[MethodReturn]): EvalTypeAccessors[MethodReturn]
  37. implicit def toExpression[A, NodeType <: Expression](a: A)(implicit f: (A) => Traversal[NodeType]): ExpressionTraversal[NodeType]
    Definition Classes
    LowPrioImplicits
  38. implicit def toExpressionMethods(node: Expression): ExpressionMethods
  39. implicit def toExpressionTraversalExtGen[NodeType <: Expression](trav: Traversal[NodeType]): ExpressionTraversalExtGen[NodeType]
    Definition Classes
    NodeBaseTypeTraversalImplicits
  40. implicit def toExtendedNode(node: AbstractNode): NodeMethods
  41. implicit def toExtendedStoredNode(node: StoredNode): StoredNodeMethods
  42. implicit def toFieldIdentifierTraversalExtGen[NodeType <: FieldIdentifier](trav: Traversal[NodeType]): FieldIdentifierTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  43. implicit def toFile[A](a: A)(implicit f: (A) => Traversal[File]): FileTraversal
  44. implicit def toFileTraversalExtGen[NodeType <: File](trav: Traversal[NodeType]): FileTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  45. implicit def toFindingTraversalExtGen[NodeType <: Finding](trav: Traversal[NodeType]): FindingTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  46. implicit def toIdentifier[A](a: A)(implicit f: (A) => Traversal[Identifier]): IdentifierTraversal
  47. implicit def toIdentifierMethods(node: Identifier): IdentifierMethods
  48. implicit def toIdentifierTraversalExtGen[NodeType <: Identifier](trav: Traversal[NodeType]): IdentifierTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  49. implicit def toJumpTargetTraversalExtGen[NodeType <: JumpTarget](trav: Traversal[NodeType]): JumpTargetTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  50. implicit def toKeyValuePairTraversalExtGen[NodeType <: KeyValuePair](trav: Traversal[NodeType]): KeyValuePairTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  51. implicit def toLiteral[A](a: A)(implicit f: (A) => Traversal[Literal]): LiteralTraversal
  52. implicit def toLiteralMethods(node: Literal): LiteralMethods
  53. implicit def toLiteralTraversalExtGen[NodeType <: Literal](trav: Traversal[NodeType]): LiteralTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  54. implicit def toLocal[A](a: A)(implicit f: (A) => Traversal[Local]): LocalTraversal
  55. implicit def toLocalMethods(node: Local): LocalMethods
  56. implicit def toLocalTraversalExtGen[NodeType <: Local](trav: Traversal[NodeType]): LocalTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  57. implicit def toLocationTraversalExtGen[NodeType <: Location](trav: Traversal[NodeType]): LocationTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  58. implicit def toMember[A](a: A)(implicit f: (A) => Traversal[Member]): MemberTraversal
  59. implicit def toMemberTraversalExtGen[NodeType <: Member](trav: Traversal[NodeType]): MemberTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  60. implicit def toMetaDataTraversalExtGen[NodeType <: MetaData](trav: Traversal[NodeType]): MetaDataTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  61. implicit def toMethod[A](a: A)(implicit f: (A) => Traversal[Method]): MethodTraversal
  62. implicit def toMethodForBindingExt[A](a: A)(implicit f: (A) => Traversal[Method]): MethodTraversal
  63. implicit def toMethodForCallGraph[A](a: A)(implicit f: (A) => Traversal[Method]): MethodTraversal
  64. implicit def toMethodMethods(node: Method): MethodMethods
  65. implicit def toMethodParamInMethods(node: MethodParameterIn): MethodParameterInMethods
  66. implicit def toMethodParamOutMethods(node: MethodParameterOut): MethodParameterOutMethods
  67. implicit def toMethodParameter[A](a: A)(implicit f: (A) => Traversal[MethodParameterIn]): MethodParameterTraversal
  68. implicit def toMethodParameterInTraversalExtGen[NodeType <: MethodParameterIn](trav: Traversal[NodeType]): MethodParameterInTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  69. implicit def toMethodParameterOut[A](a: A)(implicit f: (A) => Traversal[MethodParameterOut]): MethodParameterOutTraversal
  70. implicit def toMethodParameterOutTraversalExtGen[NodeType <: MethodParameterOut](trav: Traversal[NodeType]): MethodParameterOutTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  71. implicit def toMethodRef[A](a: A)(implicit f: (A) => Traversal[MethodRef]): MethodRefTraversal
  72. implicit def toMethodRefMethods(node: MethodRef): MethodRefMethods
  73. implicit def toMethodRefTraversalExtGen[NodeType <: MethodRef](trav: Traversal[NodeType]): MethodRefTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  74. implicit def toMethodReturn[A](a: A)(implicit f: (A) => Traversal[MethodReturn]): MethodReturnTraversal
  75. implicit def toMethodReturnMethods(node: MethodReturn): MethodReturnMethods
  76. implicit def toMethodReturnTraversalExtGen[NodeType <: MethodReturn](trav: Traversal[NodeType]): MethodReturnTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  77. implicit def toMethodTraversalExtGen[NodeType <: Method](trav: Traversal[NodeType]): MethodTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  78. implicit def toModifierAccessorsMember[A](a: A)(implicit f: (A) => Traversal[Member]): ModifierAccessors[Member]
  79. implicit def toModifierAccessorsMethod[A](a: A)(implicit f: (A) => Traversal[Method]): ModifierAccessors[Method]
  80. implicit def toModifierAccessorsTypeDecl[A](a: A)(implicit f: (A) => Traversal[TypeDecl]): ModifierAccessors[TypeDecl]
  81. implicit def toModifierTraversalExtGen[NodeType <: Modifier](trav: Traversal[NodeType]): ModifierTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  82. implicit def toNamespace[A](a: A)(implicit f: (A) => Traversal[Namespace]): NamespaceTraversal
  83. implicit def toNamespaceBlock[A](a: A)(implicit f: (A) => Traversal[NamespaceBlock]): NamespaceBlockTraversal
  84. implicit def toNamespaceBlockTraversalExtGen[NodeType <: NamespaceBlock](trav: Traversal[NodeType]): NamespaceBlockTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  85. implicit def toNamespaceTraversalExtGen[NodeType <: Namespace](trav: Traversal[NodeType]): NamespaceTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  86. implicit def toNewNodeTrav[NodeType <: NewNode](trav: Traversal[NodeType]): NewNodeSteps[NodeType]
  87. implicit def toNodeSteps[A, NodeType <: StoredNode](a: A)(implicit f: (A) => Traversal[NodeType]): NodeSteps[NodeType]
  88. implicit def toNodeTypeStarters(cpg: Cpg): NodeTypeStarters
  89. implicit def toNodeTypeStartersOperatorExtension(cpg: Cpg): language.operatorextension.NodeTypeStarters
    Definition Classes
    Implicits
  90. implicit def toOpAstNodeExt[A <: AstNode](node: A): OpAstNodeMethods[A]
    Definition Classes
    Implicits
  91. implicit def toOpAstNodeTrav[A <: AstNode](steps: Traversal[A]): OpAstNode[A]
    Definition Classes
    Implicits
  92. implicit def toReturnTraversalExtGen[NodeType <: Return](trav: Traversal[NodeType]): ReturnTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  93. implicit def toSteps[A](trav: Traversal[A]): Steps[A]
  94. implicit def toTagNodePairTraversalExtGen[NodeType <: TagNodePair](trav: Traversal[NodeType]): TagNodePairTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  95. implicit def toTagTraversal(trav: Traversal[Tag]): TagTraversal
  96. implicit def toTagTraversalExtGen[NodeType <: Tag](trav: Traversal[NodeType]): TagTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  97. implicit def toTargetExt(call: Expression): TargetMethods
    Definition Classes
    Implicits
  98. implicit def toTargetTrav(steps: Traversal[Expression]): TargetTraversal
    Definition Classes
    Implicits
  99. implicit def toTraversal[NodeType <: AbstractNode](node: NodeType): Traversal[NodeType]
  100. implicit def toType[A](a: A)(implicit f: (A) => Traversal[Type]): TypeTraversal
  101. implicit def toTypeArgumentTraversalExtGen[NodeType <: TypeArgument](trav: Traversal[NodeType]): TypeArgumentTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  102. implicit def toTypeDecl[A](a: A)(implicit f: (A) => Traversal[TypeDecl]): TypeDeclTraversal
  103. implicit def toTypeDeclForBindingExt[A](a: A)(implicit f: (A) => Traversal[TypeDecl]): TypeDeclTraversal
  104. implicit def toTypeDeclTraversalExtGen[NodeType <: TypeDecl](trav: Traversal[NodeType]): TypeDeclTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  105. implicit def toTypeParameterTraversalExtGen[NodeType <: TypeParameter](trav: Traversal[NodeType]): TypeParameterTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  106. implicit def toTypeRefTraversalExtGen[NodeType <: TypeRef](trav: Traversal[NodeType]): TypeRefTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  107. implicit def toTypeTraversalExtGen[NodeType <: Type](trav: Traversal[NodeType]): TypeTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  108. implicit def toUnknownTraversalExtGen[NodeType <: Unknown](trav: Traversal[NodeType]): UnknownTraversalExtGen[NodeType]
    Definition Classes
    NodeTraversalImplicits
  109. object AccessPathHandling
  110. object DefaultNodeExtensionFinder extends NodeExtensionFinder
  111. object LocationCreator
  112. object NoResolve extends ICallResolver
  113. object Show
  114. object Steps

Inherited from NodeTraversalImplicits

Inherited from NodeBaseTypeTraversalImplicits

Inherited from LowPrioImplicits

Inherited from LowLowPrioImplicits

Inherited from AnyRef

Inherited from Any

Ungrouped