emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/cider 773cc972c7 1/4: Support injecting dependencies into


From: ELPA Syncer
Subject: [nongnu] elpa/cider 773cc972c7 1/4: Support injecting dependencies into Gradle
Date: Sat, 30 Jul 2022 23:58:07 -0400 (EDT)

branch: elpa/cider
commit 773cc972c7c302caa0fbeeb605e88c1b0ef92bfd
Author: Andrew Oberstar <andrew.oberstar@outlook.com>
Commit: Andrew Oberstar <andrew.oberstar@outlook.com>

    Support injecting dependencies into Gradle
    
    Gradle doesn't have any native support, but as of 0.7.0-alpha.6,
    Clojurephant supports a Gradle property to list dependencies to be
    injected into the nREPL server.
    
    This property is backwards compatible for users on older Clojurephant
    versions, since Gradle ignores unknown properties on the command line,
    falling back to no injection.
    
    The middleware arguments have been supported in Clojurephant since
    0.4.0-beta.4 in 2018, so I think it should be safe to start passing
      those in.
---
 CHANGELOG.md        |  1 +
 cider.el            | 51 ++++++++++++++++++++++++++++++++++++++++++++++++---
 test/cider-tests.el | 42 ++++++++++++++++++++++++++++++++++++++----
 3 files changed, 87 insertions(+), 7 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 88d73f8c6d..3855285918 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@
 - [#3226](https://github.com/clojure-emacs/cider/pull/3226): Populate 
completions metadata, making it possible to change the style of completion via 
`completion-category-override` or `completion-category-defaults`.
 - [#2946](https://github.com/clojure-emacs/cider/issues/2946): Add custom var 
`cider-merge-sessions` to allow combining sessions in two different ways: 
Setting `cider-merge-sessions` to `'host` will merge all sessions associated 
with the same host within a project. Setting it to `'project` will combine all 
sessions of a project irrespective of their host.
 - Support Gradle jack-in via the Gradle wrapper, instead of just a globally 
installed `gradle` on the `PATH`.
+- Gradle projects can now inject dependencies and middleware as with other 
build tools (dependency injection requires 
[Clojurephant](https://github.com/clojurephant/clojurephant) 0.7.0-alpha.6 or 
higher)
 
 ## Changes
 
diff --git a/cider.el b/cider.el
index 2f65c98d10..0c64251b7a 100644
--- a/cider.el
+++ b/cider.el
@@ -577,6 +577,49 @@ and MIDDLEWARES.  PARAMS and MIDDLEWARES are passed on to
           (cider-boot-dependencies (append 
(cider--jack-in-required-dependencies) dependencies))
           (cider-boot-middleware-task params middlewares)))
 
+(defun cider--gradle-dependency-notation (dependency)
+  "Returns Gradle's GAV dependency syntax.
+For a \"group/artifact\" \"version\") DEPENDENCY list
+return as group:artifact:version notation."
+  (let ((group-artifact (replace-regexp-in-string "/" ":" (car dependency)))
+        (version (cadr dependency)))
+    (format "%s:%s" group-artifact version)))
+
+(defun cider--gradle-jack-in-property (dependencies)
+  "Returns Clojurephant's dependency jack-in property.
+For DEPENDENCIES, translates to Gradle's dependency notation
+using `cider--gradle-dependency-notation`.''"
+  (if (seq-empty-p dependencies)
+      ""
+    (shell-quote-argument
+     (concat "-Pdev.clojurephant.jack-in.nrepl="
+             (mapconcat #'cider--gradle-dependency-notation dependencies 
",")))))
+
+(defun cider--gradle-middleware-params (middlewares)
+  "Returns Gradle-formatted middleware params.
+Given a list of MIDDLEWARES symbols, this returns
+the Gradle parameters expected by Clojurephant's
+ClojureNRepl task."
+  (mapconcat (lambda (middleware)
+               (shell-quote-argument (concat "--middleware=" middleware)))
+             middlewares
+             " "))
+
+(defun cider-gradle-jack-in-dependencies (global-opts params dependencies 
middlewares)
+  "Create gradle jack in dependencies.
+Does so by concatenating GLOBAL-OPTS, DEPENDENCIES,
+and MIDDLEWARES.  GLOBAL-OPTS and PARAMS are taken as-is.
+DEPENDENCIES are translated into Gradle's typical
+group:artifact:version notation and MIDDLEWARES are
+prepared as arguments to Clojurephant's ClojureNRepl task."
+  (concat global-opts
+          (unless (seq-empty-p global-opts) " ")
+          (cider--gradle-jack-in-property (append 
(cider--jack-in-required-dependencies) dependencies))
+          " "
+          params
+          (unless (seq-empty-p params) " ")
+          (cider--gradle-middleware-params middlewares)))
+
 (defun cider--lein-artifact-exclusions (exclusions)
   "Return an exclusions vector described by the elements of EXCLUSIONS."
   (if exclusions
@@ -717,10 +760,12 @@ dependencies."
                    params
                    (cider-add-clojure-dependencies-maybe
                     cider-jack-in-dependencies)))
-    ('gradle (concat
+    ('gradle (cider-gradle-jack-in-dependencies
               global-opts
-              (unless (seq-empty-p global-opts) " ")
-              params))
+              params
+              (cider-add-clojure-dependencies-maybe
+               cider-jack-in-dependencies)
+              (cider-jack-in-normalized-nrepl-middlewares)))
     (_ (error "Unsupported project type `%S'" project-type))))
 
 
