check-ns -> check-file (and moved reporting to plugin)
This commit is contained in:
parent
b5bb4372dc
commit
cd945be2cd
2 changed files with 21 additions and 40 deletions
|
@ -4,23 +4,13 @@
|
|||
[clojure.string :as string]
|
||||
[jonase.kibit.arithmetic :as arith]
|
||||
[jonase.kibit.control-structures :as control]
|
||||
[jonase.kibit.misc :as misc]))
|
||||
[jonase.kibit.misc :as misc])
|
||||
(:import [clojure.lang LineNumberingPushbackReader]))
|
||||
|
||||
(def all-rules (merge control/rules
|
||||
arith/rules
|
||||
misc/rules))
|
||||
|
||||
(defn src [path]
|
||||
(if-let [res (io/resource path)]
|
||||
(clojure.lang.LineNumberingPushbackReader. (io/reader res))
|
||||
(throw (RuntimeException. (str "File not found: " path)))))
|
||||
|
||||
(defn source-file [ns-sym]
|
||||
(-> (name ns-sym)
|
||||
(string/replace "." "/")
|
||||
(string/replace "-" "_")
|
||||
(str ".clj")))
|
||||
|
||||
(defn read-ns [r]
|
||||
(lazy-seq
|
||||
(let [form (read r false ::eof)
|
||||
|
@ -32,32 +22,22 @@
|
|||
([expr]
|
||||
(check-form expr all-rules))
|
||||
([expr rules]
|
||||
(for [[rule alt] rules
|
||||
:let [rule-broke (and (sequential? expr)
|
||||
(logic/unifier expr rule))]
|
||||
:when rule-broke]
|
||||
(when-let [alt (some (fn [[rule alt]] (and (sequential? expr)
|
||||
(logic/unifier expr rule)
|
||||
alt))
|
||||
rules)]
|
||||
{:expr expr
|
||||
:alt alt
|
||||
:line (-> expr meta :line)})))
|
||||
|
||||
(defn check
|
||||
"This is a presentation version of check-form,
|
||||
used to print broken-rules to stdout"
|
||||
([expr]
|
||||
(check expr all-rules))
|
||||
([expr rules]
|
||||
(doseq [{:keys [line alt expr]} (check-form expr rules)]
|
||||
(printf "[Kibit:%s] Consider %s instead of %s\n" line alt expr))))
|
||||
|
||||
(defn expr-seq [expr]
|
||||
(tree-seq sequential?
|
||||
seq
|
||||
expr))
|
||||
|
||||
(defn check-ns
|
||||
([ns-sym rules]
|
||||
(with-open [reader (-> ns-sym source-file src)]
|
||||
(doseq [form (mapcat expr-seq (read-ns reader))]
|
||||
(check form rules))))
|
||||
([ns-sym]
|
||||
(check-ns ns-sym all-rules)))
|
||||
(defn check-file
|
||||
([reader]
|
||||
(check-file reader all-rules))
|
||||
([reader rules]
|
||||
(keep check-form
|
||||
(mapcat expr-seq (read-ns (LineNumberingPushbackReader. reader))))))
|
||||
|
|
|
@ -7,11 +7,12 @@
|
|||
"Suggest idiomatic replacements for patterns of code."
|
||||
[project]
|
||||
(let [paths (or (:source-paths project) [(:source-path project)])
|
||||
namespaces (apply concat (for [path paths]
|
||||
(clj-ns/find-namespaces-in-dir (io/file path))))]
|
||||
(doseq [ns-sym namespaces]
|
||||
(try
|
||||
(println "==" ns-sym "==")
|
||||
(kibit/check-ns ns-sym)
|
||||
(catch RuntimeException e (println ns-sym "not found."))))))
|
||||
|
||||
source-files (mapcat #(-> % io/file clj-ns/find-clojure-sources-in-dir)
|
||||
paths)]
|
||||
(doseq [source-file source-files]
|
||||
(printf "== %s ==\n"
|
||||
(or (second (clj-ns/read-file-ns-decl source-file)) source-file))
|
||||
(with-open [reader (io/reader source-file)]
|
||||
(doseq [{:keys [line expr alt]} (kibit/check-file reader)]
|
||||
(printf "[%s] Consider %s instead of %s\n" line alt expr)))
|
||||
(flush))))
|
||||
|
|
Loading…
Reference in a new issue