Package-level declarations

Types

Link copied to clipboard

Computes the affected graph for a diff: which modules a set of changed files touches, and the downstream blast radius that a build must therefore rebuild and retest.

Link copied to clipboard

Lakos-style system-wide coupling metrics and the strongly-connected-component partition that underpins them. All computation is over main (non-test) edges only, consistent with the rest of GraphAnalyzer. Pure functions - no I/O, no mutation of the input.

Link copied to clipboard

Turns detected dependency cycles into actionable break-up advice: for each cycle, the specific edge(s) to remove to make it acyclic.

Link copied to clipboard

Stateless graph analysis algorithms that operate on a ModuleDependencyGraph.

Link copied to clipboard

Produces a subset of a module graph for export - the machinery behind the mermaid { } focus/exclude filters that keep a large graph's diagram readable.

Link copied to clipboard
data class GraphSummary(val totalModules: Int, val totalEdges: Int, val modulesByType: Map<String, Int>, val hasCycles: Boolean, val cycleCount: Int, val maxFanOut: Int, val maxFanIn: Int, val averageInstability: Double, val criticalPathLength: Int, val godModuleCount: Int, val isolatedModuleCount: Int, val ccd: Long = 0, val acd: Double = 0.0, val nccd: Double = 0.0, val tanglePercent: Double = 0.0, val cyclicComponentCount: Int = 0)
Link copied to clipboard

How big a project is, and therefore how it should be presented.

Link copied to clipboard
data class Region(val id: String, val name: String, val modules: List<String>, val internalEdges: Int, val externalEdges: Int, val cohesion: Double, val subRegions: List<Region> = emptyList())

One region: a group of modules treated as a unit when the project is too large to draw module by module.

Link copied to clipboard

Groups modules into regions, so a project too large to read module-by-module can be read region-by-region.

Link copied to clipboard
data class RegionEdge(val from: String, val to: String, val weight: Int)

An aggregated dependency between two regions, weighted by how many module edges it stands for.

Link copied to clipboard
data class RegionMap(val regions: List<Region> = emptyList(), val edges: List<RegionEdge> = emptyList(), val source: RegionSource = RegionSource.PATH_PREFIX, val modularity: Double = 0.0)

The project collapsed to regions and the flows between them.

Link copied to clipboard

Where a region partition came from - and therefore how much to trust it.

Link copied to clipboard
data class SystemCoupling(val ccd: Long, val acd: Double, val nccd: Double, val tanglePercent: Double, val cyclicComponentCount: Int)

Lakos-style system-wide coupling numbers returned by CouplingAnalyzer.systemCoupling.