From 7e0c097f23cb98404334f5f4e532db9cbcda0177 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Mon, 6 Sep 2021 15:58:36 +0200 Subject: [PATCH] :tada: Add linter for check duplicte potok types. --- .clj-kondo/config.edn | 3 ++ .clj-kondo/hooks/export.clj | 33 +++++++++++++++---- frontend/src/app/main/data/dashboard.cljs | 8 ++--- frontend/src/app/main/data/viewer.cljs | 4 +-- frontend/src/app/main/data/workspace.cljs | 11 +++---- .../src/app/main/data/workspace/colors.cljs | 2 +- .../src/app/main/data/workspace/comments.cljs | 3 +- .../src/app/main/data/workspace/grid.cljs | 2 +- .../app/main/data/workspace/libraries.cljs | 2 +- .../main/data/workspace/notifications.cljs | 2 +- .../app/main/data/workspace/path/edition.cljs | 2 +- .../main/data/workspace/path/shortcuts.cljs | 2 +- .../app/main/data/workspace/path/undo.cljs | 2 +- .../app/main/data/workspace/selection.cljs | 2 +- .../app/main/data/workspace/transforms.cljs | 2 +- .../src/app/main/ui/dashboard/file_menu.cljs | 1 + frontend/src/app/main/ui/dashboard/team.cljs | 1 - .../src/app/main/ui/settings/profile.cljs | 1 - .../src/app/main/ui/viewer/handoff/code.cljs | 6 ++-- 19 files changed, 54 insertions(+), 35 deletions(-) diff --git a/.clj-kondo/config.edn b/.clj-kondo/config.edn index cbe153b34..4085b6d50 100644 --- a/.clj-kondo/config.edn +++ b/.clj-kondo/config.edn @@ -23,6 +23,9 @@ {:unsorted-required-namespaces {:level :warning} + :potok/reify-type + {:level :error} + :unresolved-namespace {:level :warning :exclude [data_readers]} diff --git a/.clj-kondo/hooks/export.clj b/.clj-kondo/hooks/export.clj index f29cc1a15..e8acc8e11 100644 --- a/.clj-kondo/hooks/export.clj +++ b/.clj-kondo/hooks/export.clj @@ -10,15 +10,34 @@ sname])] {:node result})) +(def registry (atom {})) + (defn potok-reify - [{:keys [:node]}] + [{:keys [:node :filename] :as params}] (let [[rnode rtype & other] (:children node) - result (api/list-node - (into [(api/token-node (symbol "deftype")) - (api/token-node (gensym (name (:k rtype)))) - (api/vector-node [])] - other))] - {:node result})) + rsym (symbol (str "event-type-" (name (:k rtype)))) + reg (get @registry filename #{})] + (when-not (:namespaced? rtype) + (let [{:keys [:row :col]} (meta rtype)] + (api/reg-finding! {:message "ptk/reify type should be namespaced" + :type :potok/reify-type + :row row + :col col}))) + + (if (contains? reg rsym) + (let [{:keys [:row :col]} (meta rtype)] + (api/reg-finding! {:message (str "duplicate type: " (name (:k rtype))) + :type :potok/reify-type + :row row + :col col})) + (swap! registry update filename (fnil conj #{}) rsym)) + + (let [result (api/list-node + (into [(api/token-node (symbol "deftype")) + (api/token-node rsym) + (api/vector-node [])] + other))] + {:node result}))) (defn clojure-specify [{:keys [:node]}] diff --git a/frontend/src/app/main/data/dashboard.cljs b/frontend/src/app/main/data/dashboard.cljs index 5185a831d..6df1557ad 100644 --- a/frontend/src/app/main/data/dashboard.cljs +++ b/frontend/src/app/main/data/dashboard.cljs @@ -710,14 +710,14 @@ (defn go-to-files ([project-id] - (ptk/reify ::go-to-files + (ptk/reify ::go-to-files-1 ptk/WatchEvent (watch [_ state _] (let [team-id (:current-team-id state)] (rx/of (rt/nav :dashboard-files {:team-id team-id :project-id project-id})))))) ([team-id project-id] - (ptk/reify ::go-to-files + (ptk/reify ::go-to-files-2 ptk/WatchEvent (watch [_ _ _] (rx/of (rt/nav :dashboard-files {:team-id team-id @@ -739,13 +739,13 @@ (defn go-to-projects ([] - (ptk/reify ::go-to-projects + (ptk/reify ::go-to-projects-0 ptk/WatchEvent (watch [_ state _] (let [team-id (:current-team-id state)] (rx/of (rt/nav :dashboard-projects {:team-id team-id})))))) ([team-id] - (ptk/reify ::go-to-projects + (ptk/reify ::go-to-projects-1 ptk/WatchEvent (watch [_ _ _] (du/set-current-team! team-id) diff --git a/frontend/src/app/main/data/viewer.cljs b/frontend/src/app/main/data/viewer.cljs index d73b6f478..7f8b0c14b 100644 --- a/frontend/src/app/main/data/viewer.cljs +++ b/frontend/src/app/main/data/viewer.cljs @@ -232,7 +232,7 @@ (rt/nav :viewer pparams (assoc qparams :index (dec index))))))))) (def select-next-frame - (ptk/reify ::select-prev-frame + (ptk/reify ::select-next-frame ptk/WatchEvent (watch [_ state _] (prn "select-next-frame") @@ -290,7 +290,7 @@ (defn go-to-frame-by-index [index] - (ptk/reify ::go-to-frame + (ptk/reify ::go-to-frame-by-index ptk/WatchEvent (watch [_ state _] (let [route (:route state) diff --git a/frontend/src/app/main/data/workspace.cljs b/frontend/src/app/main/data/workspace.cljs index 292a21729..3411db165 100644 --- a/frontend/src/app/main/data/workspace.cljs +++ b/frontend/src/app/main/data/workspace.cljs @@ -365,7 +365,6 @@ (when (= id (:current-page-id state)) go-to-file)))))) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; WORKSPACE File Actions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -376,7 +375,7 @@ (ptk/reify ::rename-file IDeref (-deref [_] - {:ev/origin "workspace" :id id :name name}) + {::ev/origin "workspace" :id id :name name}) ptk/UpdateEvent (update [_ state] @@ -1134,7 +1133,7 @@ (defn align-objects [axis] (us/verify ::gal/align-axis axis) - (ptk/reify :align-objects + (ptk/reify ::align-objects ptk/WatchEvent (watch [_ state _] (let [page-id (:current-page-id state) @@ -1165,7 +1164,7 @@ (defn distribute-objects [axis] (us/verify ::gal/dist-axis axis) - (ptk/reify :align-objects + (ptk/reify ::distribute-objects ptk/WatchEvent (watch [_ state _] (let [page-id (:current-page-id state) @@ -1240,7 +1239,7 @@ (rx/of (rt/nav' :workspace pparams qparams)))))) ([page-id] (us/verify ::us/uuid page-id) - (ptk/reify ::go-to-page + (ptk/reify ::go-to-page-2 ptk/WatchEvent (watch [_ state _] (let [project-id (:current-project-id state) @@ -1303,7 +1302,7 @@ (defn go-to-dashboard-fonts [] - (ptk/reify ::go-to-dashboard + (ptk/reify ::go-to-dashboard-fonts ptk/WatchEvent (watch [_ state _] (let [team-id (:current-team-id state)] diff --git a/frontend/src/app/main/data/workspace/colors.cljs b/frontend/src/app/main/data/workspace/colors.cljs index 1813fa712..f76b288d4 100644 --- a/frontend/src/app/main/data/workspace/colors.cljs +++ b/frontend/src/app/main/data/workspace/colors.cljs @@ -69,7 +69,7 @@ (defn show-palette "Show the palette tool and change the library it uses" [selected] - (ptk/reify ::change-palette-selected + (ptk/reify ::show-palette ptk/UpdateEvent (update [_ state] (-> state diff --git a/frontend/src/app/main/data/workspace/comments.cljs b/frontend/src/app/main/data/workspace/comments.cljs index ffd711aaa..8a07d1d90 100644 --- a/frontend/src/app/main/data/workspace/comments.cljs +++ b/frontend/src/app/main/data/workspace/comments.cljs @@ -9,7 +9,6 @@ [app.common.math :as mth] [app.common.spec :as us] [app.main.data.comments :as dcm] - [app.main.data.events :as ev] [app.main.data.workspace :as dw] [app.main.data.workspace.common :as dwc] [app.main.streams :as ms] @@ -72,7 +71,7 @@ (defn center-to-comment-thread [{:keys [position] :as thread}] (us/assert ::dcm/comment-thread thread) - (ptk/reify :center-to-comment-thread + (ptk/reify ::center-to-comment-thread ptk/UpdateEvent (update [_ state] (update state :workspace-local diff --git a/frontend/src/app/main/data/workspace/grid.cljs b/frontend/src/app/main/data/workspace/grid.cljs index b04b99f6a..ed3e2944d 100644 --- a/frontend/src/app/main/data/workspace/grid.cljs +++ b/frontend/src/app/main/data/workspace/grid.cljs @@ -54,7 +54,7 @@ (defn remove-frame-grid [frame-id index] - (ptk/reify ::set-frame-grid + (ptk/reify ::remove-frame-grid ptk/WatchEvent (watch [_ _ _] (rx/of (dch/update-shapes [frame-id] (fn [o] (update o :grids (fnil #(d/remove-at-index % index) [])))))))) diff --git a/frontend/src/app/main/data/workspace/libraries.cljs b/frontend/src/app/main/data/workspace/libraries.cljs index 3a977ac41..995fb674c 100644 --- a/frontend/src/app/main/data/workspace/libraries.cljs +++ b/frontend/src/app/main/data/workspace/libraries.cljs @@ -295,7 +295,7 @@ [] (ptk/reify ::add-component ptk/WatchEvent - (watch [it state _] + (watch [_ state _] (let [objects (wsh/lookup-page-objects state) selected (->> (wsh/lookup-selected state) (cp/clean-loops objects))] diff --git a/frontend/src/app/main/data/workspace/notifications.cljs b/frontend/src/app/main/data/workspace/notifications.cljs index f62eedc70..ac5fdbe12 100644 --- a/frontend/src/app/main/data/workspace/notifications.cljs +++ b/frontend/src/app/main/data/workspace/notifications.cljs @@ -107,7 +107,7 @@ (defn- handle-pointer-send [file-id point] - (ptk/reify ::handle-pointer-update + (ptk/reify ::handle-pointer-send ptk/EffectEvent (effect [_ state _] (let [ws (get-in state [:ws file-id]) diff --git a/frontend/src/app/main/data/workspace/path/edition.cljs b/frontend/src/app/main/data/workspace/path/edition.cljs index a7ae00efe..89331ebd2 100644 --- a/frontend/src/app/main/data/workspace/path/edition.cljs +++ b/frontend/src/app/main/data/workspace/path/edition.cljs @@ -179,7 +179,7 @@ :right (gpt/point 1 0))) (defn finish-move-selected [] - (ptk/reify ::move-selected + (ptk/reify ::finish-move-selected ptk/UpdateEvent (update [_ state] (let [id (get-in state [:workspace-local :edition])] diff --git a/frontend/src/app/main/data/workspace/path/shortcuts.cljs b/frontend/src/app/main/data/workspace/path/shortcuts.cljs index 55dbcd592..60c7eae67 100644 --- a/frontend/src/app/main/data/workspace/path/shortcuts.cljs +++ b/frontend/src/app/main/data/workspace/path/shortcuts.cljs @@ -20,7 +20,7 @@ ;; Shortcuts format https://github.com/ccampbell/mousetrap (defn esc-pressed [] - (ptk/reify :esc-pressed + (ptk/reify ::esc-pressed ptk/WatchEvent (watch [_ state _] ;; Not interrupt when we're editing a path diff --git a/frontend/src/app/main/data/workspace/path/undo.cljs b/frontend/src/app/main/data/workspace/path/undo.cljs index 43dcb0931..4bb34e718 100644 --- a/frontend/src/app/main/data/workspace/path/undo.cljs +++ b/frontend/src/app/main/data/workspace/path/undo.cljs @@ -90,7 +90,7 @@ "Joins the head with the previous undo in one. This is done so when the user changes a node handlers after adding it the undo merges both in one operation only" [] - (ptk/reify ::add-undo-entry + (ptk/reify ::merge-head ptk/UpdateEvent (update [_ state] (let [id (st/get-path-id state) diff --git a/frontend/src/app/main/data/workspace/selection.cljs b/frontend/src/app/main/data/workspace/selection.cljs index 912f0fa8d..86208467f 100644 --- a/frontend/src/app/main/data/workspace/selection.cljs +++ b/frontend/src/app/main/data/workspace/selection.cljs @@ -114,7 +114,7 @@ (defn deselect-shape [id] (us/verify ::us/uuid id) - (ptk/reify ::select-shape + (ptk/reify ::deselect-shape ptk/UpdateEvent (update [_ state] (update-in state [:workspace-local :selected] disj id)))) diff --git a/frontend/src/app/main/data/workspace/transforms.cljs b/frontend/src/app/main/data/workspace/transforms.cljs index 922ca1a64..9426033c8 100644 --- a/frontend/src/app/main/data/workspace/transforms.cljs +++ b/frontend/src/app/main/data/workspace/transforms.cljs @@ -511,7 +511,7 @@ (defn- start-move-duplicate [from-position] - (ptk/reify ::start-move-selected + (ptk/reify ::start-move-duplicate ptk/WatchEvent (watch [_ _ stream] (->> stream diff --git a/frontend/src/app/main/ui/dashboard/file_menu.cljs b/frontend/src/app/main/ui/dashboard/file_menu.cljs index b298ba183..e0c03033b 100644 --- a/frontend/src/app/main/ui/dashboard/file_menu.cljs +++ b/frontend/src/app/main/ui/dashboard/file_menu.cljs @@ -19,6 +19,7 @@ [app.util.i18n :as i18n :refer [tr]] [app.util.router :as rt] [beicon.core :as rx] + [potok.core :as ptk] [rumext.alpha :as mf])) (defn get-project-name diff --git a/frontend/src/app/main/ui/dashboard/team.cljs b/frontend/src/app/main/ui/dashboard/team.cljs index ce9e25beb..4c87aa4d1 100644 --- a/frontend/src/app/main/ui/dashboard/team.cljs +++ b/frontend/src/app/main/ui/dashboard/team.cljs @@ -10,7 +10,6 @@ [app.common.spec :as us] [app.config :as cfg] [app.main.data.dashboard :as dd] - [app.main.data.events :as ev] [app.main.data.messages :as dm] [app.main.data.modal :as modal] [app.main.refs :as refs] diff --git a/frontend/src/app/main/ui/settings/profile.cljs b/frontend/src/app/main/ui/settings/profile.cljs index cde019f22..eded1e265 100644 --- a/frontend/src/app/main/ui/settings/profile.cljs +++ b/frontend/src/app/main/ui/settings/profile.cljs @@ -8,7 +8,6 @@ (:require [app.common.spec :as us] [app.config :as cfg] - [app.main.data.events :as ev] [app.main.data.messages :as dm] [app.main.data.modal :as modal] [app.main.data.users :as du] diff --git a/frontend/src/app/main/ui/viewer/handoff/code.cljs b/frontend/src/app/main/ui/viewer/handoff/code.cljs index 84c4051f1..030a443b4 100644 --- a/frontend/src/app/main/ui/viewer/handoff/code.cljs +++ b/frontend/src/app/main/ui/viewer/handoff/code.cljs @@ -7,16 +7,16 @@ (ns app.main.ui.viewer.handoff.code (:require ["js-beautify" :as beautify] - [app.main.data.events :as ev] [app.common.geom.shapes :as gsh] + [app.main.data.events :as ev] + [app.main.store :as st] [app.main.ui.components.code-block :refer [code-block]] [app.main.ui.components.copy-button :refer [copy-button]] [app.main.ui.icons :as i] - [app.main.store :as st] - [potok.core :as ptk] [app.util.code-gen :as cg] [app.util.dom :as dom] [cuerdas.core :as str] + [potok.core :as ptk] [rumext.alpha :as mf])) (defn generate-markup-code [_type shapes]