-
Notifications
You must be signed in to change notification settings - Fork 7
/
internal_api.clj
61 lines (54 loc) · 2.02 KB
/
internal_api.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
(ns clj-depend.internal-api
(:require [clj-depend.analyzer :as analyzer]
[clj-depend.config :as config]
[clj-depend.parser :as parser]
[clj-depend.snapshot :as snapshot]
[clojure.java.io :as io]
[clojure.string :as string]))
(defn- ->project-root
[{:keys [project-root]} context]
(assoc context :project-root project-root))
(defn- ->config
[{:keys [config]}
{:keys [project-root] :as context}]
(assoc context :config (config/resolve-config! project-root config)))
(defn- ->files
[{:keys [files]}
{:keys [project-root] {:keys [source-paths]} :config :as context}]
(cond
(not-empty files) (assoc context :files files)
(not-empty source-paths) (assoc context :files (map #(io/file project-root %) source-paths))
:else (assoc context :files #{project-root})))
(defn- ->namespaces
[{:keys [namespaces]}
{:keys [files] :as context}]
(let [ns-deps (parser/parse-clojure-files! files namespaces)]
(assoc context :dependencies-by-namespace (reduce-kv (fn [m k v] (assoc m k (:dependencies (first v))))
{}
(group-by :name ns-deps)))))
(defn- build-context
[options]
(->> {}
(->project-root options)
(->config options)
(->files options)
(->namespaces options)))
(defn configured?
[project-root]
(config/configured? project-root))
(defn analyze
[options]
(try
(let [context (build-context options)
violations (analyzer/analyze context)
_ (snapshot/dump-when-enabled! violations options)
violations (snapshot/without-violations-present-in-snapshot-file! violations options)]
(if (seq violations)
{:result-code 1
:message (string/join "\n" (map :message violations))
:violations violations}
{:result-code 0
:message "No violations found!"}))
(catch Exception e
{:result-code 2
:message (ex-message e)})))