Skip to content

Commit 956984f

Browse files
authored
cider-clojure-cli-jack-in-dependencies: always remove duplicates (#3155)
Prevents all sorts of issues, particularly as this area is changing as of lately.
1 parent 7afa8ac commit 956984f

File tree

2 files changed

+20
-6
lines changed

2 files changed

+20
-6
lines changed

cider.el

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -608,25 +608,30 @@ removed, LEIN-PLUGINS, LEIN-MIDDLEWARES and finally PARAMS."
608608
" -- "
609609
params))
610610

611+
(defun cider--dedupe-deps (deps)
612+
(cl-delete-duplicates deps :test 'equal))
613+
611614
(defun cider-clojure-cli-jack-in-dependencies (global-options _params dependencies)
612615
"Create Clojure tools.deps jack-in dependencies.
613616
Does so by concatenating DEPENDENCIES and GLOBAL-OPTIONS into a suitable
614617
`clojure` invocation. The main is placed in an inline alias :cider/nrepl
615618
so that if your aliases contain any mains, the cider/nrepl one will be the
616619
one used."
617-
(let* ((deps-string (string-join
618-
(seq-map (lambda (dep)
619-
(format "%s {:mvn/version \"%s\"}" (car dep) (cadr dep)))
620-
(append (cider--jack-in-required-dependencies) dependencies))
621-
" "))
620+
(let* ((all-deps (thread-last dependencies
621+
(append (cider--jack-in-required-dependencies))
622+
;; Duplicates are never OK since they would result in
623+
;; `java.lang.IllegalArgumentException: Duplicate key [...]`:
624+
(cider--dedupe-deps)
625+
(seq-map (lambda (dep)
626+
(format "%s {:mvn/version \"%s\"}" (car dep) (cadr dep))))))
622627
(middleware (mapconcat
623628
(apply-partially #'format "%s")
624629
(cider-jack-in-normalized-nrepl-middlewares)
625630
","))
626631
(main-opts (format "\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[%s]\"" middleware)))
627632
(format "%s-Sdeps '{:deps {%s} :aliases {:cider/nrepl {:main-opts [%s]}}}' -M%s:cider/nrepl"
628633
(if global-options (format "%s " global-options) "")
629-
deps-string
634+
(string-join all-deps " ")
630635
main-opts
631636
(if cider-clojure-cli-aliases
632637
;; remove exec-opts flags -A -M -T or -X from cider-clojure-cli-aliases

test/cider-tests.el

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,15 @@
425425
(spy-on 'cider-jack-in-resolve-command :and-return-value "clojure")
426426
(expect (plist-get (cider--update-jack-in-cmd nil) :jack-in-cmd)
427427
:to-equal expected)))
428+
(let ((expected (string-join '("-Sdeps '{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} "
429+
"cider/cider-nrepl {:mvn/version \"0.28.1\"}} "
430+
":aliases {:cider/nrepl {:main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\""
431+
" \"[cider.nrepl/cider-middleware]\"]}}}' -M:cider/nrepl")
432+
"")))
433+
(describe "should remove duplicates, yielding the same result"
434+
(expect (cider-clojure-cli-jack-in-dependencies nil nil '(("nrepl/nrepl" "0.9.0")
435+
("nrepl/nrepl" "0.9.0")))
436+
:to-equal expected)))
428437
(it "handles aliases correctly"
429438
(let ((expected (string-join '("-Sdeps '{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} "
430439
"cider/cider-nrepl {:mvn/version \"0.28.1\"}} "

0 commit comments

Comments
 (0)