From 8f119d6457f70827a40b105a60218d855a030969 Mon Sep 17 00:00:00 2001
From: Michiel Borkent <michielborkent@gmail.com>
Date: Fri, 11 Feb 2022 00:13:27 +0100
Subject: [PATCH] Linting improvements (#20424)

* honeysql var improvements

* Define routes

* Define routes

* define-routes improvement

* honeysql helpers

* honesql

* abs in clojure 1.11

* fix logic unresolved vars

* deprecated

* deprecated var warnings

* undo replace
---
 .clj-kondo/config.edn                     | 62 +++++++++++++++++++++--
 .clj-kondo/macros/metabase/api/common.clj |  5 ++
 shared/src/metabase/mbql/schema.cljc      |  2 +-
 src/metabase/api/user.clj                 |  3 +-
 4 files changed, 66 insertions(+), 6 deletions(-)
 create mode 100644 .clj-kondo/macros/metabase/api/common.clj

diff --git a/.clj-kondo/config.edn b/.clj-kondo/config.edn
index 9b658c45e1e..7b66d57d88b 100644
--- a/.clj-kondo/config.edn
+++ b/.clj-kondo/config.edn
@@ -14,10 +14,60 @@
                                          (clojure.core.logic/fresh)
                                          (clojure.core.logic/matcha)
                                          (clojure.core.logic/run)]}
-           ;; TODO: clj-kondo should have a way to disable this in certain macro calls like
-           ;; metabase.mbql.util.match/replace
            :unexpected-recur {:level :off}
