Skip to content

Commit b230432

Browse files
raxod502expez
authored andcommitted
[Fix #391] Add option for disabling warnings (#392)
* Add `cljr-suppress-outside-project-warning' defcustom. * Use new `:predicate' support in `cider-jack-in-lein-plugins' and `cider-jack-in-nrepl-middlewares' to only inject when inside project context. (Bump CIDER dependency to 0.17.0.) * After REPL has started, if outside project context, display better warning than before (unless the new defcustom is set to non-nil).
1 parent 2648558 commit b230432

File tree

2 files changed

+35
-16
lines changed

2 files changed

+35
-16
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## Unreleased
44

55
- [#394](https://github.com/clojure-emacs/clj-refactor.el/issues/394) New config option `cljr-assume-language-context`: by default, when clj-refactor encounters an ambiguous context (clj vs cljs) it creates a popup asking user which context is meant. If this option is changed to "clj" or "cljs", clj-refactor will use that as the assumed context in such ambigous cases.
6+
- [#391](https://github.com/clojure-emacs/clj-refactor.el/issues/391) Prevent refactor-nrepl from being injected when starting a REPL outside a project, and add an option `cljr-suppress-outside-project-warning` to suppress the resultant warning.
67

78
## 2.3.1
89

clj-refactor.el

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
;; Benedek Fazekas <[email protected]>
99
;; Version: 2.4.0-SNAPSHOT
1010
;; Keywords: convenience, clojure, cider
11-
;; Package-Requires: ((emacs "24.4") (s "1.8.0") (seq "2.19") (yasnippet "0.6.1") (paredit "24") (multiple-cursors "1.2.2") (clojure-mode "5.6.1") (cider "0.15.0") (edn "1.1.2") (inflections "2.3") (hydra "0.13.2"))
11+
;; Package-Requires: ((emacs "24.4") (s "1.8.0") (seq "2.19") (yasnippet "0.6.1") (paredit "24") (multiple-cursors "1.2.2") (clojure-mode "5.6.1") (cider "0.17.0") (edn "1.1.2") (inflections "2.3") (hydra "0.13.2"))
1212

1313
;; This program is free software; you can redistribute it and/or
1414
;; modify it under the terms of the GNU General Public License
@@ -155,6 +155,13 @@ as can be."
155155
:group 'cljr
156156
:type 'boolean)
157157

158+
(defcustom cljr-suppress-no-project-warning nil
159+
"If t, no warning is printed when starting a REPL outside a project.
160+
By default, a warning is printed in this case since clj-refactor
161+
will not work as expected in such REPLs."
162+
:group 'cljr
163+
:type 'boolean)
164+
158165
(defcustom cljr-find-usages-ignore-analyzer-errors nil
159166
"DEPRECATED: use `cljr-ignore-analyzer-errors' instead.
160167
If t, `cljr-find-usages' ignores namespaces that cannot be analyzed.
@@ -786,6 +793,10 @@ A new record is created to define this constructor."
786793
car)
787794
""))
788795

796+
(defun cljr--inside-project-p ()
797+
"Return non-nil if `default-directory' is inside a Clojure project."
798+
(not (string-empty-p (cljr--project-dir))))
799+
789800
(defun cljr--project-file ()
790801
(let ((project-dir (cljr--project-dir)))
791802
(or (let ((file (expand-file-name "project.clj" project-dir)))
@@ -3142,15 +3153,21 @@ if REMOVE-PACKAGE_VERSION is t get rid of the (package: 20150828.1048) suffix."
31423153

31433154
(defun cljr--check-middleware-version ()
31443155
"Check whether clj-refactor and nrepl-refactor versions are the same"
3145-
(let ((refactor-nrepl-version (or (cljr--middleware-version)
3146-
"n/a")))
3147-
(unless (string-equal (downcase refactor-nrepl-version)
3148-
(downcase (cljr--version :remove-package-version)))
3149-
(cider-repl-emit-interactive-stderr
3150-
(format "WARNING: clj-refactor and refactor-nrepl are out of sync.
3156+
(if (cljr--inside-project-p)
3157+
(let ((refactor-nrepl-version (or (cljr--middleware-version)
3158+
"n/a")))
3159+
(unless (string-equal (downcase refactor-nrepl-version)
3160+
(downcase (cljr--version :remove-package-version)))
3161+
(cider-repl-emit-interactive-stderr
3162+
(format "WARNING: clj-refactor and refactor-nrepl are out of sync.
31513163
Their versions are %s and %s, respectively.
31523164
You can mute this warning by changing cljr-suppress-middleware-warnings."
3153-
(cljr--version) refactor-nrepl-version)))))
3165+
(cljr--version) refactor-nrepl-version))))
3166+
(unless cljr-suppress-no-project-warning
3167+
(cider-repl-emit-interactive-stderr
3168+
"WARNING: No Clojure project was detected. The
3169+
refactor-nrepl middleware was not enabled. (You can mute this
3170+
warning by customizing `cljr-suppress-no-project-warning'.)"))))
31543171

31553172
;;;###autoload
31563173
(defun cljr-version ()
@@ -3178,16 +3195,10 @@ You can mute this warning by changing cljr-suppress-middleware-warnings."
31783195
(cider-repl-emit-interactive-stderr
31793196
(format "WARNING: Can't determine Clojure version. The refactor-nrepl middleware requires clojure %s (or newer)" cljr-minimum-clojure-version))))
31803197

3181-
(defun cljr--check-project-context ()
3182-
(unless (cljr--project-dir)
3183-
(cider-repl-emit-interactive-stderr
3184-
(format "WARNING: No clojure project detected. The refactor-nrepl middleware won't work and has been disabled!"))))
3185-
31863198
(defun cljr--init-middleware ()
31873199
(unless cljr-suppress-middleware-warnings
31883200
(cljr--check-clojure-version)
31893201
(cljr--check-middleware-version))
3190-
(cljr--check-project-context)
31913202
;; Best effort; don't freak people out with errors
31923203
(ignore-errors
31933204
(when (cljr--middleware-version) ; check if middleware is running
@@ -4002,15 +4013,22 @@ See: https://github.com/clojure-emacs/clj-refactor.el/wiki/cljr-change-function-
40024013
(kill-buffer cljr--manual-intervention-buffer))
40034014
(pop-to-buffer cljr--change-signature-buffer))))
40044015

4016+
;;;###autoload
4017+
(defun cljr--inject-middleware-p (&rest _)
4018+
"Return non-nil if nREPL middleware should be injected."
4019+
(cljr--inside-project-p))
4020+
40054021
;;;###autoload
40064022
(defun cljr--inject-jack-in-dependencies ()
40074023
"Inject the REPL dependencies of clj-refactor at `cider-jack-in'.
40084024
If injecting the dependencies is not preferred set `cljr-inject-dependencies-at-jack-in' to nil."
40094025
(when (and cljr-inject-dependencies-at-jack-in
40104026
(boundp 'cider-jack-in-lein-plugins)
40114027
(boundp 'cider-jack-in-nrepl-middlewares))
4012-
(add-to-list 'cider-jack-in-lein-plugins `("refactor-nrepl" ,(cljr--version t)))
4013-
(add-to-list 'cider-jack-in-nrepl-middlewares "refactor-nrepl.middleware/wrap-refactor")))
4028+
(add-to-list 'cider-jack-in-lein-plugins `("refactor-nrepl" ,(cljr--version t)
4029+
:predicate cljr--inject-middleware-p))
4030+
(add-to-list 'cider-jack-in-nrepl-middlewares '("refactor-nrepl.middleware/wrap-refactor"
4031+
:predicate cljr--inject-middleware-p))))
40144032

40154033
;;;###autoload
40164034
(eval-after-load 'cider

0 commit comments

Comments
 (0)