A Clojure namespace dependency analyzer.
To run clj-depend from Leiningen, check lein-clj-depend plugin.
Add clj-depend as a dependency, preferably under an alias in deps.edn
.
{:deps { ,,, }
:aliases {:clj-depend {:extra-deps {com.fabiodomingues/clj-depend {:mvn/version "0.11.0"}}
:main-opts ["-m" "clj-depend.main"]}}}
Run:
clj -M:clj-depend
You can use the namespace clj-depend.api to have access to all clj-depend features.
To let clj-depend know the existing layers in your application and the allowed dependencies between these layers, create a .clj-depend
directory at the root of the project and inside it a config.edn
file.
Diagram to exemplify the dependency between layers:
graph TD
A[foo.controller] --> B[foo.logic]
A --> C[foo.model]
B --> C
Configuration file (.clj-depend/config.edn
) for diagram above:
{:source-paths #{"src"}
:layers {:controller {:defined-by ".*\\.controller\\..*"
:accesses-layers #{:logic :model}}
:logic {:defined-by ".*\\.logic\\..*"
:accesses-layers #{:model}}
:model {:defined-by ".*\\.model\\..*"
:accesses-layers #{}}}}
Example configuration file (.clj-depend/config.edn
):
{,,,
:rules [{:defined-by ".*\\.logic\\..*"
:should-not-depend-on #{".*\\.controller\\..*"}}]
,,,}
Diagram to exemplify the circular dependency between namespaces:
graph TD
A[foo.controllers.user] --> B[foo.controllers.customer]
B --> A
Can you improve this documentation? These fine people already did:
Fábio Domingues & Fabio DominguesEdit on GitHub
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close