Skip to content

Commit 58103c1

Browse files
NoahTheDukemartinklepsch
authored andcommitted
add clj-kondo hook for parallel let plet
1 parent 658c429 commit 58103c1

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

resources/clj-kondo.exports/funcool/promesa/config.edn

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
promesa.core/->> clojure.core/->>
33
promesa.core/as-> clojure.core/as->
44
promesa.core/let clojure.core/let
5-
promesa.core/plet clojure.core/let
5+
promesa.core/plet hooks.promesa/plet
66
promesa.core/loop clojure.core/loop
77
promesa.core/recur clojure.core/recur
88
promesa.core/with-redefs clojure.core/with-redefs
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
(ns hooks.promesa
2+
(:require [clj-kondo.hooks-api :as api]))
3+
4+
(defn plet
5+
;; this effectively rewrites the let to `(let [[bind1 bind2] [(expr-1) (expr-2)] ,,,)
6+
;; making referring to other binding syms produce an error
7+
;; thanks to @NoahBogart on Slack for this
8+
[{:keys [:node]}]
9+
(let [[_plet binds & body] (:children node)
10+
new-bind-syms (api/vector-node (take-nth 2 (:children binds)))
11+
new-bind-exprs (api/vector-node (take-nth 2 (rest (:children binds))))
12+
new-node (api/list-node
13+
(list* (api/token-node 'clojure.core/let)
14+
(api/vector-node [new-bind-syms new-bind-exprs])
15+
body))]
16+
{:node new-node}))

0 commit comments

Comments
 (0)