diff --git a/test/cider-tests.el b/test/cider-tests.el
index f661741897..7886dae606 100644
--- a/test/cider-tests.el
+++ b/test/cider-tests.el
@@ -105,6 +105,34 @@
       (expect (cider-project-type) :to-equal cider-jack-in-default))))
 
 ;;; cider-jack-in tests
+(describe "cider--gradle-dependency-notation"
+  (it "returns a GAV when given a two-element list"
+    (expect (cider--gradle-dependency-notation '("cider/piggieback" "0.5.3"))
+            :to-equal "cider:piggieback:0.5.3")))
+
+(describe "cider--gradle-jack-in-property"
+  (it "returns an empty string if no dependencies passed"
+    (expect (cider--gradle-jack-in-property nil)
+            :to-equal ""))
+  (it "returns a Gradle property if one dependency passed"
+    (expect (cider--gradle-jack-in-property '(("abc/def" "1.2.3")))
+            :to-equal (shell-quote-argument 
"-Pdev.clojurephant.jack-in.nrepl=abc:def:1.2.3")))
+  (it "returns a comma-separated Gradle property if multiple dependencies 
passed"
+    (expect (cider--gradle-jack-in-property '(("abc/def" "1.2.3")
+                                              ("ghi/jkl" "4.5.6")
+                                              ("mno/pqr" "7.8.9")))
+            :to-equal (shell-quote-argument 
"-Pdev.clojurephant.jack-in.nrepl=abc:def:1.2.3,ghi:jkl:4.5.6,mno:pqr:7.8.9"))))
+
+(describe "cider--gradle-middleware-params"
+  (it "returns an empty string if no middlewares are passed"
+    (expect (cider--gradle-middleware-params nil)
+            :to-equal ""))
+  (it "returns a single middleware param if one passed"
+    (expect (cider--gradle-middleware-params '("my-ns/my-middleware"))
+            :to-equal  "--middleware\\=my-ns/my-middleware"))
+  (it "returrns multiple middleware params, space-separated, if multiple 
passed"
+    (expect (cider--gradle-middleware-params '("my-ns/my-middleware" 
"other-ns/other-middleware"))
+            :to-equal "--middleware\\=my-ns/my-middleware 
--middleware\\=other-ns/other-middleware")))
 
 (describe "cider-inject-jack-in-dependencies"
   :var (cider-jack-in-dependencies cider-jack-in-nrepl-middlewares 
cider-jack-in-lein-plugins cider-jack-in-dependencies-exclusions)
@@ -167,8 +195,11 @@
                          " repl -s wait")))
 
     (it "can inject dependencies in a gradle project"
-      (expect (cider-inject-jack-in-dependencies "" "--no-daemon clojureRepl" 
'gradle)
-              :to-equal "--no-daemon clojureRepl")))
+      (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 
'gradle)
+              :to-equal (concat "--no-daemon "
+                                (shell-quote-argument 
"-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.28.4")
+                                " :clojureRepl "
+                                (shell-quote-argument 
"--middleware=cider.nrepl/cider-middleware")))))
 
   (describe "when there are multiple dependencies"
     (before-each
@@ -235,8 +266,11 @@
                                 (shell-quote-argument 
"cider.nrepl/cider-middleware")
                                 " repl -s wait")))
     (it "can concat in a gradle project"
-      (expect (cider-inject-jack-in-dependencies "-m" "--no-daemon 
clojureRepl" 'gradle)
-              :to-equal "-m --no-daemon clojureRepl")))
+      (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 
'gradle)
+              :to-equal (concat "--no-daemon "
+                                (shell-quote-argument 
"-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.28.4")
+                                " :clojureRepl "
+                                (shell-quote-argument 
"--middleware=cider.nrepl/cider-middleware")))))
 
   (describe "when there are predicates"
     :var (plugins-predicate middlewares-predicate)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]