The Grapher module analyses a distribution to build a graph for dependency and lineage tracking purposes. The goal is to understand data flow and to automate contribution to the types of products that are commonly used in enterprises. The result of processing is a Graph, which is a collection of Nodes and Edges.
Verb defines the possible relationships that we're interested in tracking. These are used to define the relationships in the edges of our graph.
Defines an edge in the graph as a triple of the subject node, the relationship, and the object node.
Defines a graph as a collection of nodes and edges.
Process this distribution into a Graph of its packages.
Process this package into a Graph of its modules. We take two passes to the IR. The first collects all of the types and the second processes the functions and their relationships to those types.
Process this module to collect the types used and produced by it.
Process this module to collect the functions and relationships to types.
Process a type since there are a lot of variations.
Process Functions specifically and ignore the rest.
Utility for dealing with comparable.
Utility for dealing with comparable.
Utility to extract the Fully Qualified Name from a Node. This is required because a Field contains both an FQN and field name.
Converte Edge record to tuple
Converte Edge record to tuple
Utility for dealing with comparable.
Node defines a node in the graph. We capture specific node types for this purpose. The types of constructs that we're interested in tracking are: