Add clj-kondo and fix most linting warnings

This commit is contained in:
Juho Teperi 2020-03-05 13:32:48 +02:00
parent c214622495
commit c4e84c2875
47 changed files with 178 additions and 181 deletions

6
.clj-kondo/config.edn Normal file
View file

@ -0,0 +1,6 @@
{;;:skip-comments true
:lint-as {potemkin/def-derived-map clojure.core/defrecord}
:linters {:if {:level :off}
:unused-binding {:level :off}
:unused-referred-var {:exclude {clojure.test [deftest testing is are]
cljs.test [deftest testing is are]}}}}

10
Justfile Normal file
View file

@ -0,0 +1,10 @@
help:
@just --list
# Initializes lint
init-lint:
clj-kondo --lint $(lein classpath)
# Lints the project
lint:
./lint.sh

View file

@ -1,6 +1,5 @@
(ns backend.server
(:require [clojure.java.io :as io]
[ring.util.response :as resp]
(:require [ring.util.response :as resp]
[ring.middleware.content-type :as content-type]))
(def handler

View file

@ -3,7 +3,6 @@
[reitit.frontend :as rf]
[reitit.frontend.easy :as rfe]
[reitit.frontend.controllers :as rfc]
[reitit.coercion :as rc]
[reitit.coercion.schema :as rsc]
[schema.core :as s]
[fipp.edn :as fedn]))

View file

@ -1,6 +1,5 @@
(ns backend.server
(:require [clojure.java.io :as io]
[ring.util.response :as resp]
(:require [ring.util.response :as resp]
[ring.middleware.content-type :as content-type]))
(def handler

View file

@ -3,7 +3,6 @@
[reitit.frontend :as rf]
[reitit.frontend.easy :as rfe]
[reitit.frontend.controllers :as rfc]
[reitit.coercion :as rc]
[reitit.coercion.schema :as rsc]
[schema.core :as s]
[fipp.edn :as fedn]))

View file

@ -1,6 +1,5 @@
(ns backend.server
(:require [clojure.java.io :as io]
[ring.util.response :as resp]
(:require [ring.util.response :as resp]
[ring.middleware.content-type :as content-type]))
(def handler

View file

@ -2,7 +2,6 @@
(:require [clojure.string :as string]
[fipp.edn :as fedn]
[reagent.core :as r]
[reitit.coercion :as rc]
[reitit.coercion.spec :as rss]
[reitit.frontend :as rf]
[reitit.frontend.easy :as rfe]

View file

@ -1,6 +1,5 @@
(ns backend.server
(:require [clojure.java.io :as io]
[ring.util.response :as resp]
(:require [ring.util.response :as resp]
[ring.middleware.content-type :as content-type]))
(def handler

View file

@ -1,11 +1,9 @@
(ns frontend.core
(:require [fipp.edn :as fedn]
[reagent.core :as r]
[reitit.coercion :as rc]
[reitit.coercion.spec :as rss]
[reitit.frontend :as rf]
[reitit.frontend.easy :as rfe]
[spec-tools.data-spec :as ds]))
[reitit.frontend.easy :as rfe]))
;; Implementing conditional prompt on navigation with Reitit frontend.

View file

@ -1,6 +1,5 @@
(ns backend.server
(:require [clojure.java.io :as io]
[ring.util.response :as resp]
(:require [ring.util.response :as resp]
[ring.middleware.content-type :as content-type]))
(def handler

View file

@ -1,9 +1,7 @@
(ns frontend-re-frame.core
(:require
[re-frame.core :as re-frame]
(:require [re-frame.core :as re-frame]
[reagent.core :as reagent]
[reitit.core :as r]
[reitit.coercion :as rc]
[reitit.coercion.spec :as rss]
[reitit.frontend :as rf]
[reitit.frontend.controllers :as rfc]

View file

@ -1,6 +1,5 @@
(ns backend.server
(:require [clojure.java.io :as io]
[ring.util.response :as resp]
(:require [ring.util.response :as resp]
[ring.middleware.content-type :as content-type]))
(def handler

View file

@ -2,7 +2,6 @@
(:require [reagent.core :as r]
[reitit.frontend :as rf]
[reitit.frontend.easy :as rfe]
[reitit.coercion :as rc]
[reitit.coercion.spec :as rss]
[spec-tools.data-spec :as ds]
[fipp.edn :as fedn]))

View file

@ -11,9 +11,10 @@
[reitit.http.interceptors.muuntaja :as muuntaja]
[reitit.http.interceptors.exception :as exception]
[reitit.http.interceptors.multipart :as multipart]
[reitit.http.interceptors.dev :as dev]
[reitit.http.spec :as spec]
[spec-tools.spell :as spell]
;; Uncomment to use
; [reitit.http.interceptors.dev :as dev]
; [reitit.http.spec :as spec]
; [spec-tools.spell :as spell]
[ring.adapter.jetty :as jetty]
[aleph.http :as aleph]
[muuntaja.core :as m]

View file

@ -11,10 +11,10 @@
[reitit.http.interceptors.muuntaja :as muuntaja]
[reitit.http.interceptors.exception :as exception]
[reitit.http.interceptors.multipart :as multipart]
[reitit.http.interceptors.dev :as dev]
[reitit.http.spec :as spec]
[spec-tools.spell :as spell]
[io.pedestal.http :as server]
;; Uncomment to use
; [reitit.http.interceptors.dev :as dev]
; [reitit.http.spec :as spec]
; [spec-tools.spell :as spell]
[reitit.pedestal :as pedestal]
[clojure.core.async :as a]
[clojure.java.io :as io]

View file

@ -1,5 +1,5 @@
(ns example.server-test
(:require [clojure.test :refer :all]
(:require [clojure.test :refer [deftest testing is]]
[example.server :refer [app]]
[ring.mock.request :refer [request json-body]]))

View file

@ -9,9 +9,10 @@
[reitit.ring.middleware.exception :as exception]
[reitit.ring.middleware.multipart :as multipart]
[reitit.ring.middleware.parameters :as parameters]
[reitit.ring.middleware.dev :as dev]
[reitit.ring.spec :as spec]
[spec-tools.spell :as spell]
;; Uncomment to use
; [reitit.ring.middleware.dev :as dev]
; [reitit.ring.spec :as spec]
; [spec-tools.spell :as spell]
[ring.adapter.jetty :as jetty]
[muuntaja.core :as m]
[clojure.spec.alpha :as s]

View file

@ -1,5 +1,5 @@
(ns example.server-test
(:require [clojure.test :refer :all]
(:require [clojure.test :refer [deftest testing is]]
[example.server :refer [app]]
[ring.mock.request :refer [request json-body]]))

View file

@ -9,9 +9,10 @@
[reitit.ring.middleware.exception :as exception]
[reitit.ring.middleware.multipart :as multipart]
[reitit.ring.middleware.parameters :as parameters]
[reitit.ring.middleware.dev :as dev]
[reitit.ring.spec :as spec]
[spec-tools.spell :as spell]
;; Uncomment to use
; [reitit.ring.middleware.dev :as dev]
; [reitit.ring.spec :as spec]
; [spec-tools.spell :as spell]
[ring.adapter.jetty :as jetty]
[muuntaja.core :as m]
[clojure.java.io :as io]))

15
lint.sh Executable file
View file

@ -0,0 +1,15 @@
#!/bin/bash
EXIT=0
clj-kondo --lint modules/*/src test perf-test
EXIT=$(( EXIT + $? ))
for file in examples/*/src; do
echo
echo "Linting $file"
clj-kondo --lint "$file"
EXIT=$(( EXIT + $? ))
done
exit $EXIT

View file

@ -4,11 +4,9 @@
[clojure.set :as set]
[meta-merge.core :as mm]
[reitit.trie :as trie]
[reitit.exception :as exception]
[reitit.exception :as ex])
#?(:clj
(:import (java.util.regex Pattern)
(java.util HashMap Map)
(:import (java.util HashMap Map)
(java.net URLEncoder URLDecoder))))
(defn parse [path opts]
@ -138,7 +136,7 @@
(when-not (every? #(contains? path-params %) required)
(let [defined (-> path-params keys set)
missing (set/difference required defined)]
(exception/fail!
(ex/fail!
(str "missing path-params for route " template " -> " missing)
{:path-params path-params, :required required}))))

View file

@ -4,7 +4,6 @@
[reitit.exception :as exception]
[arrangement.core]
;; spell-spec
[spec-tools.spell :as spell]
[spell-spec.expound]
;; expound
[expound.ansi]

View file

@ -1,12 +1,11 @@
(ns reitit.frontend
(:require [clojure.set :as set]
[reitit.coercion :as coercion]
[reitit.coercion :as rc]
[reitit.core :as r])
(:import goog.Uri
goog.Uri.QueryData))
(defn- query-param [^goog.Uri.QueryData q k]
(defn- query-param [^QueryData q k]
(let [vs (.getValues q k)]
(if (< (alength vs) 2)
(aget vs 0)
@ -14,7 +13,7 @@
(defn query-params
"Given goog.Uri, read query parameters into Clojure map."
[^goog.Uri uri]
[^Uri uri]
(let [q (.getQueryData uri)]
(->> q
(.getKeys)
@ -51,7 +50,7 @@
([raw-routes]
(router raw-routes {}))
([raw-routes opts]
(r/router raw-routes (merge {:compile rc/compile-request-coercers} opts))))
(r/router raw-routes (merge {:compile coercion/compile-request-coercers} opts))))
(defn match-by-name!
"Logs problems using console.warn"

View file

@ -2,7 +2,6 @@
"Provides integration to hash-change or HTML5 History
events."
(:require [reitit.core :as reitit]
[reitit.core :as r]
[reitit.frontend :as rf]
[goog.events :as gevents])
(:import goog.Uri))
@ -59,9 +58,10 @@
el
(recur (.-parentNode el)))))))
(defn- event-target [event]
(defn- event-target
"Read event's target from composed path to get shadow dom working,
fallback to target property if not available"
[event]
(let [original-event (.getBrowserEvent event)]
(if (exists? (.-composedPath original-event))
(aget (.composedPath original-event) 0)
@ -176,7 +176,7 @@
(href history k params nil))
([history k params query]
(let [match (rf/match-by-name! (:router history) k params)]
(-href history (r/match->path match query)))))
(-href history (reitit/match->path match query)))))
(defn push-state
"Sets the new route, leaving previous route in history."
@ -186,7 +186,7 @@
(push-state history k params nil))
([history k params query]
(let [match (rf/match-by-name! (:router history) k params)
path (r/match->path match query)]
path (reitit/match->path match query)]
;; pushState and replaceState don't trigger popstate event so call on-navigate manually
(.pushState js/window.history nil "" (-href history path))
(-on-navigate history path))))
@ -199,6 +199,6 @@
(replace-state history k params nil))
([history k params query]
(let [match (rf/match-by-name! (:router history) k params)
path (r/match->path match query)]
path (reitit/match->path match query)]
(.replaceState js/window.history nil "" (-href history path))
(-on-navigate history path))))

View file

@ -43,9 +43,9 @@
(let [coercers (coercion/response-coercers coercion responses opts)]
{:leave (fn [ctx]
(let [request (:request ctx)
response (:response ctx)]
(let [response (coercion/coerce-response coercers request response)]
(assoc ctx :response response))))})))})
response (:response ctx)
response (coercion/coerce-response coercers request response)]
(assoc ctx :response response)))})))})
(defn coerce-exceptions-interceptor
"Interceptor for handling coercion exceptions.

View file

@ -1,8 +1,6 @@
(ns reitit.swagger-ui
(:require [clojure.string :as str]
[reitit.ring :as ring]
#?@(:clj [
[jsonista.core :as j]])))
#?(:clj (:require [reitit.ring :as ring]
[jsonista.core :as j])))
#?(:clj
(defn create-swagger-ui-handler

View file

@ -67,9 +67,10 @@
(defn- swagger-path [path opts]
(-> path (trie/normalize opts) (str/replace #"\{\*" "{")))
(defn create-swagger-handler []
(defn create-swagger-handler
"Create a ring handler to emit swagger spec. Collects all routes from router which have
an intersecting `[:swagger :id]` and which are not marked with `:no-doc` route data."
[]
(fn create-swagger
([{::r/keys [router match] :keys [request-method]}]
(let [{:keys [id] :or {id ::default} :as swagger} (-> match :result request-method :data :swagger)
@ -95,11 +96,11 @@
(strip-top-level-keys swagger))]))
transform-path (fn [[p _ c]]
(if-let [endpoint (some->> c (keep transform-endpoint) (seq) (into {}))]
[(swagger-path p (r/options router)) endpoint]))]
(let [map-in-order #(->> % (apply concat) (apply array-map))
[(swagger-path p (r/options router)) endpoint]))
map-in-order #(->> % (apply concat) (apply array-map))
paths (->> router (r/compiled-routes) (filter accept-route) (map transform-path) map-in-order)]
{:status 200
:body (meta-merge swagger {:paths paths})})))
:body (meta-merge swagger {:paths paths})}))
([req res raise]
(try
(res (create-swagger req))

View file

@ -1,7 +1,7 @@
(ns reitit.bide-perf-test
(:require [criterium.core :as cc]
[reitit.core :as reitit]
[reitit.perf-utils :refer :all]
[reitit.perf-utils :refer [suite title]]
[bidi.bidi :as bidi]
[ataraxy.core :as ataraxy]

View file

@ -1,9 +1,7 @@
(ns reitit.calf-perf-test
(:require [criterium.core :as cc]
[reitit.perf-utils :refer :all]
[ring.util.codec]
[reitit.impl]
[clojure.edn :as edn]
[reitit.ring :as ring]
[reitit.core :as r]))
@ -24,11 +22,10 @@
(defn test! [f input]
(do
(println "\u001B[33m")
(println (pr-str input) "=>" (pr-str (f input)))
(println "\u001B[0m")
(cc/quick-bench (f input))))
(cc/quick-bench (f input)))
(defn h11 [id type] {:status 200
:headers {"Content-Type" "text/plain"}

View file

@ -1,11 +1,9 @@
(ns reitit.coercion-perf-test
(:require [clojure.test :refer [deftest testing is]]
[criterium.core :as cc]
[reitit.perf-utils :refer :all]
(:require [criterium.core :as cc]
[reitit.perf-utils :refer [bench! suite title]]
[clojure.spec.alpha :as s]
[spec-tools.core :as st]
[muuntaja.middleware :as mm]
[muuntaja.core :as m]
[jsonista.core :as j]
[reitit.ring.coercion :as rrc]
[reitit.coercion.spec :as spec]
@ -91,7 +89,7 @@
(comment
(doseq [coercion [nil (->NoOpCoercion) spec/coercion]]
(suite (str (if coercion (protocol/get-name coercion))))
(suite (str (if coercion (coercion/-get-name coercion))))
(let [routes ["/api"
["/ping" {:parameters {:body {:x int?, :y int?}}
:responses {200 {:body {:total pos-int?}}}

View file

@ -1,5 +1,5 @@
(ns reitit.cors-perf-test
(:require [reitit.perf-utils :refer :all]
(:require [reitit.perf-utils :refer [b!]]
[ring.middleware.cors :as cors]))
;;

View file

@ -1,8 +1,7 @@
(ns reitit.go-perf-test
(:require [criterium.core :as cc]
[reitit.perf-utils :refer :all]
[reitit.perf-utils :refer [suite title]]
[reitit.ring :as ring]
[reitit.trie :as trie]
[clojure.string :as str]))
;;

View file

@ -1,8 +1,7 @@
(ns reitit.impl-perf-test
(:require [criterium.core :as cc]
[reitit.perf-utils :refer :all]
[reitit.perf-utils :refer [suite]]
[ring.util.codec]
[reitit.impl]
[reitit.impl :as impl])
(:import (java.net URLDecoder URLEncoder)))
@ -23,11 +22,10 @@
(defn test! [f input]
(do
(println "\u001B[33m")
(println (pr-str input) "=>" (pr-str (f input)))
(println "\u001B[0m")
(cc/quick-bench (f input))))
(cc/quick-bench (f input)))
(defn url-decode-naive [s]
(URLDecoder/decode
@ -190,5 +188,4 @@
(url-encode!)
(form-decode!)
(form-encode!)
(url-encode-coll!)
(split!))
(url-encode-coll!))

View file

@ -1,6 +1,6 @@
(ns reitit.json-perf
(:require [criterium.core :as cc]
[reitit.perf-utils :refer :all]
[reitit.perf-utils :refer [title]]
;; aleph
[aleph.http :as http]

View file

@ -1,6 +1,6 @@
(ns reitit.json-size-perf
(:require [criterium.core :as cc]
[reitit.perf-utils :refer :all]
[reitit.perf-utils :refer [title]]
[reitit.ring :as ring]
[muuntaja.middleware :as mm]
[reitit.coercion.spec]

View file

@ -1,6 +1,5 @@
(ns reitit.lupapiste-perf-test
(:require [clojure.test :refer [deftest testing is]]
[reitit.perf-utils :refer :all]
(:require [reitit.perf-utils :refer [bench!! handler valid-urls]]
[reitit.core :as reitit]
[reitit.ring :as ring]

View file

@ -1,6 +1,6 @@
(ns reitit.middleware-interceptor-perf
(:require [criterium.core :as cc]
[reitit.perf-utils :refer :all]
[reitit.perf-utils :refer [title]]
[reitit.middleware :as middleware]
[reitit.interceptor :as interceptor]

View file

@ -1,5 +1,5 @@
(ns reitit.nodejs-perf-test
(:require [reitit.perf-utils :refer :all]
(:require [reitit.perf-utils :refer [title]]
[immutant.web :as web]
[reitit.ring :as ring]))

View file

@ -16,7 +16,6 @@
[io.pedestal.http.route.definition.table :as table]
[io.pedestal.http.route.map-tree :as map-tree]
[io.pedestal.http.route.router :as pedestal]
[reitit.core :as r]
[criterium.core :as cc]))
;;
@ -592,10 +591,6 @@
["/v1/orgs/:org-id/members/invitation-data/:user-id" :get (constantly "") :route-name :test/route39]]))
{:path-info "/v1/orgs/0/members/invitation-data/1" :request-method :get})
(require '[io.pedestal.http.route.definition.table :as table])
(require '[io.pedestal.http.route.map-tree :as map-tree])
(require '[io.pedestal.http.route.router :as pedestal])
(pedestal/find-route
(map-tree/router
(table/table-routes
@ -640,7 +635,7 @@
router (reitit/router routes)
reitit-f #(reitit/match-by-path router (:uri %))
reitit-ring-f (ring/ring-handler (ring/router opensensors-routes))
reitit-ring-linear-f (ring/ring-handler (ring/router opensensors-routes {:router r/linear-router}))
reitit-ring-linear-f (ring/ring-handler (ring/router opensensors-routes {:router reitit/linear-router}))
reitit-ring-fast-f (ring/ring-handler (ring/router opensensors-routes) nil {:inject-router? false, :inject-match? false})
bidi-f #(bidi/match-route opensensors-bidi-routes (:uri %))
calfpath-macros-f opensensors-calfpath-macro-handler
@ -727,7 +722,7 @@
;; 293ns (pre-defined parameters)
(let [app (ring/ring-handler (ring/router opensensors-routes) {:inject-match? false, :inject-router? false})
request {:uri "/v1/users/1/devices/1", :request-method :get}]
(doseq [[p r] (-> app (ring/get-router) (r/routes))]
(doseq [[p r] (-> app (ring/get-router) (reitit/routes))]
(when-not (app {:uri p, :request-method :get})
(println "FAIL:" p)))
(println (app request))

View file

@ -1,6 +1,5 @@
(ns reitit.prefix-tree-perf-test
(:require [clojure.test :refer :all]
[io.pedestal.http.route.prefix-tree :as p]
(:require [io.pedestal.http.route.prefix-tree :as p]
[reitit.trie :as trie]
[criterium.core :as cc]))

View file

@ -1,6 +1,6 @@
(ns reitit.request-perf
(:require [criterium.core :as cc]
[reitit.perf-utils :refer :all]
[reitit.perf-utils :refer [title]]
[potemkin :as p]))
(set! *warn-on-reflection* true)
@ -25,8 +25,7 @@
(-request-method [this])
(-path-params [this]))
(p/def-derived-map
ZeroCopyRequest
(p/def-derived-map ZeroCopyRequest
[raw]
:uri (-uri raw)
:request-method (-request-method raw)
@ -42,6 +41,8 @@
:request-method (-request-method raw)
:path-params (-path-params raw)})
(defrecord RecordRequest [uri request-method path-params])
(defn record-request [raw]
(->RecordRequest (-uri raw) (-request-method raw) (-path-params raw)))

View file

@ -1,6 +1,5 @@
(ns reitit.ring-perf-test
(:require [criterium.core :as cc]
[reitit.perf-utils :refer :all]
[reitit.ring :as ring]))
;;

View file

@ -1,7 +1,7 @@
(ns reitit.static-perf-test
(:require [reitit.perf-utils :refer :all]
[immutant.web :as web]
(:require [immutant.web :as web]
[reitit.ring :as ring]
[reitit.ring.mime :as reitit-mime]
[clojure.java.io :as io]
[criterium.core :as cc]
[ring.util.response]
@ -48,8 +48,7 @@
(ring.middleware.defaults/wrap-defaults ring.middleware.defaults/site-defaults)))
(comment
(def server (web/run #'app {:port 3000, :dispatch? false, :server {:always-set-keep-alive false}}))
(routing-test))
(def server (web/run #'app1 {:port 3000, :dispatch? false, :server {:always-set-keep-alive false}})))
(defn bench-resources []
@ -104,4 +103,4 @@
;; 106ns
(cc/quick-bench
(reitit.ring.mime/ext-mime-type name reitit.ring.mime/default-mime-types))))
(reitit-mime/ext-mime-type name reitit-mime/default-mime-types))))

View file

@ -1,9 +1,9 @@
(ns reitit.core-test
(:require [clojure.test :refer [deftest testing is are]]
[reitit.core :as r #?@(:cljs [:refer [Match Router]])]
[reitit.core :as r #?@(:cljs [:refer [Router]])]
[reitit.impl :as impl])
#?(:clj
(:import (reitit.core Match Router)
(:import (reitit.core Router)
(clojure.lang ExceptionInfo))))
(deftest reitit-test
@ -241,10 +241,10 @@
(is (= 2 @compile-times))))))
(testing "default compile"
(let [router (r/router ["/ping" (constantly "ok")])]
(let [{:keys [result]} (r/match-by-path router "/ping")]
(let [router (r/router ["/ping" (constantly "ok")])
{:keys [result]} (r/match-by-path router "/ping")]
(is result)
(is (= "ok" (result)))))))
(is (= "ok" (result))))))
(testing "custom router"
(let [router (r/router ["/ping"] {:router (fn [_ _]

View file

@ -1,5 +1,5 @@
(ns reitit.swagger-test
(:require [clojure.test :refer :all]
(:require [clojure.test :refer [deftest is testing]]
[reitit.ring :as ring]
[reitit.swagger :as swagger]
[reitit.swagger-ui :as swagger-ui]

View file

@ -1,7 +1,6 @@
(ns reitit.frontend.history-test
(:require [clojure.test :refer [deftest testing is are async]]
[reitit.core :as r]
[reitit.frontend :as rf]
[reitit.frontend.history :as rfh]
[reitit.frontend.test-utils :refer [capture-console]]
[goog.events :as gevents]))
@ -43,8 +42,8 @@
(gevents/removeAll js/window goog.events.EventType.HASHCHANGE)
(async done
(let [n (atom 0)
history (rfh/start! router
(let [n (atom 0)]
(rfh/start! router
(fn [match history]
(let [url (rfh/-get-path history)]
(case (swap! n inc)
@ -67,8 +66,8 @@
"go back after replace state")
(rfh/stop! history)
(done))
(do (is false "extra event")))))
{:use-fragment true})]))))
(is false "extra event"))))
{:use-fragment true})))))
(deftest html5-history-test
(when browser
@ -100,12 +99,12 @@
(gevents/removeAll js/window goog.events.EventType.HASHCHANGE)
(async done
(let [n (atom 0)
history (rfh/start! router
(let [n (atom 0)]
(rfh/start! router
(fn [match history]
(let [url (rfh/-get-path history)]
(case (swap! n inc)
1 (do (rfh/push-state history ::frontpage))
1 (rfh/push-state history ::frontpage)
2 (do (is (= "/" url)
"start at root")
(rfh/push-state history ::foo))
@ -125,8 +124,8 @@
"go back after replace state")
(rfh/stop! history)
(done))
(do (is false "extra event")))))
{:use-fragment false})]))))
(is false "extra event"))))
{:use-fragment false})))))
(deftest html5-history-link-click-test
(when browser