Skip to content

Commit

Permalink
Kondo: use the classpath cache
Browse files Browse the repository at this point in the history
  • Loading branch information
vemv committed Feb 8, 2020
1 parent c0fa89b commit 65cd85c
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 48 deletions.
57 changes: 31 additions & 26 deletions src/formatting_stack/linters/kondo.clj
Original file line number Diff line number Diff line change
@@ -1,35 +1,37 @@
(ns formatting-stack.linters.kondo
(:require
[clj-kondo.core :as clj-kondo]
[clj-kondo.core :as kondo]
[clojure.set :as set]
[formatting-stack.kondo-classpath-cache]
[formatting-stack.protocols.linter :as protocols.linter]
[medley.core :refer [deep-merge]]
[nedap.utils.modular.api :refer [implement]]))

(def off {:level :off})

(def default-options
{:linters {:cond-else off ;; undesired
:missing-docstring off ;; undesired
:unused-binding off ;; undesired
:unused-symbol off ;; can give false positives
:unused-private-var off ;; can give false positives
:consistent-alias off ;; already offered by how-to-ns
:duplicate-require off ;; already offered by clean-ns
:unused-import off ;; already offered by clean-ns
:unused-namespace off ;; already offered by clean-ns
:unused-referred-var off ;; already offered by clean-ns
:unresolved-namespace off ;; already offered by clean-ns
}
:lint-as '{nedap.speced.def/def-with-doc clojure.core/defonce
nedap.speced.def/defn clojure.core/defn
nedap.speced.def/defprotocol clojure.core/defprotocol
nedap.speced.def/doc clojure.repl/doc
nedap.speced.def/fn clojure.core/fn
nedap.speced.def/let clojure.core/let
nedap.speced.def/letfn clojure.core/letfn}
:output {:exclude-files ["test-resources/*"
"test/unit/formatting_stack/formatters/cljfmt/impl/sample_data.clj"]}})
{:cache-dir formatting-stack.kondo-classpath-cache/cache-dir
:linters {:cond-else off ;; undesired
:missing-docstring off ;; undesired
:unused-binding off ;; undesired
:unused-symbol off ;; can give false positives
:unused-private-var off ;; can give false positives
:consistent-alias off ;; already offered by how-to-ns
:duplicate-require off ;; already offered by clean-ns
:unused-import off ;; already offered by clean-ns
:unused-namespace off ;; already offered by clean-ns
:unused-referred-var off ;; already offered by clean-ns
:unresolved-namespace off ;; already offered by clean-ns
}
:lint-as '{nedap.speced.def/def-with-doc clojure.core/defonce
nedap.speced.def/defn clojure.core/defn
nedap.speced.def/defprotocol clojure.core/defprotocol
nedap.speced.def/doc clojure.repl/doc
nedap.speced.def/fn clojure.core/fn
nedap.speced.def/let clojure.core/let
nedap.speced.def/letfn clojure.core/letfn}
:output {:exclude-files ["test-resources/*"
"test/unit/formatting_stack/formatters/cljfmt/impl/sample_data.clj"]}})

(def clj-options
;; .clj files are also linted by Eastwood, so we disable duplicate linters:
Expand All @@ -39,16 +41,19 @@
:redefined-var off}})

(defn lint! [{:keys [kondo-options]} filenames]

@formatting-stack.kondo-classpath-cache/classpath-cache

(let [kondo-options (or kondo-options {})
{cljs-files true
clj-files false} (->> filenames
(group-by (fn [f]
(-> (re-find #"\.cljs$" f)
boolean))))]
(->> [(clj-kondo/run! {:lint clj-files
:config (deep-merge default-options clj-options kondo-options)})
(clj-kondo/run! {:lint cljs-files
:config (deep-merge default-options kondo-options)})]
(->> [(kondo/run! {:lint clj-files
:config (deep-merge default-options clj-options kondo-options)})
(kondo/run! {:lint cljs-files
:config (deep-merge default-options kondo-options)})]
(mapcat :findings)
(map (fn [{source-type :type :as m}]
(-> (set/rename-keys m {:row :line
Expand Down
22 changes: 0 additions & 22 deletions src/formatting_stack/processors/kondo.clj

This file was deleted.

19 changes: 19 additions & 0 deletions worker/formatting_stack/kondo_classpath_cache.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
(ns formatting-stack.kondo-classpath-cache
"Holds a cache for the entire classpath, to make better use of the project-wide analysis capabilities.
Only needs to be created once, as the classpath never changes."
(:require
[clj-kondo.core :as kondo]
[clojure.string :as string])
(:import
(java.io File)))

(def cache-dir ".clj-kondo")

(def classpath-cache
(delay
(let [files (-> (System/getProperty "java.class.path")
(string/split #"\:"))]
(-> ".clj-kondo" File. .mkdirs)
(kondo/run! {:lint files
:cache-dir cache-dir}))))

0 comments on commit 65cd85c

Please sign in to comment.