summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--cider.el56
-rw-r--r--doc/up_and_running.md9
-rw-r--r--test/cider-tests.el38
4 files changed, 84 insertions, 20 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4588fd39..1f761a75 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,6 +13,7 @@
* Add new face `cider-reader-conditional-face` which is used to mark unused reader conditional expressions.
* [#1544](https://github.com/clojure-emacs/cider/issues/1544): Add a new defcustom `nrepl-use-ssh-fallback-for-remote-hosts` to control the behavior of `nrepl-connect` (and in turn that of `cider-connect`) for remote hosts.
* [#1910](https://github.com/clojure-emacs/cider/issues/1910): Add custom company-mode completion style to show fuzzy completions from Compliment.
+* Introduce `cider-*-global-options` for customizing options that are not related to tasks.
### Changes
diff --git a/cider.el b/cider.el
index 3adf9f17..273693f8 100644
--- a/cider.el
+++ b/cider.el
@@ -104,6 +104,12 @@ version from the CIDER package or library.")
:type 'string
:group 'cider)
+(defcustom cider-lein-global-options
+ nil
+ "Command global options used to execute Leiningen (e.g.: -o for offline)."
+ :type 'string
+ :group 'cider)
+
(defcustom cider-lein-parameters
"repl :headless"
"Params passed to Leiningen to start an nREPL server via `cider-jack-in'."
@@ -117,6 +123,13 @@ version from the CIDER package or library.")
:group 'cider
:package-version '(cider . "0.9.0"))
+(defcustom cider-boot-global-options
+ nil
+ "Command global options used to execute Boot (e.g.: -c for checkouts)."
+ :type 'string
+ :group 'cider
+ :package-version '(cider . "0.14.0"))
+
(defcustom cider-boot-parameters
"repl -s wait"
"Params passed to boot to start an nREPL server via `cider-jack-in'."
@@ -131,8 +144,15 @@ version from the CIDER package or library.")
:group 'cider
:package-version '(cider . "0.10.0"))
+(defcustom cider-gradle-global-options
+ "--no-daemon"
+ "Command line options used to execute Gradle (e.g.: -m for dry run)."
+ :type 'string
+ :group 'cider
+ :package-version '(cider . "0.14.0"))
+
(defcustom cider-gradle-parameters
- "--no-daemon clojureRepl"
+ "clojureRepl"
"Params passed to gradle to start an nREPL server via `cider-jack-in'."
:type 'string
:group 'cider
@@ -172,7 +192,7 @@ When set to nil `cider-jack-in' will fail."
(const 'warn)
(const :tag "never" nil))
:group 'cider
- :package-version '(cider . "0.14.0"))
+ :package-version '(cider . "0.15.0"))
(defcustom cider-known-endpoints nil
"A list of connection endpoints where each endpoint is a list.
@@ -242,6 +262,14 @@ found for the PROJECT-TYPE"
("gradle" (cider--gradle-resolve-command))
(_ (user-error "Unsupported project type `%s'" project-type))))
+(defun cider-jack-in-global-options (project-type)
+ "Determine the command line options for `cider-jack-in' for the PROJECT-TYPE."
+ (pcase project-type
+ ("lein" cider-lein-global-options)
+ ("boot" cider-boot-global-options)
+ ("gradle" cider-gradle-global-options)
+ (_ (user-error "Unsupported project type `%s'" project-type))))
+
(defun cider-jack-in-params (project-type)
"Determine the commands params for `cider-jack-in' for the PROJECT-TYPE."
(pcase project-type
@@ -304,7 +332,7 @@ string is quoted for passing as argument to an inferior shell."
(defun cider-boot-command-prefix (dependencies)
"Return a list of boot artifact strings created from DEPENDENCIES."
(concat (mapconcat #'cider--list-as-boot-artifact dependencies " ")
- " "))
+ (when (not (seq-empty-p dependencies)) " ")))
(defun cider-boot-repl-task-params (params middlewares)
(if (string-match "\\_<repl\\_>" params)
@@ -317,8 +345,10 @@ string is quoted for passing as argument to an inferior shell."
(message "Warning: `cider-boot-parameters' doesn't call the \"repl\" task, jacking-in might not work")
params))
-(defun cider-boot-jack-in-dependencies (params dependencies plugins middlewares)
- (concat (cider-boot-command-prefix (append dependencies plugins))
+(defun cider-boot-jack-in-dependencies (global-opts params dependencies plugins middlewares)
+ (concat global-opts
+ (when (not (seq-empty-p global-opts)) " ")
+ (cider-boot-command-prefix (append dependencies plugins))
(cider-boot-repl-task-params params middlewares)))
(defun cider--lein-artifact-exclusions (exclusions)
@@ -334,8 +364,10 @@ of EXCLUSIONS can be provided as well. The returned
string is quoted for passing as argument to an inferior shell."
(shell-quote-argument (format "[%s %S%s]" (car list) (cadr list) (cider--lein-artifact-exclusions exclusions))))
-(defun cider-lein-jack-in-dependencies (params dependencies dependencies-exclusions lein-plugins)
+(defun cider-lein-jack-in-dependencies (global-opts params dependencies dependencies-exclusions lein-plugins)
(concat
+ global-opts
+ (when (not (seq-empty-p global-opts)) " ")
(mapconcat #'identity
(append (seq-map (lambda (dep)
(let ((exclusions (cadr (assoc (car dep) dependencies-exclusions))))
@@ -368,7 +400,7 @@ See also `cider-jack-in-auto-inject-clojure'."
dependencies))
dependencies))
-(defun cider-inject-jack-in-dependencies (params project-type)
+(defun cider-inject-jack-in-dependencies (global-opts params project-type)
"Return PARAMS with injected REPL dependencies.
These are set in `cider-jack-in-dependencies', `cider-jack-in-lein-plugins' and
`cider-jack-in-nrepl-middlewares' are injected from the CLI according to
@@ -377,18 +409,23 @@ boot script for supporting cider with its nREPL middleware and
dependencies."
(pcase project-type
("lein" (cider-lein-jack-in-dependencies
+ global-opts
params
(cider-add-clojure-dependencies-maybe
cider-jack-in-dependencies)
cider-jack-in-dependencies-exclusions
cider-jack-in-lein-plugins))
("boot" (cider-boot-jack-in-dependencies
+ global-opts
params
(cider-add-clojure-dependencies-maybe
cider-jack-in-dependencies)
cider-jack-in-lein-plugins
cider-jack-in-nrepl-middlewares))
- ("gradle" params)
+ ("gradle" (concat
+ global-opts
+ (when (not (seq-empty-p global-opts)) " ")
+ params))
(_ (error "Unsupported project type `%s'" project-type))))
@@ -509,6 +546,7 @@ own buffer."
(let* ((project-type (cider-project-type))
(command (cider-jack-in-command project-type))
(command-resolved (cider-jack-in-resolve-command project-type))
+ (command-global-opts (cider-jack-in-global-options project-type))
(command-params (cider-jack-in-params project-type)))
(if command-resolved
(let* ((project (when prompt-project
@@ -521,7 +559,7 @@ own buffer."
command-params)
command-params))
(params (if cider-inject-dependencies-at-jack-in
- (cider-inject-jack-in-dependencies params project-type)
+ (cider-inject-jack-in-dependencies command-global-opts params project-type)
params))
(cmd (format "%s %s" command-resolved params)))
diff --git a/doc/up_and_running.md b/doc/up_and_running.md
index 8c89faa0..b455331d 100644
--- a/doc/up_and_running.md
+++ b/doc/up_and_running.md
@@ -38,6 +38,15 @@ in it.
In Clojure(Script) buffers the command `cider-jack-in` is bound to <kbd>C-c M-j</kbd>.
+For further customizing the command line used for `cider-jack-in`, you can
+change the following (all string options):
+
+ * `cider-[TOOL]-global-options`: these are passed to the command directly, in
+ first position (e.g. `-o` to `lein` enables offline mode).
+ * `cider-[TOOL]-parameters`: these are usually tasks names and their parameters
+ (e.g.: `dev` for launching boot's dev task instead of the standard `repl -s
+ wait`).
+
## Connect to a running nREPL server
You can go to your project's directory in a terminal and type there
diff --git a/test/cider-tests.el b/test/cider-tests.el
index 59ad2d47..aa829cd5 100644
--- a/test/cider-tests.el
+++ b/test/cider-tests.el
@@ -84,25 +84,25 @@
(setq-local cider-jack-in-dependencies-exclusions '()))
(it "can inject dependencies in a lein project"
- (expect (cider-inject-jack-in-dependencies "repl :headless" "lein")
- :to-equal"update-in :dependencies conj \\[org.clojure/tools.nrepl\\ \\\"0.2.12\\\"\\] -- update-in :plugins conj \\[cider/cider-nrepl\\ \\\"0.10.0-SNAPSHOT\\\"\\] -- repl :headless"))
+ (expect (cider-inject-jack-in-dependencies "" "repl :headless" "lein")
+ :to-equal "update-in :dependencies conj \\[org.clojure/tools.nrepl\\ \\\"0.2.12\\\"\\] -- update-in :plugins conj \\[cider/cider-nrepl\\ \\\"0.10.0-SNAPSHOT\\\"\\] -- repl :headless"))
(it "can inject dependencies in a lein project with an exclusion"
(setq-local cider-jack-in-dependencies-exclusions '(("org.clojure/tools.nrepl" ("org.clojure/clojure"))))
- (expect (cider-inject-jack-in-dependencies "repl :headless" "lein")
- :to-equal"update-in :dependencies conj \\[org.clojure/tools.nrepl\\ \\\"0.2.12\\\"\\ \\:exclusions\\ \\[org.clojure/clojure\\]\\] -- update-in :plugins conj \\[cider/cider-nrepl\\ \\\"0.10.0-SNAPSHOT\\\"\\] -- repl :headless"))
+ (expect (cider-inject-jack-in-dependencies "" "repl :headless" "lein")
+ :to-equal "update-in :dependencies conj \\[org.clojure/tools.nrepl\\ \\\"0.2.12\\\"\\ \\:exclusions\\ \\[org.clojure/clojure\\]\\] -- update-in :plugins conj \\[cider/cider-nrepl\\ \\\"0.10.0-SNAPSHOT\\\"\\] -- repl :headless"))
(it "can inject dependencies in a lein project with multiple exclusions"
(setq-local cider-jack-in-dependencies-exclusions '(("org.clojure/tools.nrepl" ("org.clojure/clojure" "foo.bar/baz"))))
- (expect (cider-inject-jack-in-dependencies "repl :headless" "lein")
- :to-equal"update-in :dependencies conj \\[org.clojure/tools.nrepl\\ \\\"0.2.12\\\"\\ \\:exclusions\\ \\[org.clojure/clojure\\ foo.bar/baz\\]\\] -- update-in :plugins conj \\[cider/cider-nrepl\\ \\\"0.10.0-SNAPSHOT\\\"\\] -- repl :headless"))
+ (expect (cider-inject-jack-in-dependencies "" "repl :headless" "lein")
+ :to-equal "update-in :dependencies conj \\[org.clojure/tools.nrepl\\ \\\"0.2.12\\\"\\ \\:exclusions\\ \\[org.clojure/clojure\\ foo.bar/baz\\]\\] -- update-in :plugins conj \\[cider/cider-nrepl\\ \\\"0.10.0-SNAPSHOT\\\"\\] -- repl :headless"))
(it "can inject dependencies in a boot project"
- (expect (cider-inject-jack-in-dependencies "repl -s wait" "boot")
+ (expect (cider-inject-jack-in-dependencies "" "repl -s wait" "boot")
:to-equal "-d org.clojure/tools.nrepl\\:0.2.12 -d cider/cider-nrepl\\:0.10.0-SNAPSHOT repl -m cider.nrepl/cider-middleware -s wait"))
(it "can inject dependencies in a gradle project"
- (expect (cider-inject-jack-in-dependencies "--no-daemon clojureRepl" "gradle")
+ (expect (cider-inject-jack-in-dependencies "" "--no-daemon clojureRepl" "gradle")
:to-equal "--no-daemon clojureRepl")))
(describe "when there are multiple dependencies"
@@ -111,12 +111,28 @@
(setq-local cider-jack-in-nrepl-middlewares '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware"))
(setq-local cider-jack-in-dependencies-exclusions '()))
(it "can inject dependencies in a lein project"
- (expect (cider-inject-jack-in-dependencies "repl :headless" "lein")
+ (expect (cider-inject-jack-in-dependencies "" "repl :headless" "lein")
:to-equal "update-in :dependencies conj \\[org.clojure/tools.nrepl\\ \\\"0.2.12\\\"\\] -- update-in :plugins conj \\[refactor-nrepl\\ \\\"2.0.0\\\"\\] -- update-in :plugins conj \\[cider/cider-nrepl\\ \\\"0.11.0\\\"\\] -- repl :headless"))
(it "can inject dependencies in a boot project"
- (expect (cider-inject-jack-in-dependencies "repl -s wait" "boot")
- :to-equal "-d org.clojure/tools.nrepl\\:0.2.12 -d refactor-nrepl\\:2.0.0 -d cider/cider-nrepl\\:0.11.0 repl -m refactor-nrepl.middleware/wrap-refactor -m cider.nrepl/cider-middleware -s wait"))))
+ (expect (cider-inject-jack-in-dependencies "" "repl -s wait" "boot")
+ :to-equal "-d org.clojure/tools.nrepl\\:0.2.12 -d refactor-nrepl\\:2.0.0 -d cider/cider-nrepl\\:0.11.0 repl -m refactor-nrepl.middleware/wrap-refactor -m cider.nrepl/cider-middleware -s wait")))
+
+ (describe "when there are global options"
+ (before-each
+ (setq-local cider-jack-in-dependencies '(("org.clojure/tools.nrepl" "0.2.12")))
+ (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware"))
+ (setq-local cider-jack-in-lein-plugins '(("cider/cider-nrepl" "0.11.0")))
+ (setq-local cider-jack-in-dependencies-exclusions '()))
+ (it "can concat in a lein project"
+ (expect (cider-inject-jack-in-dependencies "-o -U" "repl :headless" "lein")
+ :to-equal "-o -U update-in :dependencies conj \\[org.clojure/tools.nrepl\\ \\\"0.2.12\\\"\\] -- update-in :plugins conj \\[cider/cider-nrepl\\ \\\"0.11.0\\\"\\] -- repl :headless"))
+ (it "can concat in a boot project"
+ (expect (cider-inject-jack-in-dependencies "-C -o" "repl -s wait" "boot")
+ :to-equal "-C -o -d org.clojure/tools.nrepl\\:0.2.12 -d cider/cider-nrepl\\:0.11.0 repl -m cider.nrepl/cider-middleware -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"))))
(describe "cider-jack-in-auto-inject-clojure"
(it "injects `cider-minimum-clojure-version' when `cider-jack-in-auto-inject-clojure' is set to minimal"