Liking cljdoc? Tell your friends :D

clj-hiera

Generates a graph of the dependency hierarchy of a set of clojure files. This uses the clojure.tools.namespace library for namespace parsing and Rhizome for graph generation using Graphviz.

This tool was originally inspired by lein-ns-dep-graph, but has many additional options for graph generation.

Usage

There are a few different ways to use clj-hiera. First, you'll need Graphviz installed in order to generate the images. Check your local package manager:

# Debian/Ubuntu:
sudo apt-get install graphviz

# OS X with Homebrew:
brew install graphviz

Deps Alias

If you're using tools.deps, you can use this by adding an alias to your deps.edn file:

:hiera
{:deps {io.github.greglook/clj-hiera {:git/tag "2.x.x", :git/sha "..."}}
 :exec-fn hiera.main/graph
 :exec-args {,,,}}

To generate namespace graphs:

clj -X:hiera [opts]

Clojure Tool

Alternately, you can use this as a standalone Clojure tool:

clj -Ttools install-latest :lib io.github.greglook/clj-hiera :as hiera

Then, to invoke the tool in any Clojure project:

clj -Thiera graph [opts]

Leiningen

For Leiningen, you can use this via the lein-hiera plugin. Add the following to your project.clj file or user-level profile:

[lein-hiera "2.x.x"]

Then you can run:

lein hiera [opts]

Options

The available options, and their default values are:

namedefaultdescription
:sources#{"src"}Set of directories containing source files to analyze.
:output"target/hiera"Directory to write files to.
:layout:verticalWhether to lay out the graph vertically or horizontally.
:cluster-depth0Number of namespace segments to cluster nodes by.
:externalfalseShow external namespaces as nodes in the graph.
:ignore#{}A set of namespace prefixes or patterns to exclude from the graph.

When using Leiningen, graph generation options may be provided under the :hiera key in the project map. You can also provide/override the configuration options by specifying them on the command line with keyword arguments:

lein hiera :cluster-depth 3 :layout :horizontal

Example

This image shows the dependency hierarchy from a moderately complex project. The namespaces are clustered by two levels, and it shows a dependency on the external puget library.

Example dependency hierarchy

License

This is free and unencumbered software released into the public domain. See the UNLICENSE file for more information.

Can you improve this documentation?Edit on GitHub

cljdoc is a website building & hosting documentation for Clojure/Script libraries

× close