-           :unused-referred-var {:exclude {compojure.core [GET DELETE POST PUT]}}}
+           :unused-referred-var {:exclude {compojure.core [GET DELETE POST PUT]}}
+           :deprecated-var {:exclude {metabase.query-processor.util/normalize-token
+                                      {:namespaces ["metabase.*"]}
+                                      metabase.driver/supports?
+                                      {:namespaces ["metabase.*"]}
+                                      metabase.driver/current-db-time
+                                      {:namespaces ["metabase.*"]}
+                                      metabase.driver.common/current-db-time-native-query
+                                      {:namespaces ["metabase\\.driver.*"]}
+                                      metabase.driver.common/current-db-time-date-formatters
+                                      {:namespaces ["metabase\\.driver.*"]}
+                                      metabase.driver.sql-jdbc.execute.old-impl/read-column
+                                      {:namespaces ["metabase\\.driver.*"]}
+                                      metabase.driver.common/first-successful-parse
+                                      {:namespaces ["metabase\\.driver.*"]}
+                                      metabase.driver.common/ThreadSafeSimpleDateFormat
+                                      {:namespaces ["metabase\\.driver.*"]}
+                                      metabase.driver.common/create-db-time-formatters
+                                      {:namespaces ["metabase\\.driver.*"]}
+                                      metabase.driver.common/current-db-time
+                                      {:namespaces ["metabase.*"]}
+                                      metabase.driver.sql.query-processor.deprecated/*field-options*
+                                      {:namespaces ["metabase\\.driver.*"]}
+                                      metabase.driver.sql.query-processor.deprecated/*source-query*
+                                      {:namespaces ["metabase\\.driver.*"]}
+                                      metabase.driver.sql.query-processor.deprecated/field->identifier
+                                      {:namespaces ["metabase\\.driver.*"]}
+                                      metabase.driver.sql.query-processor.deprecated/field->alias
+                                      {:namespaces ["metabase\\.driver.*"]}
+                                      metabase.driver.sql.query-processor.deprecated/prefix-field-alias
+                                      {:namespaces ["metabase\\.driver.*"]}
+                                      metabase.query-processor.middleware.resolve-joins/maybe-resolve-source-table
+                                      {:namespaces ["metabase.*"]}
+                                      metabase.driver.sql-jdbc.execute.old-impl/set-timezone-sq
+                                      {:namespaces ["metabase\\.driver.*"]}
+                                      metabase.driver.sql-jdbc.execute.old-impl/set-timezone-sql
+                                      {:namespaces ["metabase\\.driver.*"]}
+                                      metabase.driver.sql.query-processor.deprecated/*table-alias*
+                                      {:namespaces ["metabase\\.driver.*"]}
+                                      metabase.public-settings.premium-features/enable-enhancements?
+                                      {:namespaces ["metabase\\.models.*"]}
+                                      metabase.driver.sql.query-processor.deprecated/escape-alias
+                                      {:namespaces ["metabase\\.driver.*"]}
+                                      metabase.driver.sql-jdbc.execute/set-time-zone-if-supported!
+                                      {:namespaces ["metabase\\.driver.*"]}
+                                      metabase.driver.sql-jdbc.sync.interface/syncable-schemas
+                                      {:namespaces ["metabase\\.driver.*"]}
+                                      metabase.query-processor/query->preprocessed
+                                      {:namespaces ["metabase.*"]}
+                                      schema.core/either
+                                      {:namespaces ["metabase.*"]}
+                                      schema.core/both
+                                      {:namespaces ["metabase.*"]}}}}
  :lint-as {metabase.api.common/let-404 clojure.core/let
            metabase.db.data-migrations/defmigration clojure.core/def
            metabase.query-processor.error-type/deferror clojure.core/def
@@ -39,7 +89,10 @@
            potemkin/defrecord+ clojure.core/defrecord
            potemkin.types/deftype+ clojure.core/deftype
            potemkin/deftype+ clojure.core/deftype
-           clojurewerkz.quartzite.jobs/defjob clojure.core/defn}
+           clojurewerkz.quartzite.jobs/defjob clojure.core/defn
+           honeysql.util/defalias clojure.core/def
+           honeysql.helpers/defhelper clj-kondo.lint-as/def-catch-all
+           clojure.core.logic/defne clj-kondo.lint-as/def-catch-all}
  :hooks   {:analyze-call {metabase.test.data/dataset        hooks.metabase.test.data/dataset
                           metabase.test/dataset             hooks.metabase.test.data/dataset
                           metabase.test.data/$ids           hooks.metabase.test.data/$ids
@@ -52,6 +105,7 @@
                           metabase.api.common/defendpoint-async hooks.metabase.api.common/defendpoint}
            :macroexpand {metabase.query-processor.streaming/streaming-response
                          metabase.query-processor.streaming/streaming-response
+                         metabase.api.common/define-routes macros.metabase.api.common/define-routes
                          toucan.models/defmodel toucan.models/defmodel
                          clojurewerkz.quartzite.jobs/build macros.quartz/build-job
                          clojurewerkz.quartzite.triggers/build macros.quartz/build-trigger
diff --git a/.clj-kondo/macros/metabase/api/common.clj b/.clj-kondo/macros/metabase/api/common.clj
new file mode 100644
index 00000000000..99c939def06
--- /dev/null
+++ b/.clj-kondo/macros/metabase/api/common.clj
@@ -0,0 +1,5 @@
+(ns macros.metabase.api.common)
+
+(defmacro define-routes [& args]
+  `(do (def ~'routes)
+       ~@args))
diff --git a/shared/src/metabase/mbql/schema.cljc b/shared/src/metabase/mbql/schema.cljc
index 3546311b3c7..d03676d3cb6 100644
--- a/shared/src/metabase/mbql/schema.cljc
+++ b/shared/src/metabase/mbql/schema.cljc
@@ -1,6 +1,6 @@
 (ns metabase.mbql.schema
   "Schema for validating a *normalized* MBQL query. This is also the definitive grammar for MBQL, wow!"
-  (:refer-clojure :exclude [count distinct min max + - / * and or not not-empty = < > <= >= time case concat replace])
+  (:refer-clojure :exclude [count distinct min max + - / * and or not not-empty = < > <= >= time case concat replace abs])
   #?@
    (:clj
     [(:require
diff --git a/src/metabase/api/user.clj b/src/metabase/api/user.clj
index c256024af68..597dc13d90f 100644
--- a/src/metabase/api/user.clj
+++ b/src/metabase/api/user.clj
@@ -1,6 +1,7 @@
 (ns metabase.api.user
   "/api/user endpoints"
   (:require [cemerick.friend.credentials :as creds]
+            [clojure.string :as str]
             [compojure.core :refer [DELETE GET POST PUT]]
             [honeysql.helpers :as hh]
             [metabase.analytics.snowplow :as snowplow]
@@ -82,7 +83,7 @@
       "active"      [:= :is_active true]
       [:= :is_active true])))
 
-(defn- wildcard-query [query] (str "%" (clojure.string/lower-case query) "%"))
+(defn- wildcard-query [query] (str "%" (str/lower-case query) "%"))
 
 (defn- query-clause
   "Honeysql clause to shove into user query if there's a query"
-- 
GitLab