From 6e0defa7321d07f705614c84aa9e6a53239006b8 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Mon, 10 Jun 2024 19:04:04 +0300 Subject: [PATCH 001/149] Reset the docs version --- doc/antora.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/antora.yml b/doc/antora.yml index 5a9304229..fd9dacd59 100644 --- a/doc/antora.yml +++ b/doc/antora.yml @@ -2,6 +2,6 @@ name: cider title: CIDER # We always provide version without patch here (e.g. 1.1), # as patch versions should not appear in the docs. -version: 1.15 +version: ~ nav: - modules/ROOT/nav.adoc From 63a6b0b2ff161981df769c2e1509f5e6dc769d92 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Mon, 10 Jun 2024 19:06:01 +0300 Subject: [PATCH 002/149] Bump the injected nREPL version --- CHANGELOG.md | 1 + cider.el | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 809dc9d09..dc28970f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ - [#3691](https://github.com/clojure-emacs/cider/pull/3691): Deprecate `cider-sync-request:inspect-set-*` functions in favor of generic `inspect-refresh` op. - Bump the injected `cider-nrepl` to [0.49.0](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0490-2024-06-02). +- Bump the injected nREPL version to 1.2.0. ### Bugs fixed diff --git a/cider.el b/cider.el index d0ba96641..227edc9e9 100644 --- a/cider.el +++ b/cider.el @@ -542,7 +542,7 @@ Throws an error if PROJECT-TYPE is unknown." "List of dependencies where elements are lists of artifact name and version.") (put 'cider-jack-in-dependencies 'risky-local-variable t) -(defcustom cider-injected-nrepl-version "1.2.0-beta2" +(defcustom cider-injected-nrepl-version "1.2.0" "The version of nREPL injected on jack-in. We inject the newest known version of nREPL just in case your version of Boot or Leiningen is bundling an older one." From 528d0916bb77977c737b72bb5c5919c53da0d736 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Mon, 10 Jun 2024 19:41:37 +0300 Subject: [PATCH 003/149] Add the standard changelog sections for next release --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc28970f1..130722bfb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## master (unreleased) +### New features + +### Changes + +### Bugs fixed + ## 1.15.0 (2024-06-10) ### New features From f5928ebe49f26fb16f607251c1f59496a1a79eda Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Mon, 10 Jun 2024 19:56:40 +0300 Subject: [PATCH 004/149] Fix a typo --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 130722bfb..50373ce2e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ ### New features -- [#3692](https://github.com/clojure-emacs/cider/pull/3692): Add ability to switch view modes in the ispector (bound to `v`). +- [#3692](https://github.com/clojure-emacs/cider/pull/3692): Add ability to switch view modes in the inspector (bound to `v`). - [#3693](https://github.com/clojure-emacs/cider/pull/3693): Add `cider-enable-nrepl-jvmti-agent` defcustom to enable loading native nREPL JVMTI agent which restores thread stop ability on Java 21+. ### Changes From 3ab27097424c08a381d3046f09dca8be8bb444b6 Mon Sep 17 00:00:00 2001 From: Kato Muso Date: Tue, 11 Jun 2024 04:39:33 +0000 Subject: [PATCH 005/149] [Fix #3615] Show progress when evaluating files using `cider-load-all-files` (#3714) Show progress in echo area while recursively evaluating files in directory using cider-load-all-files. As I've noticed that messages from evaluations keep popping up, so it's very hard to see progress message, I've used inhibit-message around cider-load-file. One possible downside of this is that error messages are not displayed as well (though it will be really hard to notice some error message while messages pop up one after the other). Also, I've tweaked the prompt of cider-load-all-files because it might not be clear how files are loaded as the word "beneath" is ambiguous (it may mean one level of depth which is not the case). --- CHANGELOG.md | 2 ++ cider-eval.el | 12 +++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 50373ce2e..7de93bb2b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ ### Changes +- [#3714](https://github.com/clojure-emacs/cider/pull/3714): Show progress when evaluating files using `cider-load-all-files`. + ### Bugs fixed ## 1.15.0 (2024-06-10) diff --git a/cider-eval.el b/cider-eval.el index 7325abde7..0a422fe43 100644 --- a/cider-eval.el +++ b/cider-eval.el @@ -1839,9 +1839,15 @@ all ns aliases and var mappings from the namespace before reloading it." Useful when the running nREPL on remote host. When UNDEF-ALL is non-nil or called with \\[universal-argument], removes all ns aliases and var mappings from the namespaces being reloaded" - (interactive "DLoad files beneath directory: \nP") - (mapcar (lambda (file) (cider-load-file file undef-all)) - (directory-files-recursively directory "\\.clj[cs]?$"))) + (interactive "DRecursively load files in directory: \nP") + (let* ((files (directory-files-recursively directory "\\.clj[cs]?$")) + (reporter (make-progress-reporter "Loading files" 0 (length files)))) + (seq-do-indexed (lambda (file idx) + (let ((inhibit-message t)) + (cider-load-file file undef-all)) + (progress-reporter-update reporter (1+ idx) file)) + files) + (progress-reporter-done reporter))) (defalias 'cider-eval-file #'cider-load-file "A convenience alias as some people are confused by the load-* names.") From 738f393ec1264d7fbb269580964b7229cc7eb063 Mon Sep 17 00:00:00 2001 From: Kato Muso Date: Sun, 9 Jun 2024 20:45:39 +0000 Subject: [PATCH 006/149] Change the way cider-docstring--format performs formatting --- cider-docstring.el | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/cider-docstring.el b/cider-docstring.el index 007bb0a8b..965ead993 100644 --- a/cider-docstring.el +++ b/cider-docstring.el @@ -149,13 +149,10 @@ Prioritize rendering as much as possible while staying within `cider-docstring-m (defun cider-docstring--format (string) "Return a nicely formatted STRING to be displayed to the user." - (let* ((string (replace-regexp-in-string "\\. " ".\n\n" string)) ;; improve the formatting of e.g. clojure.core/reduce - (string (mapconcat (lambda (line) - ;; Remove spaces at the beginning of each line, as it is common in many clojure.core defns: - (replace-regexp-in-string "\\`[ ]+" "" line)) - (split-string string "\n") - "\n"))) - string)) + ;; As this is a literal docstring from the source code and + ;; there are two spaces at the beginning of lines in docstrings, + ;; we remove them to make it align nicely when it is displayed. + (replace-regexp-in-string "\n " "\n" string)) (provide 'cider-docstring) ;;; cider-docstring.el ends here From 39ed6711580a5bf2b4ecf8ee6d09b2c452672f95 Mon Sep 17 00:00:00 2001 From: Kato Muso Date: Sun, 9 Jun 2024 20:50:28 +0000 Subject: [PATCH 007/149] Refactor cider-clojuredocs to use cider-docstring--format --- cider-clojuredocs.el | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/cider-clojuredocs.el b/cider-clojuredocs.el index 85ebca8de..bfe8800de 100644 --- a/cider-clojuredocs.el +++ b/cider-clojuredocs.el @@ -25,16 +25,16 @@ ;;; Code: +(require 'subr-x) +(require 'url-vars) + (require 'cider-client) (require 'cider-common) -(require 'subr-x) +(require 'cider-docstring) (require 'cider-popup) (require 'cider-util) - (require 'nrepl-dict) -(require 'url-vars) - (defconst cider-clojuredocs-url "https://clojuredocs.org/") (defconst cider-clojuredocs-buffer "*cider-clojuredocs*") @@ -120,10 +120,7 @@ opposite of what that option dictates." (insert (format " [%s]\n" arglist))) (newline)) (when-let* ((doc (nrepl-dict-get dict "doc")) - ;; As this is a literal docstring from the source code and - ;; there are two spaces at the beginning of lines in docstrings, - ;; we remove them to make it align nicely in ClojureDocs buffer. - (doc (replace-regexp-in-string "\n " "\n" doc))) + (doc (cider-docstring--format doc))) (insert doc "\n") (newline))) From 451f72e07d21beef30800a5ed6cacc7a6d737401 Mon Sep 17 00:00:00 2001 From: Kato Muso Date: Mon, 10 Jun 2024 23:45:48 +0000 Subject: [PATCH 008/149] Tweak docstring of cider-docstring--format and remove redundant comment --- cider-docstring.el | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/cider-docstring.el b/cider-docstring.el index 965ead993..65742169e 100644 --- a/cider-docstring.el +++ b/cider-docstring.el @@ -148,10 +148,14 @@ Prioritize rendering as much as possible while staying within `cider-docstring-m (concat string (when (> (length lines) max-lines) "...")))) (defun cider-docstring--format (string) - "Return a nicely formatted STRING to be displayed to the user." - ;; As this is a literal docstring from the source code and - ;; there are two spaces at the beginning of lines in docstrings, - ;; we remove them to make it align nicely when it is displayed. + "Return a nicely formatted STRING to be displayed to the user. + +We need to format the docstring before displaying it to the user +because it is obtained from the source code. For example, this means +that it usually has two spaces before each line used for indentation +\(see https://guide.clojure.style/#docstring-indentation). While displaying +the docstring to the user, we usually want to control indentation and +other aspects of the presentation, so we format it before displaying." (replace-regexp-in-string "\n " "\n" string)) (provide 'cider-docstring) From 54641395b606657c60c55ed4238e0d700d2b5ca4 Mon Sep 17 00:00:00 2001 From: yuhan0 Date: Tue, 11 Jun 2024 07:50:18 +0800 Subject: [PATCH 009/149] Improve performance of nrepl-dict-get Avoid full traversal of dict in 2-argument call --- nrepl-dict.el | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/nrepl-dict.el b/nrepl-dict.el index f1846d473..dadf41f7f 100644 --- a/nrepl-dict.el +++ b/nrepl-dict.el @@ -66,9 +66,12 @@ If dict is nil, return nil. If DEFAULT not provided, and KEY not in DICT, return nil. If DICT is not an nREPL dict object, an error is thrown." (when dict (if (nrepl-dict-p dict) - (if (nrepl-dict-contains dict key) - (lax-plist-get (cdr dict) key) - default) + ;; Note: The structure of the following expression avoids the + ;; expensive containment check in nearly all cases, see #3717 + (or (lax-plist-get (cdr dict) key) + (when default + (and (not (nrepl-dict-contains dict key)) + default))) (error "Not an nREPL dict object: %s" dict)))) (defun nrepl-dict-put (dict key value) From 4b1710595f88c3fed5f29d69af96a7444dae480b Mon Sep 17 00:00:00 2001 From: yuhan0 Date: Tue, 11 Jun 2024 07:50:36 +0800 Subject: [PATCH 010/149] Deprecate 3-argument call to nrepl-dict-get Calling the function with 3 arguments will continue to work, but raise a warning during byte compilation. --- nrepl-dict.el | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/nrepl-dict.el b/nrepl-dict.el index dadf41f7f..a408d1362 100644 --- a/nrepl-dict.el +++ b/nrepl-dict.el @@ -61,14 +61,20 @@ whose car is KEY. Comparison is done with `equal'." (member key (nrepl-dict-keys dict))) (defun nrepl-dict-get (dict key &optional default) - "Get from DICT value associated with KEY, optional DEFAULT if KEY not in DICT. -If dict is nil, return nil. If DEFAULT not provided, and KEY not in DICT, -return nil. If DICT is not an nREPL dict object, an error is thrown." + "Get from DICT value associated with KEY. +If DICT is nil, return nil. +If DICT is not an nREPL dict object, an error is thrown. + +If KEY is not in DICT, return DEFAULT (if provided). +Note that the use of DEFAULT is deprecated and will be +removed in a future release." + (declare (advertised-calling-convention (dict key) "1.16")) (when dict (if (nrepl-dict-p dict) ;; Note: The structure of the following expression avoids the ;; expensive containment check in nearly all cases, see #3717 (or (lax-plist-get (cdr dict) key) + ;; TODO: remove DEFAULT argument and the following clause (when default (and (not (nrepl-dict-contains dict key)) default))) From 9db0ceecc19e77c2c461f2889a53d944da4eccfb Mon Sep 17 00:00:00 2001 From: yuhan0 Date: Tue, 11 Jun 2024 07:37:37 +0800 Subject: [PATCH 011/149] Add details to nrepl-dict commentary --- nrepl-dict.el | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/nrepl-dict.el b/nrepl-dict.el index a408d1362..0b56f2ab4 100644 --- a/nrepl-dict.el +++ b/nrepl-dict.el @@ -28,7 +28,8 @@ ;;; Commentary: ;; ;; Provides functions to interact with and create `nrepl-dict's. These are -;; simply plists with an extra element at the head. +;; simply plists with an extra element at the head, and using `equal' for +;; comparison of string keys. ;;; Code: (require 'cl-lib) @@ -199,7 +200,7 @@ If NO-JOIN is given, return the first non nil dict." (t `(,dict1 ,dict2))))) -;;; Dbind +;;; Destructuring-bind of string keys (defmacro nrepl-dbind-response (response keys &rest body) "Destructure an nREPL RESPONSE dict. Bind the value of the provided KEYS and execute BODY." From abe972ad9f256972940d503a64b1012d21561146 Mon Sep 17 00:00:00 2001 From: yuhan0 Date: Tue, 11 Jun 2024 07:40:48 +0800 Subject: [PATCH 012/149] Inline nrepl-dict predicates --- nrepl-dict.el | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/nrepl-dict.el b/nrepl-dict.el index 0b56f2ab4..d8daeb5cf 100644 --- a/nrepl-dict.el +++ b/nrepl-dict.el @@ -45,12 +45,11 @@ (maphash (lambda (k v) (nrepl-dict-put dict k v)) hash) dict)) -(defun nrepl-dict-p (object) +(defsubst nrepl-dict-p (object) "Return t if OBJECT is an nREPL dict." - (and (listp object) - (eq (car object) 'dict))) + (eq (car-safe object) 'dict)) -(defun nrepl-dict-empty-p (dict) +(defsubst nrepl-dict-empty-p (dict) "Return t if nREPL dict DICT is empty." (null (cdr dict))) From 105da319b09a436552f1b3c6194cbbc833017dd2 Mon Sep 17 00:00:00 2001 From: yuhan0 Date: Tue, 11 Jun 2024 08:05:13 +0800 Subject: [PATCH 013/149] Modify changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7de93bb2b..06efd7fc5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ ### Changes - [#3714](https://github.com/clojure-emacs/cider/pull/3714): Show progress when evaluating files using `cider-load-all-files`. +- [#3713](https://github.com/clojure-emacs/cider/pull/3713): Optimize `nrepl-dict-get` and deprecate its 3-argument arity. ### Bugs fixed From 20f9a8f97cd01bc1bc8d064e653863ccc17d6d8b Mon Sep 17 00:00:00 2001 From: Naoya Yamashita Date: Sat, 29 Jun 2024 15:24:19 +0900 Subject: [PATCH 014/149] Remove duplicate keybinding (#3719) This keybinding was first introduced in the commit[1]. There are two lines of keybindings to `C-c C-q`, probably due to a simple mistake. [1]: 6a9bc1cc05a4e393b31c5dfb79c70179fb3233f4 --- CHANGELOG.md | 1 + cider-connection.el | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 06efd7fc5..ef5e653db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - [#3714](https://github.com/clojure-emacs/cider/pull/3714): Show progress when evaluating files using `cider-load-all-files`. - [#3713](https://github.com/clojure-emacs/cider/pull/3713): Optimize `nrepl-dict-get` and deprecate its 3-argument arity. +- [#3719](https://github.com/clojure-emacs/cider/pull/3719): Clean duplicate define-key ### Bugs fixed diff --git a/cider-connection.el b/cider-connection.el index a72e014e5..35a8f2f04 100644 --- a/cider-connection.el +++ b/cider-connection.el @@ -631,7 +631,6 @@ REPL defaults to the current REPL." (define-key map (kbd "j d") #'cider-describe-connection) (define-key map (kbd "j i") #'cider-describe-connection) (define-key map (kbd "C-c C-q") #'cider-quit) - (define-key map (kbd "C-c C-q") #'cider-quit) (define-key map (kbd "C-c C-r") #'cider-restart) (define-key map (kbd "C-c M-r") #'cider-restart) (define-key map (kbd "C-c C-d") #'cider-describe-connection) From d2c87b749d7280c4ea7335214648563f1f8f1b08 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Sun, 30 Jun 2024 17:42:01 +0300 Subject: [PATCH 015/149] Use cider-nrepl 0.49.1 --- CHANGELOG.md | 2 + cider.el | 2 +- dev/docker-sample-project/project.clj | 2 +- dev/tramp-sample-project/project.clj | 2 +- .../ROOT/pages/basics/middleware_setup.adoc | 12 ++--- .../ROOT/pages/basics/up_and_running.adoc | 4 +- doc/modules/ROOT/pages/cljs/shadow-cljs.adoc | 2 +- .../ROOT/pages/cljs/up_and_running.adoc | 4 +- test/cider-tests.el | 44 +++++++++---------- 9 files changed, 38 insertions(+), 36 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef5e653db..27a137859 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ - [#3714](https://github.com/clojure-emacs/cider/pull/3714): Show progress when evaluating files using `cider-load-all-files`. - [#3713](https://github.com/clojure-emacs/cider/pull/3713): Optimize `nrepl-dict-get` and deprecate its 3-argument arity. - [#3719](https://github.com/clojure-emacs/cider/pull/3719): Clean duplicate define-key +- Bump the injected `cider-nrepl` to [0.49.1](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0491-2024-06-30). + - Reduces the minimal supported Clojure version to 1.10.0 (from 1.10.3). ### Bugs fixed diff --git a/cider.el b/cider.el index 227edc9e9..ab216d7b2 100644 --- a/cider.el +++ b/cider.el @@ -573,7 +573,7 @@ the artifact.") Used when `cider-jack-in-auto-inject-clojure' is set to `latest'.") -(defconst cider-required-middleware-version "0.49.0" +(defconst cider-required-middleware-version "0.49.1" "The CIDER nREPL version that's known to work properly with CIDER.") (defcustom cider-injected-middleware-version cider-required-middleware-version diff --git a/dev/docker-sample-project/project.clj b/dev/docker-sample-project/project.clj index 01dc35412..ef10c499f 100644 --- a/dev/docker-sample-project/project.clj +++ b/dev/docker-sample-project/project.clj @@ -2,4 +2,4 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.49.0"]]) + :plugins [[cider/cider-nrepl "0.49.1"]]) diff --git a/dev/tramp-sample-project/project.clj b/dev/tramp-sample-project/project.clj index edf9464f5..9e4f59935 100644 --- a/dev/tramp-sample-project/project.clj +++ b/dev/tramp-sample-project/project.clj @@ -2,5 +2,5 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.49.0"] + :plugins [[cider/cider-nrepl "0.49.1"] [refactor-nrepl "3.9.0"]]) diff --git a/doc/modules/ROOT/pages/basics/middleware_setup.adoc b/doc/modules/ROOT/pages/basics/middleware_setup.adoc index 1898d017a..dfb365475 100644 --- a/doc/modules/ROOT/pages/basics/middleware_setup.adoc +++ b/doc/modules/ROOT/pages/basics/middleware_setup.adoc @@ -32,14 +32,14 @@ Use the convenient plugin for defaults, either in your project's [source,clojure] ---- -:plugins [[cider/cider-nrepl "0.49.0"]] +:plugins [[cider/cider-nrepl "0.49.1"]] ---- A minimal `profiles.clj` for CIDER would be: [source,clojure] ---- -{:repl {:plugins [[cider/cider-nrepl "0.49.0"]]}} +{:repl {:plugins [[cider/cider-nrepl "0.49.1"]]}} ---- WARNING: Be careful not to place this in the `:user` profile, as this way CIDER's @@ -59,7 +59,7 @@ all of their projects using a `~/.boot/profile.boot` file like so: (require 'boot.repl) (swap! boot.repl/*default-dependencies* - concat '[[cider/cider-nrepl "0.49.0"]]) + concat '[[cider/cider-nrepl "0.49.1"]]) (swap! boot.repl/*default-middleware* conj 'cider.nrepl/cider-middleware) @@ -76,11 +76,11 @@ run `cider-connect` or `cider-connect-cljs`. [source,clojure] ---- - :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.49.0"}} + :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.49.1"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware]"]} :cider-cljs {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.339"} - cider/cider-nrepl {:mvn/version "0.49.0"} + cider/cider-nrepl {:mvn/version "0.49.1"} cider/piggieback {:mvn/version "0.5.3"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware,cider.piggieback/wrap-cljs-repl]"]} @@ -99,7 +99,7 @@ NOTE: Make sure you're using https://github.com/clojurephant/clojurephant[Clojur ---- dependencies { devImplementation 'nrepl:nrepl:0.9.0' - devImplementation 'cider:cider-nrepl:0.49.0' + devImplementation 'cider:cider-nrepl:0.49.1' } tasks.named('clojureRepl') { diff --git a/doc/modules/ROOT/pages/basics/up_and_running.adoc b/doc/modules/ROOT/pages/basics/up_and_running.adoc index 0baa0666e..8b5f679e7 100644 --- a/doc/modules/ROOT/pages/basics/up_and_running.adoc +++ b/doc/modules/ROOT/pages/basics/up_and_running.adoc @@ -73,7 +73,7 @@ simple - CIDER simply passes the extra dependencies and nREPL configuration to your build tool in the command it runs to start the nREPL server. Here's how this looks for `tools.deps`: - $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.1.2"} cider/cider-nrepl {:mvn/version "0.49.0"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' + $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.2.0"} cider/cider-nrepl {:mvn/version "0.49.1"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' TIP: If you don't want `cider-jack-in` to inject dependencies automatically, set `cider-inject-dependencies-at-jack-in` to `nil`. Note that you'll have to setup @@ -350,7 +350,7 @@ It is also possible for plain `clj`, although the command is somewhat longer: [source,sh] ---- -$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.49.0"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" +$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.49.1"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" ---- Alternatively, you can start nREPL either manually or using the facilities diff --git a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc index b676e9883..46ab79c05 100644 --- a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc +++ b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc @@ -62,7 +62,7 @@ And connect to it with `cider-connect`. ...For that to work, `shadow-cljs.edn` contents like the following are assumed: ```clj - :dependencies [[cider/cider-nrepl "0.49.0"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) + :dependencies [[cider/cider-nrepl "0.49.1"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) [refactor-nrepl/refactor-nrepl "3.9.0"]] ;; refactor-nrepl is optional :nrepl {:middleware [cider.nrepl/cider-middleware ;; it's advisable to explicitly add this middleware. It's automatically added by shadow-cljs (if available in the classpath), unless `:nrepl {:cider false}` diff --git a/doc/modules/ROOT/pages/cljs/up_and_running.adoc b/doc/modules/ROOT/pages/cljs/up_and_running.adoc index a7cdf1eca..7c94014e9 100644 --- a/doc/modules/ROOT/pages/cljs/up_and_running.adoc +++ b/doc/modules/ROOT/pages/cljs/up_and_running.adoc @@ -60,8 +60,8 @@ or in `build.gradle`: [source, groovy] ---- dependencies { - devImplementation 'nrepl:nrepl:1.1.2' - devImplementation 'cider:cider-nrepl:0.49.0' + devImplementation 'nrepl:nrepl:1.2.0' + devImplementation 'cider:cider-nrepl:0.49.1' devImplementation 'cider:cider-piggieback:0.5.3' } diff --git a/test/cider-tests.el b/test/cider-tests.el index b61669491..d332a392d 100644 --- a/test/cider-tests.el +++ b/test/cider-tests.el @@ -144,7 +144,7 @@ (describe "when there is a single dependency" (before-each (setq-local cider-injected-nrepl-version "0.9.0") - (setq-local cider-injected-middleware-version "0.49.0") + (setq-local cider-injected-middleware-version "0.49.1") (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t) @@ -155,7 +155,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.49.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -169,7 +169,7 @@ "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.49.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -182,7 +182,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure foo.bar/baz]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.49.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -196,7 +196,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.49.0") + (shell-quote-argument "cider/cider-nrepl:0.49.1") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -206,7 +206,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.49.0") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.49.1") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -223,7 +223,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.49.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -237,7 +237,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.49.0") + (shell-quote-argument "cider/cider-nrepl:0.49.1") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -259,7 +259,7 @@ :to-equal (concat "-o -U update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.49.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -271,7 +271,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.49.0") + (shell-quote-argument "cider/cider-nrepl:0.49.1") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -280,7 +280,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.49.0") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.49.1") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -295,14 +295,14 @@ (setq-local cider-jack-in-nrepl-middlewares '(("refactor-nrepl.middleware/wrap-refactor" :predicate middlewares-predicate) "cider.nrepl/cider-middleware" ("another/middleware")))) (it "includes plugins whose predicates return true" (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.49.0")))) + :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.49.1")))) (it "includes middlewares whose predicates return true" (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware" "another/middleware"))) (it "ignores plugins whose predicates return false" (spy-on 'plugins-predicate :and-return-value nil) (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("cider/cider-nrepl" "0.49.0"))) + :to-equal '(("cider/cider-nrepl" "0.49.1"))) (spy-on 'middlewares-predicate :and-return-value nil) (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("cider.nrepl/cider-middleware" "another/middleware"))) @@ -331,7 +331,7 @@ :and-return-value '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware")) (spy-on 'cider-jack-in-normalized-lein-plugins :and-return-value '(("refactor-nrepl" "2.0.0") - ("cider/cider-nrepl" "0.49.0") + ("cider/cider-nrepl" "0.49.1") ("mx.cider/lein-enrich-classpath" "1.19.3"))) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t)) @@ -342,7 +342,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.49.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -361,7 +361,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.49.0") + (shell-quote-argument "cider/cider-nrepl:0.49.1") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -456,7 +456,7 @@ (setq-local cider-jack-in-dependencies nil) (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.49.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.49.1\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) @@ -471,7 +471,7 @@ (it "allows specifying custom aliases with `cider-clojure-cli-aliases`" (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.49.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.49.1\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:dev:test:cider/nrepl") ""))) (setq-local cider-jack-in-dependencies nil) @@ -489,7 +489,7 @@ (it (format "should remove duplicates, yielding the same result (for %S command invocation)" command) ;; repeat the same test for PowerShell too (let ((expected (string-join `("-Sdeps " - ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.49.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" + ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.49.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" command) " -M:dev:test:cider/nrepl") ""))) @@ -499,7 +499,7 @@ :to-equal expected)))) (it "handles aliases correctly" (let ((expected (string-join `("-Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.49.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.49.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -527,7 +527,7 @@ :to-equal expected))))) (it "allows for global options" (let ((expected (string-join `("-J-Xverify:none -Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.49.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.49.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -538,7 +538,7 @@ (setq-local cider-jack-in-dependencies '(("org.clojure/tools.deps" (("git/sha" . "6ae2b6f71773de7549d7f22759e8b09fec27f0d9") ("git/url" . "https://github.com/clojure/tools.deps/"))))) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.49.0\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.49.1\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) From 810337cee931d9f14aa16550a74516f8337a47f3 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Sun, 30 Jun 2024 17:38:27 +0300 Subject: [PATCH 016/149] Release 1.15.1 --- cider.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cider.el b/cider.el index ab216d7b2..a3d4d61df 100644 --- a/cider.el +++ b/cider.el @@ -11,7 +11,7 @@ ;; Steve Purcell ;; Maintainer: Bozhidar Batsov ;; URL: https://www.github.com/clojure-emacs/cider -;; Version: 1.15.0 +;; Version: 1.15.1 ;; Package-Requires: ((emacs "26") (clojure-mode "5.19") (parseedn "1.2.1") (queue "0.2") (spinner "1.7") (seq "2.22") (sesman "0.3.2") (transient "0.4.1")) ;; Keywords: languages, clojure, cider @@ -93,7 +93,7 @@ (require 'sesman) (require 'package) -(defconst cider-version "1.15.0" +(defconst cider-version "1.15.1" "The current version of CIDER.") (defconst cider-codename "Cogne" From a6ccb6d9c66ca06353479e8e5f10eb2f7a61c19d Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Tue, 2 Jul 2024 19:36:48 +0300 Subject: [PATCH 017/149] Tweak the changelog --- CHANGELOG.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 27a137859..11ba72139 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,9 +6,15 @@ ### Changes +### Bugs fixed + +## 1.15.1 (2024-07-01) + +### Changes + - [#3714](https://github.com/clojure-emacs/cider/pull/3714): Show progress when evaluating files using `cider-load-all-files`. - [#3713](https://github.com/clojure-emacs/cider/pull/3713): Optimize `nrepl-dict-get` and deprecate its 3-argument arity. -- [#3719](https://github.com/clojure-emacs/cider/pull/3719): Clean duplicate define-key +- [#3719](https://github.com/clojure-emacs/cider/pull/3719): Remove duplicated keybinding. - Bump the injected `cider-nrepl` to [0.49.1](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0491-2024-06-30). - Reduces the minimal supported Clojure version to 1.10.0 (from 1.10.3). From 8a7fb48c49007b9e3861ea842fa8283f51b95c06 Mon Sep 17 00:00:00 2001 From: Naoya Yamashita Date: Fri, 5 Jul 2024 08:32:10 +0900 Subject: [PATCH 018/149] `cider-docstring--format`: nil-safe (#3722) * call cider-docstring--format after checking argument * use when-let for DRY * add CHANGELOG entry --- CHANGELOG.md | 1 + cider-eldoc.el | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 11ba72139..1a4a3a0ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ - [#3719](https://github.com/clojure-emacs/cider/pull/3719): Remove duplicated keybinding. - Bump the injected `cider-nrepl` to [0.49.1](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0491-2024-06-30). - Reduces the minimal supported Clojure version to 1.10.0 (from 1.10.3). +- [#3722](https://github.com/clojure-emacs/cider/pull/3722): Call `cider-docstring--format` after checking argument ### Bugs fixed diff --git a/cider-eldoc.el b/cider-eldoc.el index 4c094b06c..1137046bb 100644 --- a/cider-eldoc.el +++ b/cider-eldoc.el @@ -218,9 +218,9 @@ information." (symbol (lax-plist-get eldoc-info "symbol")) (docstring (or (cider--render-docstring-first-sentence eldoc-info) (cider--render-docstring eldoc-info) - (cider-docstring--trim - (cider-docstring--format - (lax-plist-get eldoc-info "docstring"))))) + (when-let (docstring (lax-plist-get eldoc-info "docstring")) + (cider-docstring--trim + (cider-docstring--format docstring))))) ;; if it's a single class (and not multiple class candidates), that's it (maybe-class (car (lax-plist-get eldoc-info "class"))) (formatted-var (or (when maybe-class From 5dc096aa98908924d0809e64dc80c57372f3c1ea Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Fri, 5 Jul 2024 09:23:23 +0300 Subject: [PATCH 019/149] Move a changelog entry where it belongs --- CHANGELOG.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a4a3a0ed..ed5baa009 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ ### Bugs fixed +- [#3722](https://github.com/clojure-emacs/cider/pull/3722): Call `cider-docstring--format` after checking argument. + ## 1.15.1 (2024-07-01) ### Changes @@ -17,9 +19,6 @@ - [#3719](https://github.com/clojure-emacs/cider/pull/3719): Remove duplicated keybinding. - Bump the injected `cider-nrepl` to [0.49.1](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0491-2024-06-30). - Reduces the minimal supported Clojure version to 1.10.0 (from 1.10.3). -- [#3722](https://github.com/clojure-emacs/cider/pull/3722): Call `cider-docstring--format` after checking argument - -### Bugs fixed ## 1.15.0 (2024-06-10) From 964a17fdc6fc79477319cc3642e178831ec7b325 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Fri, 5 Jul 2024 10:28:52 +0300 Subject: [PATCH 020/149] Tweak wording --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed5baa009..14a7c5afe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ ### Bugs fixed -- [#3722](https://github.com/clojure-emacs/cider/pull/3722): Call `cider-docstring--format` after checking argument. +- [#3722](https://github.com/clojure-emacs/cider/pull/3722): Call `cider-docstring--format` after checking argument is not nil. ## 1.15.1 (2024-07-01) From 42608a1369760b6e36a86f0a63daa876c8b24e9e Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Thu, 11 Jul 2024 16:19:59 +0300 Subject: [PATCH 021/149] Bump the injected nREPL version --- cider.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cider.el b/cider.el index a3d4d61df..ce5d88b87 100644 --- a/cider.el +++ b/cider.el @@ -542,7 +542,7 @@ Throws an error if PROJECT-TYPE is unknown." "List of dependencies where elements are lists of artifact name and version.") (put 'cider-jack-in-dependencies 'risky-local-variable t) -(defcustom cider-injected-nrepl-version "1.2.0" +(defcustom cider-injected-nrepl-version "1.3.0-beta1" "The version of nREPL injected on jack-in. We inject the newest known version of nREPL just in case your version of Boot or Leiningen is bundling an older one." From fa0e50eef60efcdf1b43268d7662bafb44a14b9e Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Thu, 18 Jul 2024 12:13:40 +0300 Subject: [PATCH 022/149] Bump the injected nREPL version to 1.3.0-beta2 --- cider.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cider.el b/cider.el index ce5d88b87..e126d7008 100644 --- a/cider.el +++ b/cider.el @@ -542,7 +542,7 @@ Throws an error if PROJECT-TYPE is unknown." "List of dependencies where elements are lists of artifact name and version.") (put 'cider-jack-in-dependencies 'risky-local-variable t) -(defcustom cider-injected-nrepl-version "1.3.0-beta1" +(defcustom cider-injected-nrepl-version "1.3.0-beta2" "The version of nREPL injected on jack-in. We inject the newest known version of nREPL just in case your version of Boot or Leiningen is bundling an older one." From fe98f8c1c9cf49c71640b51c7d66c05e77895048 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Thu, 18 Jul 2024 12:14:17 +0300 Subject: [PATCH 023/149] Update the changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 14a7c5afe..8b14c96b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ ### Changes +- Bump the injected nREPL version to 1.3. + ### Bugs fixed - [#3722](https://github.com/clojure-emacs/cider/pull/3722): Call `cider-docstring--format` after checking argument is not nil. From c698e1454cb416ad55c739961f9df514da9556f0 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Fri, 19 Jul 2024 23:55:03 +0300 Subject: [PATCH 024/149] Use cider-nrepl 0.49.2 --- CHANGELOG.md | 1 + cider.el | 2 +- dev/docker-sample-project/project.clj | 2 +- dev/tramp-sample-project/project.clj | 2 +- .../ROOT/pages/basics/middleware_setup.adoc | 12 ++--- .../ROOT/pages/basics/up_and_running.adoc | 4 +- doc/modules/ROOT/pages/cljs/shadow-cljs.adoc | 2 +- .../ROOT/pages/cljs/up_and_running.adoc | 2 +- test/cider-tests.el | 44 +++++++++---------- 9 files changed, 36 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b14c96b6..0dfaa718c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ ### Changes - Bump the injected nREPL version to 1.3. +- Bump the injected `cider-nrepl` to [0.49.2](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0492-2024-07-19). ### Bugs fixed diff --git a/cider.el b/cider.el index e126d7008..3d68d150c 100644 --- a/cider.el +++ b/cider.el @@ -573,7 +573,7 @@ the artifact.") Used when `cider-jack-in-auto-inject-clojure' is set to `latest'.") -(defconst cider-required-middleware-version "0.49.1" +(defconst cider-required-middleware-version "0.49.2" "The CIDER nREPL version that's known to work properly with CIDER.") (defcustom cider-injected-middleware-version cider-required-middleware-version diff --git a/dev/docker-sample-project/project.clj b/dev/docker-sample-project/project.clj index ef10c499f..bd3b61744 100644 --- a/dev/docker-sample-project/project.clj +++ b/dev/docker-sample-project/project.clj @@ -2,4 +2,4 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.49.1"]]) + :plugins [[cider/cider-nrepl "0.49.2"]]) diff --git a/dev/tramp-sample-project/project.clj b/dev/tramp-sample-project/project.clj index 9e4f59935..5c7ca4b62 100644 --- a/dev/tramp-sample-project/project.clj +++ b/dev/tramp-sample-project/project.clj @@ -2,5 +2,5 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.49.1"] + :plugins [[cider/cider-nrepl "0.49.2"] [refactor-nrepl "3.9.0"]]) diff --git a/doc/modules/ROOT/pages/basics/middleware_setup.adoc b/doc/modules/ROOT/pages/basics/middleware_setup.adoc index dfb365475..67e41c1fb 100644 --- a/doc/modules/ROOT/pages/basics/middleware_setup.adoc +++ b/doc/modules/ROOT/pages/basics/middleware_setup.adoc @@ -32,14 +32,14 @@ Use the convenient plugin for defaults, either in your project's [source,clojure] ---- -:plugins [[cider/cider-nrepl "0.49.1"]] +:plugins [[cider/cider-nrepl "0.49.2"]] ---- A minimal `profiles.clj` for CIDER would be: [source,clojure] ---- -{:repl {:plugins [[cider/cider-nrepl "0.49.1"]]}} +{:repl {:plugins [[cider/cider-nrepl "0.49.2"]]}} ---- WARNING: Be careful not to place this in the `:user` profile, as this way CIDER's @@ -59,7 +59,7 @@ all of their projects using a `~/.boot/profile.boot` file like so: (require 'boot.repl) (swap! boot.repl/*default-dependencies* - concat '[[cider/cider-nrepl "0.49.1"]]) + concat '[[cider/cider-nrepl "0.49.2"]]) (swap! boot.repl/*default-middleware* conj 'cider.nrepl/cider-middleware) @@ -76,11 +76,11 @@ run `cider-connect` or `cider-connect-cljs`. [source,clojure] ---- - :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.49.1"}} + :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.49.2"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware]"]} :cider-cljs {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.339"} - cider/cider-nrepl {:mvn/version "0.49.1"} + cider/cider-nrepl {:mvn/version "0.49.2"} cider/piggieback {:mvn/version "0.5.3"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware,cider.piggieback/wrap-cljs-repl]"]} @@ -99,7 +99,7 @@ NOTE: Make sure you're using https://github.com/clojurephant/clojurephant[Clojur ---- dependencies { devImplementation 'nrepl:nrepl:0.9.0' - devImplementation 'cider:cider-nrepl:0.49.1' + devImplementation 'cider:cider-nrepl:0.49.2' } tasks.named('clojureRepl') { diff --git a/doc/modules/ROOT/pages/basics/up_and_running.adoc b/doc/modules/ROOT/pages/basics/up_and_running.adoc index 8b5f679e7..a0b4bf088 100644 --- a/doc/modules/ROOT/pages/basics/up_and_running.adoc +++ b/doc/modules/ROOT/pages/basics/up_and_running.adoc @@ -73,7 +73,7 @@ simple - CIDER simply passes the extra dependencies and nREPL configuration to your build tool in the command it runs to start the nREPL server. Here's how this looks for `tools.deps`: - $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.2.0"} cider/cider-nrepl {:mvn/version "0.49.1"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' + $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.2.0"} cider/cider-nrepl {:mvn/version "0.49.2"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' TIP: If you don't want `cider-jack-in` to inject dependencies automatically, set `cider-inject-dependencies-at-jack-in` to `nil`. Note that you'll have to setup @@ -350,7 +350,7 @@ It is also possible for plain `clj`, although the command is somewhat longer: [source,sh] ---- -$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.49.1"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" +$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.49.2"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" ---- Alternatively, you can start nREPL either manually or using the facilities diff --git a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc index 46ab79c05..cd6bdd5f8 100644 --- a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc +++ b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc @@ -62,7 +62,7 @@ And connect to it with `cider-connect`. ...For that to work, `shadow-cljs.edn` contents like the following are assumed: ```clj - :dependencies [[cider/cider-nrepl "0.49.1"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) + :dependencies [[cider/cider-nrepl "0.49.2"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) [refactor-nrepl/refactor-nrepl "3.9.0"]] ;; refactor-nrepl is optional :nrepl {:middleware [cider.nrepl/cider-middleware ;; it's advisable to explicitly add this middleware. It's automatically added by shadow-cljs (if available in the classpath), unless `:nrepl {:cider false}` diff --git a/doc/modules/ROOT/pages/cljs/up_and_running.adoc b/doc/modules/ROOT/pages/cljs/up_and_running.adoc index 7c94014e9..2b06bd929 100644 --- a/doc/modules/ROOT/pages/cljs/up_and_running.adoc +++ b/doc/modules/ROOT/pages/cljs/up_and_running.adoc @@ -61,7 +61,7 @@ or in `build.gradle`: ---- dependencies { devImplementation 'nrepl:nrepl:1.2.0' - devImplementation 'cider:cider-nrepl:0.49.1' + devImplementation 'cider:cider-nrepl:0.49.2' devImplementation 'cider:cider-piggieback:0.5.3' } diff --git a/test/cider-tests.el b/test/cider-tests.el index d332a392d..66731117a 100644 --- a/test/cider-tests.el +++ b/test/cider-tests.el @@ -144,7 +144,7 @@ (describe "when there is a single dependency" (before-each (setq-local cider-injected-nrepl-version "0.9.0") - (setq-local cider-injected-middleware-version "0.49.1") + (setq-local cider-injected-middleware-version "0.49.2") (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t) @@ -155,7 +155,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.49.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -169,7 +169,7 @@ "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.49.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -182,7 +182,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure foo.bar/baz]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.49.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -196,7 +196,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.49.1") + (shell-quote-argument "cider/cider-nrepl:0.49.2") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -206,7 +206,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.49.1") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.49.2") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -223,7 +223,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.49.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -237,7 +237,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.49.1") + (shell-quote-argument "cider/cider-nrepl:0.49.2") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -259,7 +259,7 @@ :to-equal (concat "-o -U update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.49.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -271,7 +271,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.49.1") + (shell-quote-argument "cider/cider-nrepl:0.49.2") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -280,7 +280,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.49.1") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.49.2") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -295,14 +295,14 @@ (setq-local cider-jack-in-nrepl-middlewares '(("refactor-nrepl.middleware/wrap-refactor" :predicate middlewares-predicate) "cider.nrepl/cider-middleware" ("another/middleware")))) (it "includes plugins whose predicates return true" (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.49.1")))) + :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.49.2")))) (it "includes middlewares whose predicates return true" (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware" "another/middleware"))) (it "ignores plugins whose predicates return false" (spy-on 'plugins-predicate :and-return-value nil) (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("cider/cider-nrepl" "0.49.1"))) + :to-equal '(("cider/cider-nrepl" "0.49.2"))) (spy-on 'middlewares-predicate :and-return-value nil) (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("cider.nrepl/cider-middleware" "another/middleware"))) @@ -331,7 +331,7 @@ :and-return-value '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware")) (spy-on 'cider-jack-in-normalized-lein-plugins :and-return-value '(("refactor-nrepl" "2.0.0") - ("cider/cider-nrepl" "0.49.1") + ("cider/cider-nrepl" "0.49.2") ("mx.cider/lein-enrich-classpath" "1.19.3"))) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t)) @@ -342,7 +342,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.49.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -361,7 +361,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.49.1") + (shell-quote-argument "cider/cider-nrepl:0.49.2") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -456,7 +456,7 @@ (setq-local cider-jack-in-dependencies nil) (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.49.1\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.49.2\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) @@ -471,7 +471,7 @@ (it "allows specifying custom aliases with `cider-clojure-cli-aliases`" (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.49.1\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.49.2\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:dev:test:cider/nrepl") ""))) (setq-local cider-jack-in-dependencies nil) @@ -489,7 +489,7 @@ (it (format "should remove duplicates, yielding the same result (for %S command invocation)" command) ;; repeat the same test for PowerShell too (let ((expected (string-join `("-Sdeps " - ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.49.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" + ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.49.2\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" command) " -M:dev:test:cider/nrepl") ""))) @@ -499,7 +499,7 @@ :to-equal expected)))) (it "handles aliases correctly" (let ((expected (string-join `("-Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.49.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.49.2\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -527,7 +527,7 @@ :to-equal expected))))) (it "allows for global options" (let ((expected (string-join `("-J-Xverify:none -Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.49.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.49.2\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -538,7 +538,7 @@ (setq-local cider-jack-in-dependencies '(("org.clojure/tools.deps" (("git/sha" . "6ae2b6f71773de7549d7f22759e8b09fec27f0d9") ("git/url" . "https://github.com/clojure/tools.deps/"))))) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.49.1\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.49.2\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) From 81401810b55dd7a1e935c3f4b05a70734d28758a Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Tue, 23 Jul 2024 10:38:04 +0300 Subject: [PATCH 025/149] Bump the injected nREPL to 1.3.0-beta3 --- cider.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cider.el b/cider.el index 3d68d150c..f307c232a 100644 --- a/cider.el +++ b/cider.el @@ -542,7 +542,7 @@ Throws an error if PROJECT-TYPE is unknown." "List of dependencies where elements are lists of artifact name and version.") (put 'cider-jack-in-dependencies 'risky-local-variable t) -(defcustom cider-injected-nrepl-version "1.3.0-beta2" +(defcustom cider-injected-nrepl-version "1.3.0-beta3" "The version of nREPL injected on jack-in. We inject the newest known version of nREPL just in case your version of Boot or Leiningen is bundling an older one." From 5c1bac297341232d167a6d2beb79c39472597527 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Sat, 3 Aug 2024 11:22:36 +0300 Subject: [PATCH 026/149] Bump the injected nREPL to 1.3.0-beta4 --- cider.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cider.el b/cider.el index f307c232a..b1a1ada80 100644 --- a/cider.el +++ b/cider.el @@ -542,7 +542,7 @@ Throws an error if PROJECT-TYPE is unknown." "List of dependencies where elements are lists of artifact name and version.") (put 'cider-jack-in-dependencies 'risky-local-variable t) -(defcustom cider-injected-nrepl-version "1.3.0-beta3" +(defcustom cider-injected-nrepl-version "1.3.0-beta4" "The version of nREPL injected on jack-in. We inject the newest known version of nREPL just in case your version of Boot or Leiningen is bundling an older one." From 2ca9059a736822161301fdb2d0ad82f045da076f Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Tue, 13 Aug 2024 17:46:53 +0300 Subject: [PATCH 027/149] Bump the injected version of nREPL to 1.3.0 --- cider.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cider.el b/cider.el index b1a1ada80..f67bbdd54 100644 --- a/cider.el +++ b/cider.el @@ -542,7 +542,7 @@ Throws an error if PROJECT-TYPE is unknown." "List of dependencies where elements are lists of artifact name and version.") (put 'cider-jack-in-dependencies 'risky-local-variable t) -(defcustom cider-injected-nrepl-version "1.3.0-beta4" +(defcustom cider-injected-nrepl-version "1.3.0" "The version of nREPL injected on jack-in. We inject the newest known version of nREPL just in case your version of Boot or Leiningen is bundling an older one." From 3c8af8b6787245e5dfd6dbb550a0ce8de1df4dcb Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Tue, 13 Aug 2024 21:06:45 +0300 Subject: [PATCH 028/149] Use cider-nrepl 0.49.3 --- CHANGELOG.md | 2 +- cider.el | 2 +- dev/docker-sample-project/project.clj | 2 +- dev/tramp-sample-project/project.clj | 2 +- .../ROOT/pages/basics/middleware_setup.adoc | 12 ++--- .../ROOT/pages/basics/up_and_running.adoc | 4 +- doc/modules/ROOT/pages/cljs/shadow-cljs.adoc | 2 +- .../ROOT/pages/cljs/up_and_running.adoc | 2 +- test/cider-tests.el | 44 +++++++++---------- 9 files changed, 36 insertions(+), 36 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0dfaa718c..f50e79da8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ ### Changes - Bump the injected nREPL version to 1.3. -- Bump the injected `cider-nrepl` to [0.49.2](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0492-2024-07-19). +- Bump the injected `cider-nrepl` to [0.49.3](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0493-2024-08-13). ### Bugs fixed diff --git a/cider.el b/cider.el index f67bbdd54..8e285a7db 100644 --- a/cider.el +++ b/cider.el @@ -573,7 +573,7 @@ the artifact.") Used when `cider-jack-in-auto-inject-clojure' is set to `latest'.") -(defconst cider-required-middleware-version "0.49.2" +(defconst cider-required-middleware-version "0.49.3" "The CIDER nREPL version that's known to work properly with CIDER.") (defcustom cider-injected-middleware-version cider-required-middleware-version diff --git a/dev/docker-sample-project/project.clj b/dev/docker-sample-project/project.clj index bd3b61744..5ede67451 100644 --- a/dev/docker-sample-project/project.clj +++ b/dev/docker-sample-project/project.clj @@ -2,4 +2,4 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.49.2"]]) + :plugins [[cider/cider-nrepl "0.49.3"]]) diff --git a/dev/tramp-sample-project/project.clj b/dev/tramp-sample-project/project.clj index 5c7ca4b62..d395a3060 100644 --- a/dev/tramp-sample-project/project.clj +++ b/dev/tramp-sample-project/project.clj @@ -2,5 +2,5 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.49.2"] + :plugins [[cider/cider-nrepl "0.49.3"] [refactor-nrepl "3.9.0"]]) diff --git a/doc/modules/ROOT/pages/basics/middleware_setup.adoc b/doc/modules/ROOT/pages/basics/middleware_setup.adoc index 67e41c1fb..0b7e82d76 100644 --- a/doc/modules/ROOT/pages/basics/middleware_setup.adoc +++ b/doc/modules/ROOT/pages/basics/middleware_setup.adoc @@ -32,14 +32,14 @@ Use the convenient plugin for defaults, either in your project's [source,clojure] ---- -:plugins [[cider/cider-nrepl "0.49.2"]] +:plugins [[cider/cider-nrepl "0.49.3"]] ---- A minimal `profiles.clj` for CIDER would be: [source,clojure] ---- -{:repl {:plugins [[cider/cider-nrepl "0.49.2"]]}} +{:repl {:plugins [[cider/cider-nrepl "0.49.3"]]}} ---- WARNING: Be careful not to place this in the `:user` profile, as this way CIDER's @@ -59,7 +59,7 @@ all of their projects using a `~/.boot/profile.boot` file like so: (require 'boot.repl) (swap! boot.repl/*default-dependencies* - concat '[[cider/cider-nrepl "0.49.2"]]) + concat '[[cider/cider-nrepl "0.49.3"]]) (swap! boot.repl/*default-middleware* conj 'cider.nrepl/cider-middleware) @@ -76,11 +76,11 @@ run `cider-connect` or `cider-connect-cljs`. [source,clojure] ---- - :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.49.2"}} + :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.49.3"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware]"]} :cider-cljs {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.339"} - cider/cider-nrepl {:mvn/version "0.49.2"} + cider/cider-nrepl {:mvn/version "0.49.3"} cider/piggieback {:mvn/version "0.5.3"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware,cider.piggieback/wrap-cljs-repl]"]} @@ -99,7 +99,7 @@ NOTE: Make sure you're using https://github.com/clojurephant/clojurephant[Clojur ---- dependencies { devImplementation 'nrepl:nrepl:0.9.0' - devImplementation 'cider:cider-nrepl:0.49.2' + devImplementation 'cider:cider-nrepl:0.49.3' } tasks.named('clojureRepl') { diff --git a/doc/modules/ROOT/pages/basics/up_and_running.adoc b/doc/modules/ROOT/pages/basics/up_and_running.adoc index a0b4bf088..836237292 100644 --- a/doc/modules/ROOT/pages/basics/up_and_running.adoc +++ b/doc/modules/ROOT/pages/basics/up_and_running.adoc @@ -73,7 +73,7 @@ simple - CIDER simply passes the extra dependencies and nREPL configuration to your build tool in the command it runs to start the nREPL server. Here's how this looks for `tools.deps`: - $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.2.0"} cider/cider-nrepl {:mvn/version "0.49.2"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' + $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.2.0"} cider/cider-nrepl {:mvn/version "0.49.3"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' TIP: If you don't want `cider-jack-in` to inject dependencies automatically, set `cider-inject-dependencies-at-jack-in` to `nil`. Note that you'll have to setup @@ -350,7 +350,7 @@ It is also possible for plain `clj`, although the command is somewhat longer: [source,sh] ---- -$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.49.2"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" +$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.49.3"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" ---- Alternatively, you can start nREPL either manually or using the facilities diff --git a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc index cd6bdd5f8..05b5cf93d 100644 --- a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc +++ b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc @@ -62,7 +62,7 @@ And connect to it with `cider-connect`. ...For that to work, `shadow-cljs.edn` contents like the following are assumed: ```clj - :dependencies [[cider/cider-nrepl "0.49.2"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) + :dependencies [[cider/cider-nrepl "0.49.3"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) [refactor-nrepl/refactor-nrepl "3.9.0"]] ;; refactor-nrepl is optional :nrepl {:middleware [cider.nrepl/cider-middleware ;; it's advisable to explicitly add this middleware. It's automatically added by shadow-cljs (if available in the classpath), unless `:nrepl {:cider false}` diff --git a/doc/modules/ROOT/pages/cljs/up_and_running.adoc b/doc/modules/ROOT/pages/cljs/up_and_running.adoc index 2b06bd929..ad2d8317e 100644 --- a/doc/modules/ROOT/pages/cljs/up_and_running.adoc +++ b/doc/modules/ROOT/pages/cljs/up_and_running.adoc @@ -61,7 +61,7 @@ or in `build.gradle`: ---- dependencies { devImplementation 'nrepl:nrepl:1.2.0' - devImplementation 'cider:cider-nrepl:0.49.2' + devImplementation 'cider:cider-nrepl:0.49.3' devImplementation 'cider:cider-piggieback:0.5.3' } diff --git a/test/cider-tests.el b/test/cider-tests.el index 66731117a..77269f232 100644 --- a/test/cider-tests.el +++ b/test/cider-tests.el @@ -144,7 +144,7 @@ (describe "when there is a single dependency" (before-each (setq-local cider-injected-nrepl-version "0.9.0") - (setq-local cider-injected-middleware-version "0.49.2") + (setq-local cider-injected-middleware-version "0.49.3") (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t) @@ -155,7 +155,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.2\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.49.3\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -169,7 +169,7 @@ "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.2\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.49.3\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -182,7 +182,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure foo.bar/baz]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.2\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.49.3\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -196,7 +196,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.49.2") + (shell-quote-argument "cider/cider-nrepl:0.49.3") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -206,7 +206,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.49.2") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.49.3") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -223,7 +223,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.2\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.49.3\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -237,7 +237,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.49.2") + (shell-quote-argument "cider/cider-nrepl:0.49.3") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -259,7 +259,7 @@ :to-equal (concat "-o -U update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.2\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.49.3\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -271,7 +271,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.49.2") + (shell-quote-argument "cider/cider-nrepl:0.49.3") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -280,7 +280,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.49.2") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.49.3") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -295,14 +295,14 @@ (setq-local cider-jack-in-nrepl-middlewares '(("refactor-nrepl.middleware/wrap-refactor" :predicate middlewares-predicate) "cider.nrepl/cider-middleware" ("another/middleware")))) (it "includes plugins whose predicates return true" (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.49.2")))) + :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.49.3")))) (it "includes middlewares whose predicates return true" (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware" "another/middleware"))) (it "ignores plugins whose predicates return false" (spy-on 'plugins-predicate :and-return-value nil) (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("cider/cider-nrepl" "0.49.2"))) + :to-equal '(("cider/cider-nrepl" "0.49.3"))) (spy-on 'middlewares-predicate :and-return-value nil) (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("cider.nrepl/cider-middleware" "another/middleware"))) @@ -331,7 +331,7 @@ :and-return-value '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware")) (spy-on 'cider-jack-in-normalized-lein-plugins :and-return-value '(("refactor-nrepl" "2.0.0") - ("cider/cider-nrepl" "0.49.2") + ("cider/cider-nrepl" "0.49.3") ("mx.cider/lein-enrich-classpath" "1.19.3"))) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t)) @@ -342,7 +342,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.2\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.49.3\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -361,7 +361,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.49.2") + (shell-quote-argument "cider/cider-nrepl:0.49.3") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -456,7 +456,7 @@ (setq-local cider-jack-in-dependencies nil) (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.49.2\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.49.3\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) @@ -471,7 +471,7 @@ (it "allows specifying custom aliases with `cider-clojure-cli-aliases`" (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.49.2\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.49.3\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:dev:test:cider/nrepl") ""))) (setq-local cider-jack-in-dependencies nil) @@ -489,7 +489,7 @@ (it (format "should remove duplicates, yielding the same result (for %S command invocation)" command) ;; repeat the same test for PowerShell too (let ((expected (string-join `("-Sdeps " - ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.49.2\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" + ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.49.3\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" command) " -M:dev:test:cider/nrepl") ""))) @@ -499,7 +499,7 @@ :to-equal expected)))) (it "handles aliases correctly" (let ((expected (string-join `("-Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.49.2\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.49.3\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -527,7 +527,7 @@ :to-equal expected))))) (it "allows for global options" (let ((expected (string-join `("-J-Xverify:none -Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.49.2\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.49.3\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -538,7 +538,7 @@ (setq-local cider-jack-in-dependencies '(("org.clojure/tools.deps" (("git/sha" . "6ae2b6f71773de7549d7f22759e8b09fec27f0d9") ("git/url" . "https://github.com/clojure/tools.deps/"))))) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.49.2\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.49.3\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) From cd4c1180bc5a0379aa1bb94b539cf15341b6c73f Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Thu, 15 Aug 2024 10:55:57 +0300 Subject: [PATCH 029/149] [Fix #3733] Remove support for sideloading Sideloading was removed in nREPL 1.3, as it was not particularly useful and never gain any meaningful adoption in the broader Clojure community. --- CHANGELOG.md | 1 + ROADMAP.md | 1 - cider-eval.el | 184 --------------------------------------- cider-repl.el | 2 - test/cider-eval-tests.el | 20 ----- 5 files changed, 1 insertion(+), 207 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f50e79da8..963e4958c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - Bump the injected nREPL version to 1.3. - Bump the injected `cider-nrepl` to [0.49.3](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0493-2024-08-13). +- [#3733](https://github.com/clojure-emacs/cider/issues/3733): Remove support for sideloading. (this experimental feature was removed from nREPL 1.3) ### Bugs fixed diff --git a/ROADMAP.md b/ROADMAP.md index 3f6bab656..bcdff55dc 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -49,7 +49,6 @@ There's a bit of info on the subject [here](https://github.com/clojure-emacs/cid ## Implement new nREPL features -* sideloading (there's some experimental support for this) * dynamic middleware loading * ~~completion~~ * ~~lookup~~ diff --git a/cider-eval.el b/cider-eval.el index 0a422fe43..e5a68c464 100644 --- a/cider-eval.el +++ b/cider-eval.el @@ -204,190 +204,6 @@ When invoked with a prefix ARG the command doesn't prompt for confirmation." (save-excursion (quit-window nil error-win)))) - -;;; Sideloader -;; -;; nREPL includes sideloader middleware which provides a Java classloader that -;; is able to dynamically load classes and resources at runtime by interacting -;; with the nREPL client (as opposed to using the classpath of the JVM hosting -;; nREPL server). -;; -;; This performs a similar functionality as the load-file -;; operation, where we can load Clojure namespaces (as source files) or Java -;; classes (as bytecode) by simply requiring or importing them. -;; -;; See https://nrepl.org/nrepl/design/middleware.html#sideloading - -(defcustom cider-sideloader-path nil - "List of directories and jar files to scan for sideloader resources. -When not set the cider-nrepl jar will be added automatically when upgrading -an nREPL connection." - :type 'list - :group 'cider - :package-version '(cider . "1.2.0")) - -(defcustom cider-dynload-cider-nrepl-version nil - "Version of the cider-nrepl jar used for dynamically upgrading a connection. -Defaults to `cider-required-middleware-version'." - :type 'string - :group 'cider - :package-version '(cider . "1.2.0")) - -(defun cider-read-bytes (path) - "Read binary data from PATH. -Return the binary data as unibyte string." - ;; based on f-read-bytes - (with-temp-buffer - (set-buffer-multibyte nil) - (setq buffer-file-coding-system 'binary) - (insert-file-contents-literally path nil) - (buffer-substring-no-properties (point-min) (point-max)))) - -(defun cider-retrieve-resource (dirs name) - "Find a resource NAME in a list DIRS of directories or jar files. -Similar to a classpath lookup. Returns the file contents as a string." - (seq-some - (lambda (path) - (cond - ((file-directory-p path) - (let ((expanded (expand-file-name name path))) - (when (file-exists-p expanded) - (cider-read-bytes expanded)))) - ((and (file-exists-p path) (string-suffix-p ".jar" path)) - (cider-jar-retrieve-resource path name)))) - dirs)) - -(defun cider-provide-file (file) - "Provide FILE in a format suitable for sideloading." - (let ((contents (cider-retrieve-resource cider-sideloader-path file))) - (if contents - (base64-encode-string contents 'no-line-breaks) - ;; if we can't find the file we should return an empty string - (base64-encode-string "")))) - -(defun cider-sideloader-lookup-handler () - "Make a sideloader-lookup handler." - (lambda (response) - (nrepl-dbind-response response (id status type name) - (if status - (when (member "sideloader-lookup" status) - (cider-request:sideloader-provide id type name)))))) - -(defun cider-add-middleware-handler (continue) - "Make a add-middleware handler. -CONTINUE is an optional continuation function." - (lambda (response) - (nrepl-dbind-response response (status unresolved-middleware) ;; id middleware - (when unresolved-middleware - (seq-do - (lambda (mw) - (cider-repl-emit-interactive-stderr - (concat "WARNING: middleware " mw " was not found or failed to load.\n"))) - unresolved-middleware)) - (when (and status (member "done" status) continue) - (funcall continue))))) - -(defun cider-request:sideloader-start (&optional connection tooling) - "Perform the nREPL \"sideloader-start\" op. -If CONNECTION is nil, use `cider-current-repl'. -If TOOLING is truthy then the operation is performed over the tooling -session, rather than the regular session." - (cider-ensure-op-supported "sideloader-start") - (cider-nrepl-send-request `("op" "sideloader-start") - (cider-sideloader-lookup-handler) - connection - tooling)) - -(defun cider-request:sideloader-provide (id type file &optional connection) - "Perform the nREPL \"sideloader-provide\" op for ID, TYPE and FILE. -If CONNECTION is nil, use `cider-current-repl'." - (cider-nrepl-send-request `("id" ,id - "op" "sideloader-provide" - "type" ,type - "name" ,file - "content" ,(cider-provide-file file)) - (cider-sideloader-lookup-handler) - connection)) - -(defun cider-sideloader-start (&optional connection) - "Start nREPL's sideloader. -If CONNECTION is nil, use `cider-current-repl'." - (interactive) - (message "Starting nREPL's sideloader") - (cider-request:sideloader-start connection) - (cider-request:sideloader-start connection 'tooling)) - -(defvar cider-nrepl-middlewares - '("cider.nrepl/wrap-apropos" - "cider.nrepl/wrap-classpath" - "cider.nrepl/wrap-clojuredocs" - "cider.nrepl/wrap-complete" - "cider.nrepl/wrap-content-type" - "cider.nrepl/wrap-debug" - "cider.nrepl/wrap-enlighten" - "cider.nrepl/wrap-format" - "cider.nrepl/wrap-info" - "cider.nrepl/wrap-inspect" - "cider.nrepl/wrap-log" - "cider.nrepl/wrap-macroexpand" - "cider.nrepl/wrap-ns" - "cider.nrepl/wrap-out" - "cider.nrepl/wrap-slurp" - "cider.nrepl/wrap-profile" - "cider.nrepl/wrap-refresh" - "cider.nrepl/wrap-resource" - "cider.nrepl/wrap-spec" - "cider.nrepl/wrap-stacktrace" - "cider.nrepl/wrap-test" - "cider.nrepl/wrap-trace" - "cider.nrepl/wrap-tracker" - "cider.nrepl/wrap-undef" - "cider.nrepl/wrap-version" - "cider.nrepl/wrap-xref")) - -(defun cider-request:add-middleware (middlewares - &optional connection tooling continue) - "Use the nREPL dynamic loader to add MIDDLEWARES to the nREPL session. - -- If CONNECTION is nil, use `cider-current-repl'. -- If TOOLING it truthy, use the tooling session instead of the main session. -- CONTINUE is an optional continuation function, which will be called when the -add-middleware op has finished successfully." - (cider-nrepl-send-request `("op" "add-middleware" - "middleware" ,middlewares) - (cider-add-middleware-handler continue) - connection - tooling)) - -(defun cider-add-cider-nrepl-middlewares (&optional connection) - "Use dynamic loading to add the cider-nrepl middlewares to nREPL. -If CONNECTION is nil, use `cider-current-repl'." - (cider-request:add-middleware - cider-nrepl-middlewares connection nil - (lambda () - ;; When the main session is done adding middleware, then do the tooling - ;; session. At this point all the namespaces have been sideloaded so this - ;; is faster, we don't want these to race to sideload resources. - (cider-request:add-middleware - cider-nrepl-middlewares connection 'tooling - (lambda () - ;; Ask nREPL again what its capabilities are, so we know which new - ;; operations are supported. - (nrepl--init-capabilities (or connection (cider-current-repl)))))))) - -(defvar cider-required-middleware-version) -(defun cider-upgrade-nrepl-connection (&optional connection) - "Sideload cider-nrepl middleware. -If CONNECTION is nil, use `cider-current-repl'." - (interactive) - (when (not cider-sideloader-path) - (setq cider-sideloader-path (list (cider-jar-find-or-fetch - "cider" "cider-nrepl" - (or cider-dynload-cider-nrepl-version - cider-required-middleware-version))))) - (cider-sideloader-start connection) - (cider-add-cider-nrepl-middlewares connection)) - ;;; Dealing with compilation (evaluation) errors and warnings (defun cider-find-property (property &optional backward) diff --git a/cider-repl.el b/cider-repl.el index 675db2e28..9fd17c4f6 100644 --- a/cider-repl.el +++ b/cider-repl.el @@ -1692,7 +1692,6 @@ constructs." (declare-function cider-version "cider") (declare-function cider-test-run-loaded-tests "cider-test") (declare-function cider-test-run-project-tests "cider-test") -(declare-function cider-sideloader-start "cider-eval") (cider-repl-add-shortcut "clear-output" #'cider-repl-clear-output) (cider-repl-add-shortcut "clear" #'cider-repl-clear-buffer) (cider-repl-add-shortcut "clear-banners" #'cider-repl-clear-banners) @@ -1706,7 +1705,6 @@ constructs." (cider-repl-add-shortcut "classpath" #'cider-classpath) (cider-repl-add-shortcut "history" #'cider-repl-history) (cider-repl-add-shortcut "trace-ns" #'cider-toggle-trace-ns) -(cider-repl-add-shortcut "sideloader-start" #'cider-sideloader-start) (cider-repl-add-shortcut "undef" #'cider-undef) (cider-repl-add-shortcut "refresh" #'cider-ns-refresh) (cider-repl-add-shortcut "reload" #'cider-ns-reload) diff --git a/test/cider-eval-tests.el b/test/cider-eval-tests.el index 113012d08..fda7b7a23 100644 --- a/test/cider-eval-tests.el +++ b/test/cider-eval-tests.el @@ -30,26 +30,6 @@ ;; Please, for each `describe', ensure there's an `it' block, so that its execution is visible in CI. -(describe "cider-provide-file" - (let ((tmp-dir (temporary-file-directory))) - (it "returns an empty string when the file is not found" - (expect (cider-provide-file "abc.clj") :to-equal "")) - (it "base64 encodes without newlines" - (let ((cider-sideloader-path (list tmp-dir)) - (default-directory tmp-dir) - (filename (make-temp-file "abc.clj"))) - (with-temp-file filename - (dotimes (_ 60) (insert "x"))) - (expect (cider-provide-file filename) :not :to-match "\n"))) - (it "can handle multibyte characters" - (let ((cider-sideloader-path (list tmp-dir)) - (default-directory tmp-dir) - (filename (make-temp-file "abc.clj")) - (coding-system-for-write 'utf-8-unix)) - (with-temp-file filename - (insert "🍻")) - (expect (cider-provide-file filename) :to-equal "8J+Nuw=="))))) - (describe "cider-extract-error-info" (it "Matches Clojure compilation exceptions" (expect (cider-extract-error-info cider-compilation-regexp "Syntax error compiling clojure.core/let at (src/haystack/analyzer.clj:18:1).\n[1] - failed: even-number-of-forms? at: [:bindings] spec: :clojure.core.specs.alpha/bindings\n") From 144811a819b469cd797c88ec1f24119cfa8454af Mon Sep 17 00:00:00 2001 From: larstvei Date: Sat, 20 Jul 2024 15:17:47 +0200 Subject: [PATCH 030/149] [Fix #3725] Use defvaralias for x-gtk-use-system-tooltips on emacs29 --- cider-mode.el | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cider-mode.el b/cider-mode.el index ceea16a42..88278276c 100644 --- a/cider-mode.el +++ b/cider-mode.el @@ -1062,7 +1062,12 @@ property." ;;; Minor-mode definition -(defvar x-gtk-use-system-tooltips) + +(if (and (> emacs-major-version 28) + (not (boundp 'x-gtk-use-system-tooltips))) + ;; The x-gtk prefix has been dropped in Emacs 29 + (defvaralias 'x-gtk-use-system-tooltips 'use-system-tooltips) + (defvar x-gtk-use-system-tooltips)) ;;;###autoload (define-minor-mode cider-mode From 565f4f6e3a6a5c9c9e616b9e8afd7038dc98ac59 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Wed, 28 Aug 2024 16:43:52 +0300 Subject: [PATCH 031/149] Bump cider-nrepl to 0.50.1 (#3736) * Use cider-nrepl 0.50.1 * Replace clojure.tools.trace with orchard.trace * [ci] Disable parser-next dependent tests on JDK11 --- .github/workflows/test.yml | 4 +- CHANGELOG.md | 4 +- cider-mode.el | 2 +- cider.el | 2 +- dev/docker-sample-project/project.clj | 2 +- dev/tramp-sample-project/project.clj | 2 +- .../ROOT/pages/basics/middleware_setup.adoc | 12 ++--- .../ROOT/pages/basics/up_and_running.adoc | 4 +- doc/modules/ROOT/pages/cljs/shadow-cljs.adoc | 2 +- .../ROOT/pages/cljs/up_and_running.adoc | 4 +- test/cider-tests.el | 44 +++++++++---------- 11 files changed, 42 insertions(+), 40 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e48e98fa9..30efc5717 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -112,9 +112,9 @@ jobs: # be GH connectivity runner issues. We attempt to address this # problem by rerunning the tests more than once. eldev -p -dtTC test --test-type integration || eldev -p -dtTC test --test-type integration - + - name: Run tests that need enrich-classpath - if: "!startsWith(matrix.os, 'windows')" + if: "!startsWith(matrix.os, 'windows') && (matrix.java_version != '11')" run: | cd dev; ../clojure.sh clojure -M:gen; cd - wc -l test/File.edn diff --git a/CHANGELOG.md b/CHANGELOG.md index 963e4958c..895bf5ecb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,9 @@ ### Changes - Bump the injected nREPL version to 1.3. -- Bump the injected `cider-nrepl` to [0.49.3](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0493-2024-08-13). +- Bump the injected `cider-nrepl` to [0.50.1](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0501-2024-08-28). + * Introduce new backend for CIDER tracing functionality. + * Remove special handling of Boot classpath. - [#3733](https://github.com/clojure-emacs/cider/issues/3733): Remove support for sideloading. (this experimental feature was removed from nREPL 1.3) ### Bugs fixed diff --git a/cider-mode.el b/cider-mode.el index 88278276c..780a77ca2 100644 --- a/cider-mode.el +++ b/cider-mode.el @@ -809,7 +809,7 @@ with the given LIMIT." ;; we catch that case too. ;; FIXME: This matches values too, not just keys. (when (seq-find (lambda (k) (and (stringp k) - (string-match (rx "clojure.tools.trace/traced" eos) k))) + (string-match (rx "orchard.trace/traced" eos) k))) meta) (push sym traced)) (when (and do-deprecated (nrepl-dict-get meta "deprecated")) diff --git a/cider.el b/cider.el index 8e285a7db..c08ea43cd 100644 --- a/cider.el +++ b/cider.el @@ -573,7 +573,7 @@ the artifact.") Used when `cider-jack-in-auto-inject-clojure' is set to `latest'.") -(defconst cider-required-middleware-version "0.49.3" +(defconst cider-required-middleware-version "0.50.1" "The CIDER nREPL version that's known to work properly with CIDER.") (defcustom cider-injected-middleware-version cider-required-middleware-version diff --git a/dev/docker-sample-project/project.clj b/dev/docker-sample-project/project.clj index 5ede67451..c91d6f04f 100644 --- a/dev/docker-sample-project/project.clj +++ b/dev/docker-sample-project/project.clj @@ -2,4 +2,4 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.49.3"]]) + :plugins [[cider/cider-nrepl "0.50.1"]]) diff --git a/dev/tramp-sample-project/project.clj b/dev/tramp-sample-project/project.clj index d395a3060..9cec749ea 100644 --- a/dev/tramp-sample-project/project.clj +++ b/dev/tramp-sample-project/project.clj @@ -2,5 +2,5 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.49.3"] + :plugins [[cider/cider-nrepl "0.50.1"] [refactor-nrepl "3.9.0"]]) diff --git a/doc/modules/ROOT/pages/basics/middleware_setup.adoc b/doc/modules/ROOT/pages/basics/middleware_setup.adoc index 0b7e82d76..d9766b832 100644 --- a/doc/modules/ROOT/pages/basics/middleware_setup.adoc +++ b/doc/modules/ROOT/pages/basics/middleware_setup.adoc @@ -32,14 +32,14 @@ Use the convenient plugin for defaults, either in your project's [source,clojure] ---- -:plugins [[cider/cider-nrepl "0.49.3"]] +:plugins [[cider/cider-nrepl "0.50.1"]] ---- A minimal `profiles.clj` for CIDER would be: [source,clojure] ---- -{:repl {:plugins [[cider/cider-nrepl "0.49.3"]]}} +{:repl {:plugins [[cider/cider-nrepl "0.50.1"]]}} ---- WARNING: Be careful not to place this in the `:user` profile, as this way CIDER's @@ -59,7 +59,7 @@ all of their projects using a `~/.boot/profile.boot` file like so: (require 'boot.repl) (swap! boot.repl/*default-dependencies* - concat '[[cider/cider-nrepl "0.49.3"]]) + concat '[[cider/cider-nrepl "0.50.1"]]) (swap! boot.repl/*default-middleware* conj 'cider.nrepl/cider-middleware) @@ -76,11 +76,11 @@ run `cider-connect` or `cider-connect-cljs`. [source,clojure] ---- - :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.49.3"}} + :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.50.1"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware]"]} :cider-cljs {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.339"} - cider/cider-nrepl {:mvn/version "0.49.3"} + cider/cider-nrepl {:mvn/version "0.50.1"} cider/piggieback {:mvn/version "0.5.3"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware,cider.piggieback/wrap-cljs-repl]"]} @@ -99,7 +99,7 @@ NOTE: Make sure you're using https://github.com/clojurephant/clojurephant[Clojur ---- dependencies { devImplementation 'nrepl:nrepl:0.9.0' - devImplementation 'cider:cider-nrepl:0.49.3' + devImplementation 'cider:cider-nrepl:0.50.1' } tasks.named('clojureRepl') { diff --git a/doc/modules/ROOT/pages/basics/up_and_running.adoc b/doc/modules/ROOT/pages/basics/up_and_running.adoc index 836237292..70f17ea44 100644 --- a/doc/modules/ROOT/pages/basics/up_and_running.adoc +++ b/doc/modules/ROOT/pages/basics/up_and_running.adoc @@ -73,7 +73,7 @@ simple - CIDER simply passes the extra dependencies and nREPL configuration to your build tool in the command it runs to start the nREPL server. Here's how this looks for `tools.deps`: - $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.2.0"} cider/cider-nrepl {:mvn/version "0.49.3"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' + $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.0"} cider/cider-nrepl {:mvn/version "0.50.1"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' TIP: If you don't want `cider-jack-in` to inject dependencies automatically, set `cider-inject-dependencies-at-jack-in` to `nil`. Note that you'll have to setup @@ -350,7 +350,7 @@ It is also possible for plain `clj`, although the command is somewhat longer: [source,sh] ---- -$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.49.3"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" +$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.50.1"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" ---- Alternatively, you can start nREPL either manually or using the facilities diff --git a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc index 05b5cf93d..fad330d78 100644 --- a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc +++ b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc @@ -62,7 +62,7 @@ And connect to it with `cider-connect`. ...For that to work, `shadow-cljs.edn` contents like the following are assumed: ```clj - :dependencies [[cider/cider-nrepl "0.49.3"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) + :dependencies [[cider/cider-nrepl "0.50.1"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) [refactor-nrepl/refactor-nrepl "3.9.0"]] ;; refactor-nrepl is optional :nrepl {:middleware [cider.nrepl/cider-middleware ;; it's advisable to explicitly add this middleware. It's automatically added by shadow-cljs (if available in the classpath), unless `:nrepl {:cider false}` diff --git a/doc/modules/ROOT/pages/cljs/up_and_running.adoc b/doc/modules/ROOT/pages/cljs/up_and_running.adoc index ad2d8317e..65c79239f 100644 --- a/doc/modules/ROOT/pages/cljs/up_and_running.adoc +++ b/doc/modules/ROOT/pages/cljs/up_and_running.adoc @@ -60,8 +60,8 @@ or in `build.gradle`: [source, groovy] ---- dependencies { - devImplementation 'nrepl:nrepl:1.2.0' - devImplementation 'cider:cider-nrepl:0.49.3' + devImplementation 'nrepl:nrepl:1.3.0' + devImplementation 'cider:cider-nrepl:0.50.1' devImplementation 'cider:cider-piggieback:0.5.3' } diff --git a/test/cider-tests.el b/test/cider-tests.el index 77269f232..a0f864199 100644 --- a/test/cider-tests.el +++ b/test/cider-tests.el @@ -144,7 +144,7 @@ (describe "when there is a single dependency" (before-each (setq-local cider-injected-nrepl-version "0.9.0") - (setq-local cider-injected-middleware-version "0.49.3") + (setq-local cider-injected-middleware-version "0.50.1") (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t) @@ -155,7 +155,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.3\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.50.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -169,7 +169,7 @@ "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.3\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.50.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -182,7 +182,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure foo.bar/baz]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.3\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.50.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -196,7 +196,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.49.3") + (shell-quote-argument "cider/cider-nrepl:0.50.1") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -206,7 +206,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.49.3") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.50.1") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -223,7 +223,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.3\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.50.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -237,7 +237,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.49.3") + (shell-quote-argument "cider/cider-nrepl:0.50.1") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -259,7 +259,7 @@ :to-equal (concat "-o -U update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.3\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.50.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -271,7 +271,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.49.3") + (shell-quote-argument "cider/cider-nrepl:0.50.1") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -280,7 +280,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.49.3") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.50.1") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -295,14 +295,14 @@ (setq-local cider-jack-in-nrepl-middlewares '(("refactor-nrepl.middleware/wrap-refactor" :predicate middlewares-predicate) "cider.nrepl/cider-middleware" ("another/middleware")))) (it "includes plugins whose predicates return true" (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.49.3")))) + :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.50.1")))) (it "includes middlewares whose predicates return true" (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware" "another/middleware"))) (it "ignores plugins whose predicates return false" (spy-on 'plugins-predicate :and-return-value nil) (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("cider/cider-nrepl" "0.49.3"))) + :to-equal '(("cider/cider-nrepl" "0.50.1"))) (spy-on 'middlewares-predicate :and-return-value nil) (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("cider.nrepl/cider-middleware" "another/middleware"))) @@ -331,7 +331,7 @@ :and-return-value '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware")) (spy-on 'cider-jack-in-normalized-lein-plugins :and-return-value '(("refactor-nrepl" "2.0.0") - ("cider/cider-nrepl" "0.49.3") + ("cider/cider-nrepl" "0.50.1") ("mx.cider/lein-enrich-classpath" "1.19.3"))) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t)) @@ -342,7 +342,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.49.3\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.50.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -361,7 +361,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.49.3") + (shell-quote-argument "cider/cider-nrepl:0.50.1") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -456,7 +456,7 @@ (setq-local cider-jack-in-dependencies nil) (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.49.3\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.50.1\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) @@ -471,7 +471,7 @@ (it "allows specifying custom aliases with `cider-clojure-cli-aliases`" (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.49.3\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.50.1\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:dev:test:cider/nrepl") ""))) (setq-local cider-jack-in-dependencies nil) @@ -489,7 +489,7 @@ (it (format "should remove duplicates, yielding the same result (for %S command invocation)" command) ;; repeat the same test for PowerShell too (let ((expected (string-join `("-Sdeps " - ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.49.3\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" + ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.50.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" command) " -M:dev:test:cider/nrepl") ""))) @@ -499,7 +499,7 @@ :to-equal expected)))) (it "handles aliases correctly" (let ((expected (string-join `("-Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.49.3\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.50.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -527,7 +527,7 @@ :to-equal expected))))) (it "allows for global options" (let ((expected (string-join `("-J-Xverify:none -Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.49.3\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.50.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -538,7 +538,7 @@ (setq-local cider-jack-in-dependencies '(("org.clojure/tools.deps" (("git/sha" . "6ae2b6f71773de7549d7f22759e8b09fec27f0d9") ("git/url" . "https://github.com/clojure/tools.deps/"))))) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.49.3\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.50.1\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) From 8fdb53e8be764704f5023fa024d023bffedf5a8b Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Thu, 5 Sep 2024 17:24:15 +0300 Subject: [PATCH 032/149] Bump cider-nrepl to 0.50.2 (#3738) --- CHANGELOG.md | 2 +- cider.el | 2 +- dev/docker-sample-project/project.clj | 2 +- dev/tramp-sample-project/project.clj | 2 +- .../ROOT/pages/basics/middleware_setup.adoc | 12 ++--- .../ROOT/pages/basics/up_and_running.adoc | 4 +- doc/modules/ROOT/pages/cljs/shadow-cljs.adoc | 2 +- .../ROOT/pages/cljs/up_and_running.adoc | 2 +- test/cider-tests.el | 44 +++++++++---------- 9 files changed, 36 insertions(+), 36 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 895bf5ecb..18db4705e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ ### Changes - Bump the injected nREPL version to 1.3. -- Bump the injected `cider-nrepl` to [0.50.1](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0501-2024-08-28). +- Bump the injected `cider-nrepl` to [0.50.2](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0502-2024-09-03). * Introduce new backend for CIDER tracing functionality. * Remove special handling of Boot classpath. - [#3733](https://github.com/clojure-emacs/cider/issues/3733): Remove support for sideloading. (this experimental feature was removed from nREPL 1.3) diff --git a/cider.el b/cider.el index c08ea43cd..a8ea1d9b2 100644 --- a/cider.el +++ b/cider.el @@ -573,7 +573,7 @@ the artifact.") Used when `cider-jack-in-auto-inject-clojure' is set to `latest'.") -(defconst cider-required-middleware-version "0.50.1" +(defconst cider-required-middleware-version "0.50.2" "The CIDER nREPL version that's known to work properly with CIDER.") (defcustom cider-injected-middleware-version cider-required-middleware-version diff --git a/dev/docker-sample-project/project.clj b/dev/docker-sample-project/project.clj index c91d6f04f..d640f9933 100644 --- a/dev/docker-sample-project/project.clj +++ b/dev/docker-sample-project/project.clj @@ -2,4 +2,4 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.50.1"]]) + :plugins [[cider/cider-nrepl "0.50.2"]]) diff --git a/dev/tramp-sample-project/project.clj b/dev/tramp-sample-project/project.clj index 9cec749ea..f97ead85d 100644 --- a/dev/tramp-sample-project/project.clj +++ b/dev/tramp-sample-project/project.clj @@ -2,5 +2,5 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.50.1"] + :plugins [[cider/cider-nrepl "0.50.2"] [refactor-nrepl "3.9.0"]]) diff --git a/doc/modules/ROOT/pages/basics/middleware_setup.adoc b/doc/modules/ROOT/pages/basics/middleware_setup.adoc index d9766b832..fc98507fd 100644 --- a/doc/modules/ROOT/pages/basics/middleware_setup.adoc +++ b/doc/modules/ROOT/pages/basics/middleware_setup.adoc @@ -32,14 +32,14 @@ Use the convenient plugin for defaults, either in your project's [source,clojure] ---- -:plugins [[cider/cider-nrepl "0.50.1"]] +:plugins [[cider/cider-nrepl "0.50.2"]] ---- A minimal `profiles.clj` for CIDER would be: [source,clojure] ---- -{:repl {:plugins [[cider/cider-nrepl "0.50.1"]]}} +{:repl {:plugins [[cider/cider-nrepl "0.50.2"]]}} ---- WARNING: Be careful not to place this in the `:user` profile, as this way CIDER's @@ -59,7 +59,7 @@ all of their projects using a `~/.boot/profile.boot` file like so: (require 'boot.repl) (swap! boot.repl/*default-dependencies* - concat '[[cider/cider-nrepl "0.50.1"]]) + concat '[[cider/cider-nrepl "0.50.2"]]) (swap! boot.repl/*default-middleware* conj 'cider.nrepl/cider-middleware) @@ -76,11 +76,11 @@ run `cider-connect` or `cider-connect-cljs`. [source,clojure] ---- - :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.50.1"}} + :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.50.2"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware]"]} :cider-cljs {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.339"} - cider/cider-nrepl {:mvn/version "0.50.1"} + cider/cider-nrepl {:mvn/version "0.50.2"} cider/piggieback {:mvn/version "0.5.3"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware,cider.piggieback/wrap-cljs-repl]"]} @@ -99,7 +99,7 @@ NOTE: Make sure you're using https://github.com/clojurephant/clojurephant[Clojur ---- dependencies { devImplementation 'nrepl:nrepl:0.9.0' - devImplementation 'cider:cider-nrepl:0.50.1' + devImplementation 'cider:cider-nrepl:0.50.2' } tasks.named('clojureRepl') { diff --git a/doc/modules/ROOT/pages/basics/up_and_running.adoc b/doc/modules/ROOT/pages/basics/up_and_running.adoc index 70f17ea44..f3aeab6c2 100644 --- a/doc/modules/ROOT/pages/basics/up_and_running.adoc +++ b/doc/modules/ROOT/pages/basics/up_and_running.adoc @@ -73,7 +73,7 @@ simple - CIDER simply passes the extra dependencies and nREPL configuration to your build tool in the command it runs to start the nREPL server. Here's how this looks for `tools.deps`: - $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.0"} cider/cider-nrepl {:mvn/version "0.50.1"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' + $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.0"} cider/cider-nrepl {:mvn/version "0.50.2"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' TIP: If you don't want `cider-jack-in` to inject dependencies automatically, set `cider-inject-dependencies-at-jack-in` to `nil`. Note that you'll have to setup @@ -350,7 +350,7 @@ It is also possible for plain `clj`, although the command is somewhat longer: [source,sh] ---- -$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.50.1"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" +$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.50.2"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" ---- Alternatively, you can start nREPL either manually or using the facilities diff --git a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc index fad330d78..b66ecbe1a 100644 --- a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc +++ b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc @@ -62,7 +62,7 @@ And connect to it with `cider-connect`. ...For that to work, `shadow-cljs.edn` contents like the following are assumed: ```clj - :dependencies [[cider/cider-nrepl "0.50.1"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) + :dependencies [[cider/cider-nrepl "0.50.2"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) [refactor-nrepl/refactor-nrepl "3.9.0"]] ;; refactor-nrepl is optional :nrepl {:middleware [cider.nrepl/cider-middleware ;; it's advisable to explicitly add this middleware. It's automatically added by shadow-cljs (if available in the classpath), unless `:nrepl {:cider false}` diff --git a/doc/modules/ROOT/pages/cljs/up_and_running.adoc b/doc/modules/ROOT/pages/cljs/up_and_running.adoc index 65c79239f..b372f6c8c 100644 --- a/doc/modules/ROOT/pages/cljs/up_and_running.adoc +++ b/doc/modules/ROOT/pages/cljs/up_and_running.adoc @@ -61,7 +61,7 @@ or in `build.gradle`: ---- dependencies { devImplementation 'nrepl:nrepl:1.3.0' - devImplementation 'cider:cider-nrepl:0.50.1' + devImplementation 'cider:cider-nrepl:0.50.2' devImplementation 'cider:cider-piggieback:0.5.3' } diff --git a/test/cider-tests.el b/test/cider-tests.el index a0f864199..c82dbe800 100644 --- a/test/cider-tests.el +++ b/test/cider-tests.el @@ -144,7 +144,7 @@ (describe "when there is a single dependency" (before-each (setq-local cider-injected-nrepl-version "0.9.0") - (setq-local cider-injected-middleware-version "0.50.1") + (setq-local cider-injected-middleware-version "0.50.2") (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t) @@ -155,7 +155,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.50.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.50.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -169,7 +169,7 @@ "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.50.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.50.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -182,7 +182,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure foo.bar/baz]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.50.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.50.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -196,7 +196,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.50.1") + (shell-quote-argument "cider/cider-nrepl:0.50.2") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -206,7 +206,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.50.1") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.50.2") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -223,7 +223,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.50.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.50.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -237,7 +237,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.50.1") + (shell-quote-argument "cider/cider-nrepl:0.50.2") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -259,7 +259,7 @@ :to-equal (concat "-o -U update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.50.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.50.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -271,7 +271,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.50.1") + (shell-quote-argument "cider/cider-nrepl:0.50.2") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -280,7 +280,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.50.1") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.50.2") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -295,14 +295,14 @@ (setq-local cider-jack-in-nrepl-middlewares '(("refactor-nrepl.middleware/wrap-refactor" :predicate middlewares-predicate) "cider.nrepl/cider-middleware" ("another/middleware")))) (it "includes plugins whose predicates return true" (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.50.1")))) + :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.50.2")))) (it "includes middlewares whose predicates return true" (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware" "another/middleware"))) (it "ignores plugins whose predicates return false" (spy-on 'plugins-predicate :and-return-value nil) (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("cider/cider-nrepl" "0.50.1"))) + :to-equal '(("cider/cider-nrepl" "0.50.2"))) (spy-on 'middlewares-predicate :and-return-value nil) (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("cider.nrepl/cider-middleware" "another/middleware"))) @@ -331,7 +331,7 @@ :and-return-value '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware")) (spy-on 'cider-jack-in-normalized-lein-plugins :and-return-value '(("refactor-nrepl" "2.0.0") - ("cider/cider-nrepl" "0.50.1") + ("cider/cider-nrepl" "0.50.2") ("mx.cider/lein-enrich-classpath" "1.19.3"))) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t)) @@ -342,7 +342,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.50.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.50.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" @@ -361,7 +361,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.50.1") + (shell-quote-argument "cider/cider-nrepl:0.50.2") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -456,7 +456,7 @@ (setq-local cider-jack-in-dependencies nil) (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.50.1\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.50.2\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) @@ -471,7 +471,7 @@ (it "allows specifying custom aliases with `cider-clojure-cli-aliases`" (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.50.1\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.50.2\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:dev:test:cider/nrepl") ""))) (setq-local cider-jack-in-dependencies nil) @@ -489,7 +489,7 @@ (it (format "should remove duplicates, yielding the same result (for %S command invocation)" command) ;; repeat the same test for PowerShell too (let ((expected (string-join `("-Sdeps " - ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.50.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" + ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.50.2\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" command) " -M:dev:test:cider/nrepl") ""))) @@ -499,7 +499,7 @@ :to-equal expected)))) (it "handles aliases correctly" (let ((expected (string-join `("-Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.50.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.50.2\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -527,7 +527,7 @@ :to-equal expected))))) (it "allows for global options" (let ((expected (string-join `("-J-Xverify:none -Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.50.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.50.2\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -538,7 +538,7 @@ (setq-local cider-jack-in-dependencies '(("org.clojure/tools.deps" (("git/sha" . "6ae2b6f71773de7549d7f22759e8b09fec27f0d9") ("git/url" . "https://github.com/clojure/tools.deps/"))))) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.50.1\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.50.2\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) From 87b836f289d5e3935b515eaac2959bd2e1d3ed37 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Mon, 9 Sep 2024 22:51:07 +0300 Subject: [PATCH 033/149] Correctly quote allowAttachSelf argument for Leiningen (#3739) --- CHANGELOG.md | 1 + cider.el | 2 +- test/cider-tests.el | 12 ++++++------ 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 18db4705e..d5bd42e2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ ### Bugs fixed - [#3722](https://github.com/clojure-emacs/cider/pull/3722): Call `cider-docstring--format` after checking argument is not nil. +- [#3739](https://github.com/clojure-emacs/cider/pull/3739): Leiningen jack in fails when `cider-enable-nrepl-jvmti-agent` is enabled. ## 1.15.1 (2024-07-01) diff --git a/cider.el b/cider.el index a8ea1d9b2..5f9345a52 100644 --- a/cider.el +++ b/cider.el @@ -823,7 +823,7 @@ removed, LEIN-PLUGINS, LEIN-MIDDLEWARES and finally PARAMS." middleware)) lein-middlewares) (when cider-enable-nrepl-jvmti-agent - `(,(concat "update-in :jvm-opts conj -Djdk.attach.allowAttachSelf")))) + `(,(concat "update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'")))) " -- ") " -- " (if (not cider-enrich-classpath) diff --git a/test/cider-tests.el b/test/cider-tests.el index c82dbe800..1cdbd8817 100644 --- a/test/cider-tests.el +++ b/test/cider-tests.el @@ -158,7 +158,7 @@ (shell-quote-argument "[cider/cider-nrepl \"0.50.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") - " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" + " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" " -- update-in :middleware conj cider.enrich-classpath.plugin-v2/middleware" " -- repl :headless"))) @@ -172,7 +172,7 @@ (shell-quote-argument "[cider/cider-nrepl \"0.50.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") - " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" + " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" " -- update-in :middleware conj cider.enrich-classpath.plugin-v2/middleware" " -- repl :headless"))) @@ -185,7 +185,7 @@ (shell-quote-argument "[cider/cider-nrepl \"0.50.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") - " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" + " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" " -- update-in :middleware conj cider.enrich-classpath.plugin-v2/middleware" " -- repl :headless"))) @@ -226,7 +226,7 @@ (shell-quote-argument "[cider/cider-nrepl \"0.50.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") - " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" + " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" " -- update-in :middleware conj cider.enrich-classpath.plugin-v2/middleware" " -- repl :headless"))) @@ -262,7 +262,7 @@ (shell-quote-argument "[cider/cider-nrepl \"0.50.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") - " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" + " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" " -- update-in :middleware conj cider.enrich-classpath.plugin-v2/middleware" " -- repl :headless"))) (it "can concat in a boot project" @@ -345,7 +345,7 @@ (shell-quote-argument "[cider/cider-nrepl \"0.50.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") - " -- update-in :jvm-opts conj -Djdk.attach.allowAttachSelf" + " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" " -- update-in :middleware conj cider.enrich-classpath.plugin-v2/middleware" " -- repl :headless")))) From 76eac5aa634adba9a5b632cfe670467ebe319126 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Tue, 24 Sep 2024 09:32:20 +0300 Subject: [PATCH 034/149] Release CIDER 1.16 ("Kherson") --- CHANGELOG.md | 12 ++++++------ cider.el | 6 +++--- doc/antora.yml | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d5bd42e2c..96bc14925 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,20 +2,20 @@ ## master (unreleased) -### New features +## 1.16.0 (2024-09-24) ### Changes -- Bump the injected nREPL version to 1.3. +- Bump the injected nREPL version to [1.3](https://github.com/nrepl/nrepl/releases/tag/v1.3.0). +- [#3733](https://github.com/clojure-emacs/cider/issues/3733): Remove support for sideloading. (this experimental feature was removed from nREPL 1.3) - Bump the injected `cider-nrepl` to [0.50.2](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0502-2024-09-03). - * Introduce new backend for CIDER tracing functionality. + * Introduce new backend for CIDER tracing functionality (replacing `tools.trace`). * Remove special handling of Boot classpath. -- [#3733](https://github.com/clojure-emacs/cider/issues/3733): Remove support for sideloading. (this experimental feature was removed from nREPL 1.3) ### Bugs fixed -- [#3722](https://github.com/clojure-emacs/cider/pull/3722): Call `cider-docstring--format` after checking argument is not nil. -- [#3739](https://github.com/clojure-emacs/cider/pull/3739): Leiningen jack in fails when `cider-enable-nrepl-jvmti-agent` is enabled. +- [#3722](https://github.com/clojure-emacs/cider/pull/3722): Call `cider-docstring--format` after checking argument is not `nil`. +- [#3739](https://github.com/clojure-emacs/cider/pull/3739): Leiningen jack-in fails when `cider-enable-nrepl-jvmti-agent` is enabled. ## 1.15.1 (2024-07-01) diff --git a/cider.el b/cider.el index 5f9345a52..ec5f5f92d 100644 --- a/cider.el +++ b/cider.el @@ -11,7 +11,7 @@ ;; Steve Purcell ;; Maintainer: Bozhidar Batsov ;; URL: https://www.github.com/clojure-emacs/cider -;; Version: 1.15.1 +;; Version: 1.16.0 ;; Package-Requires: ((emacs "26") (clojure-mode "5.19") (parseedn "1.2.1") (queue "0.2") (spinner "1.7") (seq "2.22") (sesman "0.3.2") (transient "0.4.1")) ;; Keywords: languages, clojure, cider @@ -93,10 +93,10 @@ (require 'sesman) (require 'package) -(defconst cider-version "1.15.1" +(defconst cider-version "1.16.0" "The current version of CIDER.") -(defconst cider-codename "Cogne" +(defconst cider-codename "Kherson" "Codename used to denote stable releases.") (defcustom cider-lein-command diff --git a/doc/antora.yml b/doc/antora.yml index fd9dacd59..cd2c1b77c 100644 --- a/doc/antora.yml +++ b/doc/antora.yml @@ -2,6 +2,6 @@ name: cider title: CIDER # We always provide version without patch here (e.g. 1.1), # as patch versions should not appear in the docs. -version: ~ +version: 1.16 nav: - modules/ROOT/nav.adoc From 582f5885f8d947be86f2b82b4088b20110da6715 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Tue, 24 Sep 2024 09:32:57 +0300 Subject: [PATCH 035/149] Reset the docs version --- doc/antora.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/antora.yml b/doc/antora.yml index cd2c1b77c..fd9dacd59 100644 --- a/doc/antora.yml +++ b/doc/antora.yml @@ -2,6 +2,6 @@ name: cider title: CIDER # We always provide version without patch here (e.g. 1.1), # as patch versions should not appear in the docs. -version: 1.16 +version: ~ nav: - modules/ROOT/nav.adoc From a38a92c7f814efaeb247c3bccca1c11a8dccc519 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Tue, 24 Sep 2024 09:53:38 +0300 Subject: [PATCH 036/149] [Docs] Update the compatibility matrix --- doc/modules/ROOT/pages/about/compatibility.adoc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/doc/modules/ROOT/pages/about/compatibility.adoc b/doc/modules/ROOT/pages/about/compatibility.adoc index a0304a1a1..f8ea78c5d 100644 --- a/doc/modules/ROOT/pages/about/compatibility.adoc +++ b/doc/modules/ROOT/pages/about/compatibility.adoc @@ -182,6 +182,20 @@ Below you can find the official compatibility matrix for CIDER. | 8 | 1.10 +| 1.15 +| 26.1 +| 1.0 +| 0.49 +| 8 +| 1.10 + +| 1.16 +| 26.1 +| 1.0 +| 0.50 +| 8 +| 1.10 + |=== TIP: You can also check the requirements of a particular CIDER version by inspecting From 0b70bf86ef726dd8947b9fdfd459e805a2487c89 Mon Sep 17 00:00:00 2001 From: Martin Kavalar Date: Tue, 24 Sep 2024 21:46:17 +0200 Subject: [PATCH 037/149] Restore syntax highlighting in result minibuffer --- CHANGELOG.md | 4 ++++ cider-overlays.el | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 96bc14925..39ec0d575 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## master (unreleased) +### Bugs fixed + +- [#3742](https://github.com/clojure-emacs/cider/issues/3742): Restore syntax highlighting in result minibuffer. + ## 1.16.0 (2024-09-24) ### Changes diff --git a/cider-overlays.el b/cider-overlays.el index 81c36e29e..511f89a19 100644 --- a/cider-overlays.el +++ b/cider-overlays.el @@ -317,7 +317,7 @@ focused." :where point :duration cider-eval-result-duration :prepend-face (or overlay-face 'cider-result-overlay-face)))) - (msg (format "%s%s" cider-eval-result-prefix value)) + (msg (format "%s%s" cider-eval-result-prefix font-value)) (max-msg-length (* (floor (* (frame-height) max-mini-window-height)) (frame-width))) (msg (if (> (string-width msg) max-msg-length) From 2c6a3c21dc04b28a4dfb328dcc48a7d196eb8efd Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Wed, 25 Sep 2024 16:34:19 +0300 Subject: [PATCH 038/149] [Docs] Tweak some wording --- doc/modules/ROOT/pages/debugging/debugger.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/modules/ROOT/pages/debugging/debugger.adoc b/doc/modules/ROOT/pages/debugging/debugger.adoc index e06cecbf0..3df79dcdd 100644 --- a/doc/modules/ROOT/pages/debugging/debugger.adoc +++ b/doc/modules/ROOT/pages/debugging/debugger.adoc @@ -7,7 +7,7 @@ http://www.gnu.org/software/emacs/manual/html_node/elisp/Edebug.html[Edebug]. Yo image::cider_debugger.gif[CIDER Debugger] WARNING: The debugger **does not** support ClojureScript. -You might want to use https://github.com/jpmonettas/cider-storm[Cider Storm] instead. +Check out https://github.com/jpmonettas/cider-storm[Cider Storm] if you need to debug ClojureScript code. == Using the Debugger From be4b4acb6d32cb32118fc46042ab07184c194b37 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Wed, 25 Sep 2024 16:40:28 +0300 Subject: [PATCH 039/149] [Docs] Document cider-result-use-clojure-font-lock --- doc/modules/ROOT/pages/usage/code_evaluation.adoc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/doc/modules/ROOT/pages/usage/code_evaluation.adoc b/doc/modules/ROOT/pages/usage/code_evaluation.adoc index a2f21dc45..60340e8a7 100644 --- a/doc/modules/ROOT/pages/usage/code_evaluation.adoc +++ b/doc/modules/ROOT/pages/usage/code_evaluation.adoc @@ -183,6 +183,16 @@ Set this variable to `nil` to disable it. NOTE: CIDER uses internally the excellent package https://github.com/Malabarba/spinner.el[spinner.el]. +=== Syntax Highlighting of Results + +By default the results of interactive evaluation (both those displayed in the minibuffer and in overlays) are font-locked as Clojure code. +You can disable this by tweaking the configuration option `cider-result-use-clojure-font-lock`: + +[source,lisp] +---- +(setq cider-result-use-clojure-font-lock nil) +---- + === Overlays When you evaluate code in Clojure files, the result is displayed in the buffer From e51ebbc19c5b29515e4799de38b43b2ed0aa77f3 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Wed, 9 Oct 2024 14:59:52 +0300 Subject: [PATCH 040/149] [docstring] Don't crash if string doc is nil --- CHANGELOG.md | 1 + cider-docstring.el | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 39ec0d575..f5ab81717 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### Bugs fixed - [#3742](https://github.com/clojure-emacs/cider/issues/3742): Restore syntax highlighting in result minibuffer. +- [#3747](https://github.com/clojure-emacs/cider/issues/3747): Fix errors when docstring is nil. ## 1.16.0 (2024-09-24) diff --git a/cider-docstring.el b/cider-docstring.el index 65742169e..2ff46e1e4 100644 --- a/cider-docstring.el +++ b/cider-docstring.el @@ -143,9 +143,10 @@ Prioritize rendering as much as possible while staying within `cider-docstring-m (cl-defun cider-docstring--trim (string &optional (max-lines cider-docstring-max-lines)) "Return MAX-LINES of STRING, adding \"...\" if trimming was necessary." - (let* ((lines (split-string string "\n")) - (string (string-join (seq-take lines max-lines) "\n"))) - (concat string (when (> (length lines) max-lines) "...")))) + (when string + (let* ((lines (split-string string "\n")) + (string (string-join (seq-take lines max-lines) "\n"))) + (concat string (when (> (length lines) max-lines) "..."))))) (defun cider-docstring--format (string) "Return a nicely formatted STRING to be displayed to the user. From ced9f25cb67fe1fca32f04f77a8ef7c114ccc4e5 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Wed, 9 Oct 2024 11:39:36 +0300 Subject: [PATCH 041/149] [completion] Fix custom completion style and make it default for fuzzy matching --- CHANGELOG.md | 4 ++ cider-completion.el | 41 ++++++++++++++++--- .../ROOT/pages/usage/code_completion.adoc | 19 ++++----- 3 files changed, 49 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f5ab81717..e52b14906 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## master (unreleased) +### Changes + +- [#3746](https://github.com/clojure-emacs/cider/issues/3746): Bring back `cider` completion style for activating backend-driven completion. + ### Bugs fixed - [#3742](https://github.com/clojure-emacs/cider/issues/3742): Restore syntax highlighting in result minibuffer. diff --git a/cider-completion.el b/cider-completion.el index 8e9271454..b06899333 100644 --- a/cider-completion.el +++ b/cider-completion.el @@ -256,6 +256,14 @@ in the buffer." ;; Fuzzy completion for company-mode +(defun cider-completion-try-completion (string collection pred _) + "Return longest common substring of all completions of STRING in COLLECTION, +also pass PRED to `try-completion'. + +This function is only needed to be a correct citizen in +`completion-styles-alist'." + (try-completion string collection pred)) + (defun cider-company-unfiltered-candidates (string &rest _) "Return CIDER completion candidates for STRING as is, unfiltered." (cider-complete string)) @@ -268,17 +276,40 @@ in the buffer." ;; which introduced `cider-company-enable-fuzzy-completion') (add-to-list 'completion-styles-alist '(cider - cider-company-unfiltered-candidates + cider-completion-try-completion cider-company-unfiltered-candidates "CIDER backend-driven completion style.")) (defun cider-company-enable-fuzzy-completion () - "Enable backend-driven fuzzy completion in the current buffer. + "Enables `cider' completion style for CIDER in all buffers. -DEPRECATED: please use `cider-enable-flex-completion' instead." - (setq-local completion-styles '(cider))) +DEPRECATED: please use `cider-enable-cider-completion-style' instead." + (interactive) + (cider-enable-cider-completion-style)) + +(defun cider-enable-cider-completion-style () + "Enables `cider' completion style for CIDER in all buffers. -(make-obsolete 'cider-company-enable-fuzzy-completion 'cider-enable-flex-completion "1.8.0") +This style supports non-prefix completion candidates returned by the +completion backend. Only affects the `cider' completion category." + (interactive) + (let* ((cider (assq 'cider completion-category-overrides)) + (found-styles (assq 'styles cider)) + (new-styles (if found-styles + (cons 'styles (cons 'cider (cdr found-styles))) + '(styles cider basic))) + (new-cider (if cider + (cons 'cider + (cons new-styles + (seq-remove (lambda (x) (equal 'styles (car x))) + (cdr cider)))) + (list 'cider new-styles))) + (new-overrides (cons new-cider + (seq-remove (lambda (x) (equal 'cider (car x))) + completion-category-overrides)))) + (setq completion-category-overrides new-overrides))) + +(make-obsolete 'cider-company-enable-fuzzy-completion 'cider-enable-cider-completion-style "1.17.0") (defun cider-enable-flex-completion () "Enables `flex' (fuzzy) completion for CIDER in all buffers. diff --git a/doc/modules/ROOT/pages/usage/code_completion.adoc b/doc/modules/ROOT/pages/usage/code_completion.adoc index 9665b99c7..e354b587f 100644 --- a/doc/modules/ROOT/pages/usage/code_completion.adoc +++ b/doc/modules/ROOT/pages/usage/code_completion.adoc @@ -41,9 +41,12 @@ CIDER defines a specialized completion category through the `cider-complete-at-p added to `completion-at-point-functions`, establishing a dedicated completion category named `cider`. -The CIDER completion at point function supports most completion styles, including -`partial-completion`, `orderless` and `flex` (read more below). - +The CIDER completion at point function supports most completion styles, +including `partial-completion`, `orderless` and `flex`. It also supports a +custom completion style that is confusingly named `cider` too. Activating it +provides a richer set of completion candidates (see +xref:usage/code_completion.adoc#fuzzy-candidate-matching[fuzzy candidate +matching]). Sometimes the user may want to use a different completion style just for the CIDER complete at point function. That can be achieved by setting @@ -58,8 +61,6 @@ complete at point function. The following snippet accomplishes that: This specifies that the `cider` completion category should employ the basic completion style by default. -You can also enable the `flex` completion style by activating xref:usage/code_completion.adoc#fuzzy-candidate-matching[fuzzy candidate matching]. - == Auto-completion While the standard Emacs tooling works just fine, we suggest that @@ -146,15 +147,15 @@ emacs22)` since Emacs 23. For a better description of how those completion styles operates, refer to the official Emacs manual on https://www.gnu.org/software/emacs/manual/html_node/emacs/Completion-Styles.html[how completion alternatives are chosen]. -CIDER provides a function to enable the `flex` completion style for CIDER-specific +CIDER provides a function to enable the `cider` completion style for CIDER-specific completions. If you wish to enable that, you can add this to your config: [source,lisp] ---- -(cider-enable-flex-completion) +(cider-enable-cider-completion-style) ---- -This adds the `flex` completion style, as introduced in Emacs 27. +This adds the `cider` completion style for CIDER buffers. Now, `company-mode` (and other completion packages like `corfu`) will accept certain fuzziness when matching candidates against the @@ -163,8 +164,6 @@ the possible completion candidates and `cji` will complete to `clojure.java.io`. Different completion examples are shown https://github.com/alexander-yakushev/compliment/wiki/Examples[here]. -NOTE: `cider-company-enable-fuzzy-completion` (now deprecated) should be used for Emacs < 27. - === Completion annotations Completion candidates will be annotated by default with an abbreviation From 7b051c4298816fdb70f3d301f0840379e28eca63 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Mon, 21 Oct 2024 20:57:54 +0300 Subject: [PATCH 042/149] [completion] Use ignore instead of try-completion-function in CIDER completion style (#3750) --- cider-completion.el | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/cider-completion.el b/cider-completion.el index b06899333..1e89adca2 100644 --- a/cider-completion.el +++ b/cider-completion.el @@ -256,14 +256,6 @@ in the buffer." ;; Fuzzy completion for company-mode -(defun cider-completion-try-completion (string collection pred _) - "Return longest common substring of all completions of STRING in COLLECTION, -also pass PRED to `try-completion'. - -This function is only needed to be a correct citizen in -`completion-styles-alist'." - (try-completion string collection pred)) - (defun cider-company-unfiltered-candidates (string &rest _) "Return CIDER completion candidates for STRING as is, unfiltered." (cider-complete string)) @@ -276,7 +268,8 @@ This function is only needed to be a correct citizen in ;; which introduced `cider-company-enable-fuzzy-completion') (add-to-list 'completion-styles-alist '(cider - cider-completion-try-completion + ;; Use `ignore' in place of "try-competion function". + ignore cider-company-unfiltered-candidates "CIDER backend-driven completion style.")) From 52016de3848909ccdaaf7184169d6a65004ab0ab Mon Sep 17 00:00:00 2001 From: Roman Scherer Date: Tue, 29 Oct 2024 20:27:32 +0100 Subject: [PATCH 043/149] Add cider-log-show-frameworks command This command renders the available log frameworks in a buffer. It shows the log framework name, the website and javadocs urls and the levels for now. This is mostly to address @vemv's suggestion to ask the user to run `(cider-sync-request:log-frameworks)`. I hooked the command up at the usual places and added it with a small troubleshooting section to the docs. We could get even more sophisticated and show the current appenders and consumers but I need a designer for this. Let's do this at some other point. --- CHANGELOG.md | 2 +- cider-log.el | 36 +++++++++++++++++++ doc/modules/ROOT/pages/debugging/logging.adoc | 11 ++++++ 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e52b14906..f9b58c170 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ## master (unreleased) ### Changes - +- [#3753](https://github.com/clojure-emacs/cider/pull/3753) Add `cider-log-show-frameworks` command to show available log frameworks in a buffer. - [#3746](https://github.com/clojure-emacs/cider/issues/3746): Bring back `cider` completion style for activating backend-driven completion. ### Bugs fixed diff --git a/cider-log.el b/cider-log.el index 188e88930..4f01f41cd 100644 --- a/cider-log.el +++ b/cider-log.el @@ -48,6 +48,20 @@ Example values: \"Logback\", \"Timbre\"." :safe #'stringp :type 'string) +(defcustom cider-log-frameworks-buffer "*cider-log-frameworks*" + "The name of the log frameworks popup buffer." + :group 'cider + :package-version '(cider . "1.17") + :safe #'stringp + :type 'string) + +(defcustom cider-log-auto-select-frameworks-buffer t + "Whether to auto-select the log frameworks popup buffer." + :group 'cider + :package-version '(cider . "1.17") + :safe #'booleanp + :type 'boolean) + (defcustom cider-log-appender-id "cider-log" "The name of the default log appender." :group 'cider @@ -1032,6 +1046,26 @@ the CIDER Inspector and the CIDER stacktrace mode. ;; Framework actions +(transient-define-suffix cider-log-show-frameworks () + "Show the available log frameworks in a buffer." + :description "Show frameworks in a buffer" + (interactive) + (let ((frameworks (cider-sync-request:log-frameworks))) + (with-current-buffer (cider-popup-buffer cider-log-frameworks-buffer + cider-log-auto-select-frameworks-buffer) + (read-only-mode -1) + (insert (with-temp-buffer + (insert (propertize (cider-propertize "Cider Log Frameworks" 'ns) 'ns t) "\n\n") + (dolist (framework frameworks) + (insert (propertize (cider-propertize (cider-log-framework-name framework) 'ns) 'ns t) "\n\n") + (insert (format " Website ......... %s\n" (cider-log-framework-website-url framework))) + (insert (format " Javadocs ........ %s\n" (cider-log-framework-javadoc-url framework))) + (insert (format " Levels .......... %s\n" (string-join (cider-log-framework-level-names framework) ", "))) + (newline)) + (buffer-string))) + (read-only-mode 1) + (goto-char (point-min))))) + (transient-define-suffix cider-log-browse-javadocs (framework) "Browse the Javadoc of the log FRAMEWORK." :description "Browse Java documentation" @@ -1220,6 +1254,7 @@ the CIDER Inspector and the CIDER stacktrace mode. (transient-define-prefix cider-log-framework (framework) "Show the Cider log framework menu." [["Cider Log Framework\n\nActions:" + ("a" cider-log-show-frameworks) ("b" cider-log-set-buffer) ("j" cider-log-browse-javadocs) ("s" cider-log-set-framework) @@ -1441,6 +1476,7 @@ based on `transient-mode'." (transient-define-prefix cider-log (framework appender) "Show the Cider log menu." [["Framework Actions" + ("fa" cider-log-show-frameworks) ("fs" cider-log-set-framework) ("fb" cider-log-set-buffer) ("fj" cider-log-browse-javadocs) diff --git a/doc/modules/ROOT/pages/debugging/logging.adoc b/doc/modules/ROOT/pages/debugging/logging.adoc index 02ff10ba9..9aafa335a 100644 --- a/doc/modules/ROOT/pages/debugging/logging.adoc +++ b/doc/modules/ROOT/pages/debugging/logging.adoc @@ -49,6 +49,7 @@ Its usage is mostly self-describing, since each command has its keybinding attac To use CIDER Log Mode, there two main ways to get started: +* `M-x cider-log-show-frameworks`, to see the available logging frameworks. If your logging framework is supported but not shown, see the troubleshooting section. * `M-x cider-log-event`, which uses transient-mode and will not immediately show the logs (you should use transient-mode to show the `+*cider-log*+` buffer) * `M-x cider-log-show` is a newer function that intends to be an "all-in-one" command, intended for a streamlined experience, which can be useful to get started, or for casual usage. ** It doesn't use transient-mode - it aims to do everything in one step @@ -178,6 +179,10 @@ or Clojure CLI aliases. |=== | Command | Keyboard shortcut | Description +| `cider-log-show-frameworks` +| kbd:[C-c M-l f a] +| Show all available log frameworks in a buffer. + | `cider-log-set-framework` | kbd:[C-c M-l f s] | Select the log framework to use. @@ -351,3 +356,9 @@ using logical AND condition. The following filters are available: | kbd:[-t] | Only include log events that were emitted by a thread in the list of `threads`. |=== + +== Troubleshooting + +- Make sure the logging library is actually supported by CIDER Log Mode and that it is on your classpath. +- Try requiring the https://github.com/clojure-emacs/logjam/tree/master/src/logjam/framework[Logjam] namespace of the logging library, e.g. `(require 'logjam.framework. :reload)` and make sure it can be loaded without errors. +- Timbre and Encore often have to be upgraded in concert, they use "break versioning". It's often useful to have Timbre + Encore at the latest stable version. From c7bed56c3dac124c232956c96957e21bbaf3749f Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Thu, 31 Oct 2024 09:49:51 +0200 Subject: [PATCH 044/149] Tweak some changelog entries --- CHANGELOG.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f9b58c170..2d4c41387 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,13 +3,14 @@ ## master (unreleased) ### Changes -- [#3753](https://github.com/clojure-emacs/cider/pull/3753) Add `cider-log-show-frameworks` command to show available log frameworks in a buffer. + +- [#3753](https://github.com/clojure-emacs/cider/pull/3753): Add `cider-log-show-frameworks` command to show available log frameworks in a buffer. - [#3746](https://github.com/clojure-emacs/cider/issues/3746): Bring back `cider` completion style for activating backend-driven completion. ### Bugs fixed -- [#3742](https://github.com/clojure-emacs/cider/issues/3742): Restore syntax highlighting in result minibuffer. -- [#3747](https://github.com/clojure-emacs/cider/issues/3747): Fix errors when docstring is nil. +- [#3742](https://github.com/clojure-emacs/cider/issues/3742): Restore syntax highlighting of result in the minibuffer. +- [#3747](https://github.com/clojure-emacs/cider/issues/3747): Fix errors when docstring is `nil`. ## 1.16.0 (2024-09-24) From 9f2d715f5faa1c0d8e596abab1f82fb2722333a4 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Thu, 14 Nov 2024 21:19:47 +0200 Subject: [PATCH 045/149] [inspector] Fix def-current-value selecting wrong REPL --- CHANGELOG.md | 1 + cider-inspector.el | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d4c41387..004922675 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ - [#3742](https://github.com/clojure-emacs/cider/issues/3742): Restore syntax highlighting of result in the minibuffer. - [#3747](https://github.com/clojure-emacs/cider/issues/3747): Fix errors when docstring is `nil`. +- [#3757](https://github.com/clojure-emacs/cider/issues/3757): Fix inspector's def-current-value selecting wrong REPL when multiple are connected. ## 1.16.0 (2024-09-24) diff --git a/cider-inspector.el b/cider-inspector.el index 79a21efcd..17567b555 100644 --- a/cider-inspector.el +++ b/cider-inspector.el @@ -388,7 +388,6 @@ current-namespace." (interactive (let ((ns (cider-current-ns))) (list (cider-inspector--read-var-name-from-user ns) ns))) - (setq cider-inspector--current-repl (cider-current-repl)) (when-let* ((result (cider-sync-request:inspect-def-current-val ns var-name 'v2))) (cider-inspector--render-value result 'v2) (message "Defined current inspector value as #'%s/%s" ns var-name))) From c228dec27df6b2c68262f17158208fe699e1ce02 Mon Sep 17 00:00:00 2001 From: "D.K." Date: Fri, 15 Nov 2024 04:43:20 +0100 Subject: [PATCH 046/149] [Fix #3754] Don't match ns in a string --- CHANGELOG.md | 2 +- cider-client.el | 2 +- test/cider-client-tests.el | 11 +++++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 004922675..881df3f79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ## master (unreleased) ### Changes - +- [#3754](https://github.com/clojure-emacs/cider/issues/3754): Fix regex in `cider-ns-from-p`. - [#3753](https://github.com/clojure-emacs/cider/pull/3753): Add `cider-log-show-frameworks` command to show available log frameworks in a buffer. - [#3746](https://github.com/clojure-emacs/cider/issues/3746): Bring back `cider` completion style for activating backend-driven completion. diff --git a/cider-client.el b/cider-client.el index 0ae4025bd..26b222998 100644 --- a/cider-client.el +++ b/cider-client.el @@ -108,7 +108,7 @@ EVAL-BUFFER is the buffer where the spinner was started." ;;; Evaluation helpers (defun cider-ns-form-p (form) "Check if FORM is an ns form." - (string-match-p "^[[:space:]]*\(ns\\([[:space:]]*$\\|[[:space:]]+\\)" form)) + (string-match-p "\\`[[:space:]]*\(ns\\([[:space:]]*$\\|[[:space:]]+\\)" form)) (defun cider-ns-from-form (ns-form) "Get ns substring from NS-FORM." diff --git a/test/cider-client-tests.el b/test/cider-client-tests.el index 99516cdd0..7fbf8360c 100644 --- a/test/cider-client-tests.el +++ b/test/cider-client-tests.el @@ -132,6 +132,17 @@ (expect (cider-ensure-op-supported "foo") :to-throw 'user-error))) +(describe "cider-ns-form-p" + (it "doesn't match ns in a string" + (let ((ns-in-string "\"\n(ns bar)\n\"")) + (expect (cider-ns-form-p ns-in-string) :to-equal nil))) + (it "matches ns" + (let ((ns "(ns bar)\n")) + (expect (cider-ns-form-p ns) :to-equal 0))) + (it "matches ns with leading spaces" + (let ((ns " (ns bar)\n")) + (expect (cider-ns-form-p ns) :to-equal 0)))) + (describe "cider-expected-ns" (before-each (spy-on 'cider-connected-p :and-return-value t) From f7bcd9d47478e5e5553cd5259ef1716ec18d0876 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Tue, 3 Dec 2024 16:42:08 +0200 Subject: [PATCH 047/149] Bump cider-nrepl to 0.50.3 (#3759) --- CHANGELOG.md | 2 + cider.el | 2 +- dev/docker-sample-project/project.clj | 2 +- dev/tramp-sample-project/project.clj | 2 +- .../ROOT/pages/basics/middleware_setup.adoc | 12 ++--- .../ROOT/pages/basics/up_and_running.adoc | 4 +- doc/modules/ROOT/pages/cljs/shadow-cljs.adoc | 2 +- .../ROOT/pages/cljs/up_and_running.adoc | 2 +- test/cider-tests.el | 44 +++++++++---------- 9 files changed, 37 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 881df3f79..3005b1742 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ ## master (unreleased) ### Changes + +- Bump the injected `cider-nrepl` to [0.50.3](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0503-2024-12-02). - [#3754](https://github.com/clojure-emacs/cider/issues/3754): Fix regex in `cider-ns-from-p`. - [#3753](https://github.com/clojure-emacs/cider/pull/3753): Add `cider-log-show-frameworks` command to show available log frameworks in a buffer. - [#3746](https://github.com/clojure-emacs/cider/issues/3746): Bring back `cider` completion style for activating backend-driven completion. diff --git a/cider.el b/cider.el index ec5f5f92d..b34a0469a 100644 --- a/cider.el +++ b/cider.el @@ -573,7 +573,7 @@ the artifact.") Used when `cider-jack-in-auto-inject-clojure' is set to `latest'.") -(defconst cider-required-middleware-version "0.50.2" +(defconst cider-required-middleware-version "0.50.3" "The CIDER nREPL version that's known to work properly with CIDER.") (defcustom cider-injected-middleware-version cider-required-middleware-version diff --git a/dev/docker-sample-project/project.clj b/dev/docker-sample-project/project.clj index d640f9933..08ec5aa34 100644 --- a/dev/docker-sample-project/project.clj +++ b/dev/docker-sample-project/project.clj @@ -2,4 +2,4 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.50.2"]]) + :plugins [[cider/cider-nrepl "0.50.3"]]) diff --git a/dev/tramp-sample-project/project.clj b/dev/tramp-sample-project/project.clj index f97ead85d..b72d27a1b 100644 --- a/dev/tramp-sample-project/project.clj +++ b/dev/tramp-sample-project/project.clj @@ -2,5 +2,5 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.50.2"] + :plugins [[cider/cider-nrepl "0.50.3"] [refactor-nrepl "3.9.0"]]) diff --git a/doc/modules/ROOT/pages/basics/middleware_setup.adoc b/doc/modules/ROOT/pages/basics/middleware_setup.adoc index fc98507fd..d10d2d044 100644 --- a/doc/modules/ROOT/pages/basics/middleware_setup.adoc +++ b/doc/modules/ROOT/pages/basics/middleware_setup.adoc @@ -32,14 +32,14 @@ Use the convenient plugin for defaults, either in your project's [source,clojure] ---- -:plugins [[cider/cider-nrepl "0.50.2"]] +:plugins [[cider/cider-nrepl "0.50.3"]] ---- A minimal `profiles.clj` for CIDER would be: [source,clojure] ---- -{:repl {:plugins [[cider/cider-nrepl "0.50.2"]]}} +{:repl {:plugins [[cider/cider-nrepl "0.50.3"]]}} ---- WARNING: Be careful not to place this in the `:user` profile, as this way CIDER's @@ -59,7 +59,7 @@ all of their projects using a `~/.boot/profile.boot` file like so: (require 'boot.repl) (swap! boot.repl/*default-dependencies* - concat '[[cider/cider-nrepl "0.50.2"]]) + concat '[[cider/cider-nrepl "0.50.3"]]) (swap! boot.repl/*default-middleware* conj 'cider.nrepl/cider-middleware) @@ -76,11 +76,11 @@ run `cider-connect` or `cider-connect-cljs`. [source,clojure] ---- - :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.50.2"}} + :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.50.3"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware]"]} :cider-cljs {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.339"} - cider/cider-nrepl {:mvn/version "0.50.2"} + cider/cider-nrepl {:mvn/version "0.50.3"} cider/piggieback {:mvn/version "0.5.3"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware,cider.piggieback/wrap-cljs-repl]"]} @@ -99,7 +99,7 @@ NOTE: Make sure you're using https://github.com/clojurephant/clojurephant[Clojur ---- dependencies { devImplementation 'nrepl:nrepl:0.9.0' - devImplementation 'cider:cider-nrepl:0.50.2' + devImplementation 'cider:cider-nrepl:0.50.3' } tasks.named('clojureRepl') { diff --git a/doc/modules/ROOT/pages/basics/up_and_running.adoc b/doc/modules/ROOT/pages/basics/up_and_running.adoc index f3aeab6c2..02cd3e3c0 100644 --- a/doc/modules/ROOT/pages/basics/up_and_running.adoc +++ b/doc/modules/ROOT/pages/basics/up_and_running.adoc @@ -73,7 +73,7 @@ simple - CIDER simply passes the extra dependencies and nREPL configuration to your build tool in the command it runs to start the nREPL server. Here's how this looks for `tools.deps`: - $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.0"} cider/cider-nrepl {:mvn/version "0.50.2"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' + $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.0"} cider/cider-nrepl {:mvn/version "0.50.3"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' TIP: If you don't want `cider-jack-in` to inject dependencies automatically, set `cider-inject-dependencies-at-jack-in` to `nil`. Note that you'll have to setup @@ -350,7 +350,7 @@ It is also possible for plain `clj`, although the command is somewhat longer: [source,sh] ---- -$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.50.2"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" +$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.50.3"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" ---- Alternatively, you can start nREPL either manually or using the facilities diff --git a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc index b66ecbe1a..63a26f705 100644 --- a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc +++ b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc @@ -62,7 +62,7 @@ And connect to it with `cider-connect`. ...For that to work, `shadow-cljs.edn` contents like the following are assumed: ```clj - :dependencies [[cider/cider-nrepl "0.50.2"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) + :dependencies [[cider/cider-nrepl "0.50.3"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) [refactor-nrepl/refactor-nrepl "3.9.0"]] ;; refactor-nrepl is optional :nrepl {:middleware [cider.nrepl/cider-middleware ;; it's advisable to explicitly add this middleware. It's automatically added by shadow-cljs (if available in the classpath), unless `:nrepl {:cider false}` diff --git a/doc/modules/ROOT/pages/cljs/up_and_running.adoc b/doc/modules/ROOT/pages/cljs/up_and_running.adoc index b372f6c8c..aec59e935 100644 --- a/doc/modules/ROOT/pages/cljs/up_and_running.adoc +++ b/doc/modules/ROOT/pages/cljs/up_and_running.adoc @@ -61,7 +61,7 @@ or in `build.gradle`: ---- dependencies { devImplementation 'nrepl:nrepl:1.3.0' - devImplementation 'cider:cider-nrepl:0.50.2' + devImplementation 'cider:cider-nrepl:0.50.3' devImplementation 'cider:cider-piggieback:0.5.3' } diff --git a/test/cider-tests.el b/test/cider-tests.el index 1cdbd8817..aeb603266 100644 --- a/test/cider-tests.el +++ b/test/cider-tests.el @@ -144,7 +144,7 @@ (describe "when there is a single dependency" (before-each (setq-local cider-injected-nrepl-version "0.9.0") - (setq-local cider-injected-middleware-version "0.50.2") + (setq-local cider-injected-middleware-version "0.50.3") (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t) @@ -155,7 +155,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.50.2\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.50.3\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -169,7 +169,7 @@ "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.50.2\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.50.3\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -182,7 +182,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure foo.bar/baz]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.50.2\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.50.3\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -196,7 +196,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.50.2") + (shell-quote-argument "cider/cider-nrepl:0.50.3") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -206,7 +206,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.50.2") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.50.3") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -223,7 +223,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.50.2\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.50.3\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -237,7 +237,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.50.2") + (shell-quote-argument "cider/cider-nrepl:0.50.3") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -259,7 +259,7 @@ :to-equal (concat "-o -U update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.50.2\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.50.3\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -271,7 +271,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.50.2") + (shell-quote-argument "cider/cider-nrepl:0.50.3") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -280,7 +280,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.50.2") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.50.3") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -295,14 +295,14 @@ (setq-local cider-jack-in-nrepl-middlewares '(("refactor-nrepl.middleware/wrap-refactor" :predicate middlewares-predicate) "cider.nrepl/cider-middleware" ("another/middleware")))) (it "includes plugins whose predicates return true" (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.50.2")))) + :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.50.3")))) (it "includes middlewares whose predicates return true" (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware" "another/middleware"))) (it "ignores plugins whose predicates return false" (spy-on 'plugins-predicate :and-return-value nil) (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("cider/cider-nrepl" "0.50.2"))) + :to-equal '(("cider/cider-nrepl" "0.50.3"))) (spy-on 'middlewares-predicate :and-return-value nil) (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("cider.nrepl/cider-middleware" "another/middleware"))) @@ -331,7 +331,7 @@ :and-return-value '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware")) (spy-on 'cider-jack-in-normalized-lein-plugins :and-return-value '(("refactor-nrepl" "2.0.0") - ("cider/cider-nrepl" "0.50.2") + ("cider/cider-nrepl" "0.50.3") ("mx.cider/lein-enrich-classpath" "1.19.3"))) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t)) @@ -342,7 +342,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.50.2\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.50.3\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -361,7 +361,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.50.2") + (shell-quote-argument "cider/cider-nrepl:0.50.3") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -456,7 +456,7 @@ (setq-local cider-jack-in-dependencies nil) (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.50.2\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.50.3\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) @@ -471,7 +471,7 @@ (it "allows specifying custom aliases with `cider-clojure-cli-aliases`" (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.50.2\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.50.3\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:dev:test:cider/nrepl") ""))) (setq-local cider-jack-in-dependencies nil) @@ -489,7 +489,7 @@ (it (format "should remove duplicates, yielding the same result (for %S command invocation)" command) ;; repeat the same test for PowerShell too (let ((expected (string-join `("-Sdeps " - ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.50.2\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" + ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.50.3\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" command) " -M:dev:test:cider/nrepl") ""))) @@ -499,7 +499,7 @@ :to-equal expected)))) (it "handles aliases correctly" (let ((expected (string-join `("-Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.50.2\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.50.3\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -527,7 +527,7 @@ :to-equal expected))))) (it "allows for global options" (let ((expected (string-join `("-J-Xverify:none -Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.50.2\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.50.3\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -538,7 +538,7 @@ (setq-local cider-jack-in-dependencies '(("org.clojure/tools.deps" (("git/sha" . "6ae2b6f71773de7549d7f22759e8b09fec27f0d9") ("git/url" . "https://github.com/clojure/tools.deps/"))))) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.50.2\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.50.3\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) From 9b92811491391b0d2d90ea634cfcbb9212ffa4b5 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Tue, 3 Dec 2024 16:37:39 +0100 Subject: [PATCH 048/149] Tweak a couple of changelog entries --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3005b1742..f7b83435c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,6 @@ ### Changes - Bump the injected `cider-nrepl` to [0.50.3](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0503-2024-12-02). -- [#3754](https://github.com/clojure-emacs/cider/issues/3754): Fix regex in `cider-ns-from-p`. - [#3753](https://github.com/clojure-emacs/cider/pull/3753): Add `cider-log-show-frameworks` command to show available log frameworks in a buffer. - [#3746](https://github.com/clojure-emacs/cider/issues/3746): Bring back `cider` completion style for activating backend-driven completion. @@ -13,7 +12,8 @@ - [#3742](https://github.com/clojure-emacs/cider/issues/3742): Restore syntax highlighting of result in the minibuffer. - [#3747](https://github.com/clojure-emacs/cider/issues/3747): Fix errors when docstring is `nil`. -- [#3757](https://github.com/clojure-emacs/cider/issues/3757): Fix inspector's def-current-value selecting wrong REPL when multiple are connected. +- [#3757](https://github.com/clojure-emacs/cider/issues/3757): Fix inspector's `def-current-value` selecting wrong REPL when multiple are connected. +- [#3754](https://github.com/clojure-emacs/cider/issues/3754): Fix regex in `cider-ns-from-p`. ## 1.16.0 (2024-09-24) From 588c5790f0c09f5c09076885e11a73eaef70c262 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Tue, 3 Dec 2024 18:07:20 +0200 Subject: [PATCH 049/149] Release 1.16.1 (#3760) --- CHANGELOG.md | 2 ++ cider.el | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f7b83435c..198b40659 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## master (unreleased) +## 1.16.1 (2024-12-03) + ### Changes - Bump the injected `cider-nrepl` to [0.50.3](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0503-2024-12-02). diff --git a/cider.el b/cider.el index b34a0469a..04004a410 100644 --- a/cider.el +++ b/cider.el @@ -11,7 +11,7 @@ ;; Steve Purcell ;; Maintainer: Bozhidar Batsov ;; URL: https://www.github.com/clojure-emacs/cider -;; Version: 1.16.0 +;; Version: 1.16.1 ;; Package-Requires: ((emacs "26") (clojure-mode "5.19") (parseedn "1.2.1") (queue "0.2") (spinner "1.7") (seq "2.22") (sesman "0.3.2") (transient "0.4.1")) ;; Keywords: languages, clojure, cider @@ -93,7 +93,7 @@ (require 'sesman) (require 'package) -(defconst cider-version "1.16.0" +(defconst cider-version "1.16.1" "The current version of CIDER.") (defconst cider-codename "Kherson" From 430cfd40c57ad3ba4ef39262acf411531dc734f5 Mon Sep 17 00:00:00 2001 From: Vedang Manerikar Date: Mon, 23 Dec 2024 18:50:11 +0530 Subject: [PATCH 050/149] [Fix #3763] Do not call cider-docstring fns unless we have a doc (#3764) Sometimes, there is no "doc" attribute in the nrepl-dict. In such cases, `fetched-doc` is nil, which causes `cider-docstring--*` functions to error. We should only call these functions when we have a docstring to render. --- CHANGELOG.md | 4 ++++ cider-doc.el | 9 +++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 198b40659..6417918f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## master (unreleased) +### Bugs fixed + +- [#3763](https://github.com/clojure-emacs/cider/issues/3763): Fix `cider-docview-render` completion popup error when symbol being completed does not have a docstring. + ## 1.16.1 (2024-12-03) ### Changes diff --git a/cider-doc.el b/cider-doc.el index addfdeb82..d76c205e2 100644 --- a/cider-doc.el +++ b/cider-doc.el @@ -428,10 +428,11 @@ in a COMPACT format is specified, FOR-TOOLTIP if specified." "doc-first-sentence-fragments" (nrepl-dict-get info "doc-first-sentence-fragments")))) (fetched-doc (nrepl-dict-get info "doc")) (doc (or rendered-fragments - (if compact - (cider-docstring--trim - (cider-docstring--format fetched-doc)) - fetched-doc) + (when fetched-doc + (if compact + (cider-docstring--trim + (cider-docstring--format fetched-doc)) + fetched-doc)) (unless compact "Not documented."))) (url (nrepl-dict-get info "url")) From 1fa3f7c736ee0236b154c9897f37c226fae0e3ae Mon Sep 17 00:00:00 2001 From: Baptiste Strazzulla Date: Thu, 9 Nov 2023 17:18:33 +0100 Subject: [PATCH 051/149] New value `per-project` for `cider-repl-history-file` To save the history on a per-project basis. --- CHANGELOG.md | 4 ++ cider-repl-history.el | 1 - cider-repl.el | 55 +++++++++++++------ .../ROOT/pages/repl/configuration.adoc | 15 ++++- 4 files changed, 53 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6417918f1..4faa571e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## master (unreleased) +### Changes + +- [#3574](https://github.com/clojure-emacs/cider/issues/3574): New value `per-project` for `cider-repl-history-file` to save the history on a per-project basis. + ### Bugs fixed - [#3763](https://github.com/clojure-emacs/cider/issues/3763): Fix `cider-docview-render` completion popup error when symbol being completed does not have a docstring. diff --git a/cider-repl-history.el b/cider-repl-history.el index ec19298ad..e64c773af 100644 --- a/cider-repl-history.el +++ b/cider-repl-history.el @@ -220,7 +220,6 @@ call `cider-repl-history' again.") (defvar cider-repl-history-previous-overlay nil "Previous overlay within *cider-repl-history* buffer.") - (defun cider-repl-history-get-history () "Function to retrieve history from the REPL buffer." (if cider-repl-history-repl-buffer diff --git a/cider-repl.el b/cider-repl.el index 9fd17c4f6..7d967da29 100644 --- a/cider-repl.el +++ b/cider-repl.el @@ -194,9 +194,6 @@ CIDER 1.7." This property value must be unique to avoid having adjacent inputs be joined together.") -(defvar-local cider-repl-input-history '() - "History list of strings read from the REPL buffer.") - (defvar-local cider-repl-input-history-items-added 0 "Variable counting the items added in the current session.") @@ -1468,6 +1465,9 @@ WIN, BUFFER and POS are the window, buffer and point under mouse position." (defvar cider-repl-history-pattern nil "The regexp most recently used for finding input history.") +(defvar cider-repl-input-history '() + "History list of strings read from the REPL buffer.") + (defun cider-repl--add-to-input-history (string) "Add STRING to the input history. Empty strings and duplicates are ignored." @@ -1593,9 +1593,11 @@ If USE-CURRENT-INPUT is non-nil, use the current input." :safe #'integerp) (defcustom cider-repl-history-file nil - "File to save the persistent REPL history to." - :type 'string - :safe #'stringp) + "File to save the persistent REPL history to. +If this is set to a path the history will be global to all projects. If this is +set to `per-project', the history will be stored in a file (.cider-history) at +the root of each project." + :type '(choice string symbol)) (defun cider-repl--history-read-filename () "Ask the user which file to use, defaulting `cider-repl-history-file'." @@ -1619,11 +1621,27 @@ defined filenames can be used to read special history files. The value of `cider-repl-input-history' is set by this function." (interactive (list (cider-repl--history-read-filename))) - (let ((f (or filename cider-repl-history-file))) - ;; TODO: probably need to set cider-repl-input-history-position as well. - ;; in a fresh connection the newest item in the list is currently - ;; not available. After sending one input, everything seems to work. - (setq cider-repl-input-history (cider-repl--history-read f)))) + (cond + (filename (setq cider-repl-history-file filename)) + ((equal 'per-project cider-repl-history-file) + (make-local-variable 'cider-repl-input-history) + (when-let ((dir (clojure-project-dir))) + (setq-local + cider-repl-history-file (expand-file-name ".cider-history" dir))))) + (when cider-repl-history-file + (condition-case nil + ;; TODO: probably need to set cider-repl-input-history-position as + ;; well. In a fresh connection the newest item in the list is + ;; currently not available. After sending one input, everything + ;; seems to work. + (setq + cider-repl-input-history + (cider-repl--history-read cider-repl-history-file)) + (error + (message + "Malformed cider-repl-history-file: %s" cider-repl-history-file))) + (add-hook 'kill-buffer-hook #'cider-repl-history-just-save t t) + (add-hook 'kill-emacs-hook #'cider-repl-history-save-all))) (defun cider-repl--history-write (filename) "Write history to FILENAME. @@ -1658,6 +1676,13 @@ This function is meant to be used in hooks to avoid lambda constructs." (cider-repl-history-save cider-repl-history-file)) +(defun cider-repl-history-save-all () + "Save all histories." + (dolist (buffer (buffer-list)) + (with-current-buffer buffer + (when (equal major-mode 'cider-repl-mode) + (cider-repl-history-just-save))))) + ;; SLIME has different semantics and will not save any duplicates. ;; we keep track of how many items were added to the history in the ;; current session in `cider-repl--add-to-input-history' and merge only the @@ -2051,13 +2076,7 @@ in an unexpected place." (setq-local prettify-symbols-alist clojure--prettify-symbols-alist) ;; apply dir-local variables to REPL buffers (hack-dir-local-variables-non-file-buffer) - (when cider-repl-history-file - (condition-case nil - (cider-repl-history-load cider-repl-history-file) - (error - (message "Malformed cider-repl-history-file: %s" cider-repl-history-file))) - (add-hook 'kill-buffer-hook #'cider-repl-history-just-save t t) - (add-hook 'kill-emacs-hook #'cider-repl-history-just-save)) + (cider-repl-history-load) (add-hook 'completion-at-point-functions #'cider-complete-at-point nil t) (add-hook 'paredit-mode-hook (lambda () (clojure-paredit-setup cider-repl-mode-map))) (cider-repl-setup-paredit)) diff --git a/doc/modules/ROOT/pages/repl/configuration.adoc b/doc/modules/ROOT/pages/repl/configuration.adoc index 774abc889..39458d474 100644 --- a/doc/modules/ROOT/pages/repl/configuration.adoc +++ b/doc/modules/ROOT/pages/repl/configuration.adoc @@ -340,12 +340,21 @@ reset automatically by the `track-state` middleware. (setq cider-repl-history-size 1000) ; the default is 500 ---- -* To store the REPL history in a file: +* To store the REPL history of all projects in a single file: [source,lisp] ---- (setq cider-repl-history-file "path/to/file") ---- -Note that CIDER writes the history to the file when you kill the REPL -buffer, which includes invoking `cider-quit`, or when you quit Emacs. +* To store the REPL history per project (by creating a + `.cider-history` file at the root of each): + +[source,lisp] +---- +(setq cider-repl-history-file 'per-project) +---- + +Note that CIDER writes the history to the file(s) when you kill the +REPL buffer, which includes invoking `cider-quit`, or when you quit +Emacs. From 44a91a4f9310a5b6f20a70c6c6a7d20360e10b74 Mon Sep 17 00:00:00 2001 From: Baptiste Strazzulla Date: Wed, 8 Nov 2023 00:53:41 +0100 Subject: [PATCH 052/149] Stop merging the input history with `cider-repl-history-file' Because input history cannot be changed by another REPL anymore --- cider-repl.el | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/cider-repl.el b/cider-repl.el index 7d967da29..c8155beeb 100644 --- a/cider-repl.el +++ b/cider-repl.el @@ -194,9 +194,6 @@ CIDER 1.7." This property value must be unique to avoid having adjacent inputs be joined together.") -(defvar-local cider-repl-input-history-items-added 0 - "Variable counting the items added in the current session.") - (defvar-local cider-repl-output-start nil "Marker for the start of output. Currently its only purpose is to facilitate `cider-repl-clear-buffer'.") @@ -1473,8 +1470,7 @@ WIN, BUFFER and POS are the window, buffer and point under mouse position." Empty strings and duplicates are ignored." (unless (or (equal string "") (equal string (car cider-repl-input-history))) - (push string cider-repl-input-history) - (cl-incf cider-repl-input-history-items-added))) + (push string cider-repl-input-history))) (defun cider-repl-delete-current-input () "Delete all text after the prompt." @@ -1647,11 +1643,9 @@ The value of `cider-repl-input-history' is set by this function." "Write history to FILENAME. Currently coding system for writing the contents is hardwired to utf-8-unix." - (let* ((mhist (cider-repl--histories-merge cider-repl-input-history - cider-repl-input-history-items-added - (cider-repl--history-read filename))) + (let* ((end (min (length cider-repl-input-history) cider-repl-history-size)) ;; newest items are at the beginning of the list, thus 0 - (hist (cl-subseq mhist 0 (min (length mhist) cider-repl-history-size)))) + (hist (cl-subseq cider-repl-input-history 0 end))) (unless (file-writable-p filename) (error (format "History file not writable: %s" filename))) (let ((print-length nil) (print-level nil)) @@ -1683,16 +1677,6 @@ constructs." (when (equal major-mode 'cider-repl-mode) (cider-repl-history-just-save))))) -;; SLIME has different semantics and will not save any duplicates. -;; we keep track of how many items were added to the history in the -;; current session in `cider-repl--add-to-input-history' and merge only the -;; new items with the current history found in the file, which may -;; have been changed in the meantime by another session. -(defun cider-repl--histories-merge (session-hist n-added-items file-hist) - "Merge histories from SESSION-HIST adding N-ADDED-ITEMS into FILE-HIST." - (append (cl-subseq session-hist 0 n-added-items) - file-hist)) - ;;; REPL shortcuts (defcustom cider-repl-shortcut-dispatch-char ?\, From af2bfc28ef34ec70745f9a4bacd7c485dc3eaf9d Mon Sep 17 00:00:00 2001 From: Baptiste Strazzulla Date: Fri, 10 Nov 2023 13:11:22 +0100 Subject: [PATCH 053/149] Find a suitable directory to store the project's history more robustly --- cider-repl.el | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cider-repl.el b/cider-repl.el index c8155beeb..6c89426fb 100644 --- a/cider-repl.el +++ b/cider-repl.el @@ -1610,6 +1610,12 @@ It does not yet set the input history." (read (current-buffer)))) '())) +(defun cider-repl--find-dir-for-history () + "Find the first suitable directory to store the project's history." + (seq-find + (lambda (dir) (and (not (null dir)) (not (tramp-tramp-file-p dir)))) + (list nrepl-project-dir (clojure-project-dir) default-directory))) + (defun cider-repl-history-load (&optional filename) "Load history from FILENAME into current session. FILENAME defaults to the value of `cider-repl-history-file' but user @@ -1621,7 +1627,7 @@ The value of `cider-repl-input-history' is set by this function." (filename (setq cider-repl-history-file filename)) ((equal 'per-project cider-repl-history-file) (make-local-variable 'cider-repl-input-history) - (when-let ((dir (clojure-project-dir))) + (when-let ((dir (cider-repl--find-dir-for-history))) (setq-local cider-repl-history-file (expand-file-name ".cider-history" dir))))) (when cider-repl-history-file From 62bc5906199a3a39a1efd7ecebed8d090aec817e Mon Sep 17 00:00:00 2001 From: Baptiste Strazzulla Date: Tue, 7 Nov 2023 23:38:16 +0100 Subject: [PATCH 054/149] Calculate the length of the history only once --- cider-repl-history.el | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/cider-repl-history.el b/cider-repl-history.el index e64c773af..e7b08cd35 100644 --- a/cider-repl-history.el +++ b/cider-repl-history.el @@ -636,16 +636,17 @@ HISTORY-BUF is the history, and optional arg REGEXP is a filter." #'cider-repl-history-update-highlighted-entry nil t)) (message - (let ((entry (if (= 1 (length cider-command-history)) - "entry" - "entries"))) + (let* ((history-length (length cider-command-history)) + (entry (if (= 1 history-length) + "entry" + "entries"))) (concat (if (and (not regexp) cider-repl-history-display-duplicates) (format "%s %s in the command history." - (length cider-command-history) entry) + history-length entry) (format "%s (of %s) %s in the command history shown." - (length items) (length cider-command-history) entry)) + (length items) history-length entry)) (substitute-command-keys (concat " Type \\[cider-repl-history-quit] to quit. " "\\[describe-mode] for help."))))) From f009efed1aa2a8fdbb0246925811c02f9cb02e33 Mon Sep 17 00:00:00 2001 From: Baptiste Strazzulla Date: Wed, 8 Nov 2023 00:53:23 +0100 Subject: [PATCH 055/149] Add a command to delete history item at point --- CHANGELOG.md | 3 +++ cider-repl-history.el | 11 +++++++++++ doc/modules/ROOT/pages/repl/history.adoc | 3 +++ 3 files changed, 17 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4faa571e0..6838c3737 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ ## master (unreleased) +### New features +- CIDER [History](https://docs.cider.mx/cider/repl/history.html): Add a command to delete history item at point. + ### Changes - [#3574](https://github.com/clojure-emacs/cider/issues/3574): New value `per-project` for `cider-repl-history-file` to save the history on a per-project basis. diff --git a/cider-repl-history.el b/cider-repl-history.el index e7b08cd35..c205b6502 100644 --- a/cider-repl-history.el +++ b/cider-repl-history.el @@ -575,6 +575,16 @@ text from the *cider-repl-history* buffer." (with-current-buffer cider-repl-history-repl-buffer (undo))) +(defun cider-repl-history-delete-entry-at-point () + "Delete history entry (at point)." + (interactive) + (let* ((orig (point)) + (str (cider-repl-history-current-string orig))) + (with-current-buffer cider-repl-history-repl-buffer + (delete str cider-repl-input-history)) + (cider-repl-history-update) + (goto-char orig))) + (defun cider-repl-history-setup (repl-win repl-buf history-buf &optional regexp) "Setup. REPL-WIN and REPL-BUF are where to insert commands; @@ -693,6 +703,7 @@ HISTORY-BUF is the history, and optional arg REGEXP is a filter." (define-key map (kbd "g") #'cider-repl-history-update) (define-key map (kbd "q") #'cider-repl-history-quit) (define-key map (kbd "U") #'cider-repl-history-undo-other-window) + (define-key map (kbd "D") #'cider-repl-history-delete-entry-at-point) (define-key map (kbd "?") #'describe-mode) (define-key map (kbd "h") #'describe-mode) map)) diff --git a/doc/modules/ROOT/pages/repl/history.adoc b/doc/modules/ROOT/pages/repl/history.adoc index 7e095ee43..88a34a1a2 100644 --- a/doc/modules/ROOT/pages/repl/history.adoc +++ b/doc/modules/ROOT/pages/repl/history.adoc @@ -175,4 +175,7 @@ There are a number of important keybindings in history buffers. | kbd:[U] | Undo in the REPL buffer. + +| kbd:[D] +| Delete history item (at point). |=== From 356c2bd2aef92d83756568b500953bc03e86006a Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Wed, 1 Jan 2025 23:46:38 +0200 Subject: [PATCH 056/149] Bump nrepl to 1.3.1 and cider-nrepl to 0.51.0 (#3767) --- CHANGELOG.md | 2 + cider.el | 4 +- dev/docker-sample-project/project.clj | 2 +- dev/tramp-sample-project/project.clj | 2 +- .../ROOT/pages/basics/middleware_setup.adoc | 12 ++--- .../ROOT/pages/basics/up_and_running.adoc | 4 +- doc/modules/ROOT/pages/cljs/shadow-cljs.adoc | 2 +- .../ROOT/pages/cljs/up_and_running.adoc | 4 +- test/cider-tests.el | 44 +++++++++---------- 9 files changed, 39 insertions(+), 37 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6838c3737..81c4e9eb3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ ### Changes +- Bump the injected nREPL version to [1.3.1](https://github.com/nrepl/nrepl/blob/master/CHANGELOG.md#131-2025-01-01). +- Bump the injected `cider-nrepl` to [0.51.0](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0510-2025-01-01). - [#3574](https://github.com/clojure-emacs/cider/issues/3574): New value `per-project` for `cider-repl-history-file` to save the history on a per-project basis. ### Bugs fixed diff --git a/cider.el b/cider.el index 04004a410..c70c1716c 100644 --- a/cider.el +++ b/cider.el @@ -542,7 +542,7 @@ Throws an error if PROJECT-TYPE is unknown." "List of dependencies where elements are lists of artifact name and version.") (put 'cider-jack-in-dependencies 'risky-local-variable t) -(defcustom cider-injected-nrepl-version "1.3.0" +(defcustom cider-injected-nrepl-version "1.3.1" "The version of nREPL injected on jack-in. We inject the newest known version of nREPL just in case your version of Boot or Leiningen is bundling an older one." @@ -573,7 +573,7 @@ the artifact.") Used when `cider-jack-in-auto-inject-clojure' is set to `latest'.") -(defconst cider-required-middleware-version "0.50.3" +(defconst cider-required-middleware-version "0.51.0" "The CIDER nREPL version that's known to work properly with CIDER.") (defcustom cider-injected-middleware-version cider-required-middleware-version diff --git a/dev/docker-sample-project/project.clj b/dev/docker-sample-project/project.clj index 08ec5aa34..f2f559c05 100644 --- a/dev/docker-sample-project/project.clj +++ b/dev/docker-sample-project/project.clj @@ -2,4 +2,4 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.50.3"]]) + :plugins [[cider/cider-nrepl "0.51.0"]]) diff --git a/dev/tramp-sample-project/project.clj b/dev/tramp-sample-project/project.clj index b72d27a1b..ca5e187f8 100644 --- a/dev/tramp-sample-project/project.clj +++ b/dev/tramp-sample-project/project.clj @@ -2,5 +2,5 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.50.3"] + :plugins [[cider/cider-nrepl "0.51.0"] [refactor-nrepl "3.9.0"]]) diff --git a/doc/modules/ROOT/pages/basics/middleware_setup.adoc b/doc/modules/ROOT/pages/basics/middleware_setup.adoc index d10d2d044..77c5ff5b2 100644 --- a/doc/modules/ROOT/pages/basics/middleware_setup.adoc +++ b/doc/modules/ROOT/pages/basics/middleware_setup.adoc @@ -32,14 +32,14 @@ Use the convenient plugin for defaults, either in your project's [source,clojure] ---- -:plugins [[cider/cider-nrepl "0.50.3"]] +:plugins [[cider/cider-nrepl "0.51.0"]] ---- A minimal `profiles.clj` for CIDER would be: [source,clojure] ---- -{:repl {:plugins [[cider/cider-nrepl "0.50.3"]]}} +{:repl {:plugins [[cider/cider-nrepl "0.51.0"]]}} ---- WARNING: Be careful not to place this in the `:user` profile, as this way CIDER's @@ -59,7 +59,7 @@ all of their projects using a `~/.boot/profile.boot` file like so: (require 'boot.repl) (swap! boot.repl/*default-dependencies* - concat '[[cider/cider-nrepl "0.50.3"]]) + concat '[[cider/cider-nrepl "0.51.0"]]) (swap! boot.repl/*default-middleware* conj 'cider.nrepl/cider-middleware) @@ -76,11 +76,11 @@ run `cider-connect` or `cider-connect-cljs`. [source,clojure] ---- - :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.50.3"}} + :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.51.0"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware]"]} :cider-cljs {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.339"} - cider/cider-nrepl {:mvn/version "0.50.3"} + cider/cider-nrepl {:mvn/version "0.51.0"} cider/piggieback {:mvn/version "0.5.3"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware,cider.piggieback/wrap-cljs-repl]"]} @@ -99,7 +99,7 @@ NOTE: Make sure you're using https://github.com/clojurephant/clojurephant[Clojur ---- dependencies { devImplementation 'nrepl:nrepl:0.9.0' - devImplementation 'cider:cider-nrepl:0.50.3' + devImplementation 'cider:cider-nrepl:0.51.0' } tasks.named('clojureRepl') { diff --git a/doc/modules/ROOT/pages/basics/up_and_running.adoc b/doc/modules/ROOT/pages/basics/up_and_running.adoc index 02cd3e3c0..52aa1757d 100644 --- a/doc/modules/ROOT/pages/basics/up_and_running.adoc +++ b/doc/modules/ROOT/pages/basics/up_and_running.adoc @@ -73,7 +73,7 @@ simple - CIDER simply passes the extra dependencies and nREPL configuration to your build tool in the command it runs to start the nREPL server. Here's how this looks for `tools.deps`: - $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.0"} cider/cider-nrepl {:mvn/version "0.50.3"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' + $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.1"} cider/cider-nrepl {:mvn/version "0.51.0"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' TIP: If you don't want `cider-jack-in` to inject dependencies automatically, set `cider-inject-dependencies-at-jack-in` to `nil`. Note that you'll have to setup @@ -350,7 +350,7 @@ It is also possible for plain `clj`, although the command is somewhat longer: [source,sh] ---- -$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.50.3"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" +$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.51.0"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" ---- Alternatively, you can start nREPL either manually or using the facilities diff --git a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc index 63a26f705..2c67bf95e 100644 --- a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc +++ b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc @@ -62,7 +62,7 @@ And connect to it with `cider-connect`. ...For that to work, `shadow-cljs.edn` contents like the following are assumed: ```clj - :dependencies [[cider/cider-nrepl "0.50.3"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) + :dependencies [[cider/cider-nrepl "0.51.0"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) [refactor-nrepl/refactor-nrepl "3.9.0"]] ;; refactor-nrepl is optional :nrepl {:middleware [cider.nrepl/cider-middleware ;; it's advisable to explicitly add this middleware. It's automatically added by shadow-cljs (if available in the classpath), unless `:nrepl {:cider false}` diff --git a/doc/modules/ROOT/pages/cljs/up_and_running.adoc b/doc/modules/ROOT/pages/cljs/up_and_running.adoc index aec59e935..b0cf32066 100644 --- a/doc/modules/ROOT/pages/cljs/up_and_running.adoc +++ b/doc/modules/ROOT/pages/cljs/up_and_running.adoc @@ -60,8 +60,8 @@ or in `build.gradle`: [source, groovy] ---- dependencies { - devImplementation 'nrepl:nrepl:1.3.0' - devImplementation 'cider:cider-nrepl:0.50.3' + devImplementation 'nrepl:nrepl:1.3.1' + devImplementation 'cider:cider-nrepl:0.51.0' devImplementation 'cider:cider-piggieback:0.5.3' } diff --git a/test/cider-tests.el b/test/cider-tests.el index aeb603266..376b25750 100644 --- a/test/cider-tests.el +++ b/test/cider-tests.el @@ -144,7 +144,7 @@ (describe "when there is a single dependency" (before-each (setq-local cider-injected-nrepl-version "0.9.0") - (setq-local cider-injected-middleware-version "0.50.3") + (setq-local cider-injected-middleware-version "0.51.0") (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t) @@ -155,7 +155,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.50.3\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.51.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -169,7 +169,7 @@ "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.50.3\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.51.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -182,7 +182,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure foo.bar/baz]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.50.3\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.51.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -196,7 +196,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.50.3") + (shell-quote-argument "cider/cider-nrepl:0.51.0") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -206,7 +206,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.50.3") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.51.0") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -223,7 +223,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.50.3\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.51.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -237,7 +237,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.50.3") + (shell-quote-argument "cider/cider-nrepl:0.51.0") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -259,7 +259,7 @@ :to-equal (concat "-o -U update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.50.3\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.51.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -271,7 +271,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.50.3") + (shell-quote-argument "cider/cider-nrepl:0.51.0") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -280,7 +280,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.50.3") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.51.0") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -295,14 +295,14 @@ (setq-local cider-jack-in-nrepl-middlewares '(("refactor-nrepl.middleware/wrap-refactor" :predicate middlewares-predicate) "cider.nrepl/cider-middleware" ("another/middleware")))) (it "includes plugins whose predicates return true" (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.50.3")))) + :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.51.0")))) (it "includes middlewares whose predicates return true" (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware" "another/middleware"))) (it "ignores plugins whose predicates return false" (spy-on 'plugins-predicate :and-return-value nil) (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("cider/cider-nrepl" "0.50.3"))) + :to-equal '(("cider/cider-nrepl" "0.51.0"))) (spy-on 'middlewares-predicate :and-return-value nil) (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("cider.nrepl/cider-middleware" "another/middleware"))) @@ -331,7 +331,7 @@ :and-return-value '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware")) (spy-on 'cider-jack-in-normalized-lein-plugins :and-return-value '(("refactor-nrepl" "2.0.0") - ("cider/cider-nrepl" "0.50.3") + ("cider/cider-nrepl" "0.51.0") ("mx.cider/lein-enrich-classpath" "1.19.3"))) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t)) @@ -342,7 +342,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.50.3\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.51.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -361,7 +361,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.50.3") + (shell-quote-argument "cider/cider-nrepl:0.51.0") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -456,7 +456,7 @@ (setq-local cider-jack-in-dependencies nil) (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.50.3\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.51.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) @@ -471,7 +471,7 @@ (it "allows specifying custom aliases with `cider-clojure-cli-aliases`" (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.50.3\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.51.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:dev:test:cider/nrepl") ""))) (setq-local cider-jack-in-dependencies nil) @@ -489,7 +489,7 @@ (it (format "should remove duplicates, yielding the same result (for %S command invocation)" command) ;; repeat the same test for PowerShell too (let ((expected (string-join `("-Sdeps " - ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.50.3\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" + ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.51.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" command) " -M:dev:test:cider/nrepl") ""))) @@ -499,7 +499,7 @@ :to-equal expected)))) (it "handles aliases correctly" (let ((expected (string-join `("-Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.50.3\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.51.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -527,7 +527,7 @@ :to-equal expected))))) (it "allows for global options" (let ((expected (string-join `("-J-Xverify:none -Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.50.3\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.51.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -538,7 +538,7 @@ (setq-local cider-jack-in-dependencies '(("org.clojure/tools.deps" (("git/sha" . "6ae2b6f71773de7549d7f22759e8b09fec27f0d9") ("git/url" . "https://github.com/clojure/tools.deps/"))))) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.50.3\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.51.0\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) From be8b2e5c0da96c17f2ca0d8127f7f2e120ee2829 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Fri, 3 Jan 2025 12:26:22 +0200 Subject: [PATCH 057/149] Bump cider-nrepl to 0.51.1 (#3768) --- CHANGELOG.md | 2 +- cider.el | 2 +- dev/docker-sample-project/project.clj | 2 +- dev/tramp-sample-project/project.clj | 2 +- .../ROOT/pages/basics/middleware_setup.adoc | 12 ++--- .../ROOT/pages/basics/up_and_running.adoc | 4 +- doc/modules/ROOT/pages/cljs/shadow-cljs.adoc | 2 +- .../ROOT/pages/cljs/up_and_running.adoc | 2 +- test/cider-tests.el | 44 +++++++++---------- 9 files changed, 36 insertions(+), 36 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 81c4e9eb3..74fa1d0a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ ### Changes - Bump the injected nREPL version to [1.3.1](https://github.com/nrepl/nrepl/blob/master/CHANGELOG.md#131-2025-01-01). -- Bump the injected `cider-nrepl` to [0.51.0](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0510-2025-01-01). +- Bump the injected `cider-nrepl` to [0.51.1](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0511-2025-01-03). - [#3574](https://github.com/clojure-emacs/cider/issues/3574): New value `per-project` for `cider-repl-history-file` to save the history on a per-project basis. ### Bugs fixed diff --git a/cider.el b/cider.el index c70c1716c..4a90271e4 100644 --- a/cider.el +++ b/cider.el @@ -573,7 +573,7 @@ the artifact.") Used when `cider-jack-in-auto-inject-clojure' is set to `latest'.") -(defconst cider-required-middleware-version "0.51.0" +(defconst cider-required-middleware-version "0.51.1" "The CIDER nREPL version that's known to work properly with CIDER.") (defcustom cider-injected-middleware-version cider-required-middleware-version diff --git a/dev/docker-sample-project/project.clj b/dev/docker-sample-project/project.clj index f2f559c05..7936d6150 100644 --- a/dev/docker-sample-project/project.clj +++ b/dev/docker-sample-project/project.clj @@ -2,4 +2,4 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.51.0"]]) + :plugins [[cider/cider-nrepl "0.51.1"]]) diff --git a/dev/tramp-sample-project/project.clj b/dev/tramp-sample-project/project.clj index ca5e187f8..011431e63 100644 --- a/dev/tramp-sample-project/project.clj +++ b/dev/tramp-sample-project/project.clj @@ -2,5 +2,5 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.51.0"] + :plugins [[cider/cider-nrepl "0.51.1"] [refactor-nrepl "3.9.0"]]) diff --git a/doc/modules/ROOT/pages/basics/middleware_setup.adoc b/doc/modules/ROOT/pages/basics/middleware_setup.adoc index 77c5ff5b2..3c51268a1 100644 --- a/doc/modules/ROOT/pages/basics/middleware_setup.adoc +++ b/doc/modules/ROOT/pages/basics/middleware_setup.adoc @@ -32,14 +32,14 @@ Use the convenient plugin for defaults, either in your project's [source,clojure] ---- -:plugins [[cider/cider-nrepl "0.51.0"]] +:plugins [[cider/cider-nrepl "0.51.1"]] ---- A minimal `profiles.clj` for CIDER would be: [source,clojure] ---- -{:repl {:plugins [[cider/cider-nrepl "0.51.0"]]}} +{:repl {:plugins [[cider/cider-nrepl "0.51.1"]]}} ---- WARNING: Be careful not to place this in the `:user` profile, as this way CIDER's @@ -59,7 +59,7 @@ all of their projects using a `~/.boot/profile.boot` file like so: (require 'boot.repl) (swap! boot.repl/*default-dependencies* - concat '[[cider/cider-nrepl "0.51.0"]]) + concat '[[cider/cider-nrepl "0.51.1"]]) (swap! boot.repl/*default-middleware* conj 'cider.nrepl/cider-middleware) @@ -76,11 +76,11 @@ run `cider-connect` or `cider-connect-cljs`. [source,clojure] ---- - :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.51.0"}} + :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.51.1"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware]"]} :cider-cljs {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.339"} - cider/cider-nrepl {:mvn/version "0.51.0"} + cider/cider-nrepl {:mvn/version "0.51.1"} cider/piggieback {:mvn/version "0.5.3"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware,cider.piggieback/wrap-cljs-repl]"]} @@ -99,7 +99,7 @@ NOTE: Make sure you're using https://github.com/clojurephant/clojurephant[Clojur ---- dependencies { devImplementation 'nrepl:nrepl:0.9.0' - devImplementation 'cider:cider-nrepl:0.51.0' + devImplementation 'cider:cider-nrepl:0.51.1' } tasks.named('clojureRepl') { diff --git a/doc/modules/ROOT/pages/basics/up_and_running.adoc b/doc/modules/ROOT/pages/basics/up_and_running.adoc index 52aa1757d..79f127fe0 100644 --- a/doc/modules/ROOT/pages/basics/up_and_running.adoc +++ b/doc/modules/ROOT/pages/basics/up_and_running.adoc @@ -73,7 +73,7 @@ simple - CIDER simply passes the extra dependencies and nREPL configuration to your build tool in the command it runs to start the nREPL server. Here's how this looks for `tools.deps`: - $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.1"} cider/cider-nrepl {:mvn/version "0.51.0"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' + $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.1"} cider/cider-nrepl {:mvn/version "0.51.1"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' TIP: If you don't want `cider-jack-in` to inject dependencies automatically, set `cider-inject-dependencies-at-jack-in` to `nil`. Note that you'll have to setup @@ -350,7 +350,7 @@ It is also possible for plain `clj`, although the command is somewhat longer: [source,sh] ---- -$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.51.0"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" +$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.51.1"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" ---- Alternatively, you can start nREPL either manually or using the facilities diff --git a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc index 2c67bf95e..ee6462fae 100644 --- a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc +++ b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc @@ -62,7 +62,7 @@ And connect to it with `cider-connect`. ...For that to work, `shadow-cljs.edn` contents like the following are assumed: ```clj - :dependencies [[cider/cider-nrepl "0.51.0"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) + :dependencies [[cider/cider-nrepl "0.51.1"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) [refactor-nrepl/refactor-nrepl "3.9.0"]] ;; refactor-nrepl is optional :nrepl {:middleware [cider.nrepl/cider-middleware ;; it's advisable to explicitly add this middleware. It's automatically added by shadow-cljs (if available in the classpath), unless `:nrepl {:cider false}` diff --git a/doc/modules/ROOT/pages/cljs/up_and_running.adoc b/doc/modules/ROOT/pages/cljs/up_and_running.adoc index b0cf32066..9f37b4291 100644 --- a/doc/modules/ROOT/pages/cljs/up_and_running.adoc +++ b/doc/modules/ROOT/pages/cljs/up_and_running.adoc @@ -61,7 +61,7 @@ or in `build.gradle`: ---- dependencies { devImplementation 'nrepl:nrepl:1.3.1' - devImplementation 'cider:cider-nrepl:0.51.0' + devImplementation 'cider:cider-nrepl:0.51.1' devImplementation 'cider:cider-piggieback:0.5.3' } diff --git a/test/cider-tests.el b/test/cider-tests.el index 376b25750..d28ad09ba 100644 --- a/test/cider-tests.el +++ b/test/cider-tests.el @@ -144,7 +144,7 @@ (describe "when there is a single dependency" (before-each (setq-local cider-injected-nrepl-version "0.9.0") - (setq-local cider-injected-middleware-version "0.51.0") + (setq-local cider-injected-middleware-version "0.51.1") (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t) @@ -155,7 +155,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.51.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.51.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -169,7 +169,7 @@ "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.51.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.51.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -182,7 +182,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure foo.bar/baz]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.51.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.51.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -196,7 +196,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.51.0") + (shell-quote-argument "cider/cider-nrepl:0.51.1") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -206,7 +206,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.51.0") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.51.1") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -223,7 +223,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.51.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.51.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -237,7 +237,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.51.0") + (shell-quote-argument "cider/cider-nrepl:0.51.1") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -259,7 +259,7 @@ :to-equal (concat "-o -U update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.51.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.51.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -271,7 +271,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.51.0") + (shell-quote-argument "cider/cider-nrepl:0.51.1") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -280,7 +280,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.51.0") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.51.1") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -295,14 +295,14 @@ (setq-local cider-jack-in-nrepl-middlewares '(("refactor-nrepl.middleware/wrap-refactor" :predicate middlewares-predicate) "cider.nrepl/cider-middleware" ("another/middleware")))) (it "includes plugins whose predicates return true" (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.51.0")))) + :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.51.1")))) (it "includes middlewares whose predicates return true" (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware" "another/middleware"))) (it "ignores plugins whose predicates return false" (spy-on 'plugins-predicate :and-return-value nil) (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("cider/cider-nrepl" "0.51.0"))) + :to-equal '(("cider/cider-nrepl" "0.51.1"))) (spy-on 'middlewares-predicate :and-return-value nil) (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("cider.nrepl/cider-middleware" "another/middleware"))) @@ -331,7 +331,7 @@ :and-return-value '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware")) (spy-on 'cider-jack-in-normalized-lein-plugins :and-return-value '(("refactor-nrepl" "2.0.0") - ("cider/cider-nrepl" "0.51.0") + ("cider/cider-nrepl" "0.51.1") ("mx.cider/lein-enrich-classpath" "1.19.3"))) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t)) @@ -342,7 +342,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.51.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.51.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -361,7 +361,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.51.0") + (shell-quote-argument "cider/cider-nrepl:0.51.1") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -456,7 +456,7 @@ (setq-local cider-jack-in-dependencies nil) (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.51.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.51.1\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) @@ -471,7 +471,7 @@ (it "allows specifying custom aliases with `cider-clojure-cli-aliases`" (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.51.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.51.1\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:dev:test:cider/nrepl") ""))) (setq-local cider-jack-in-dependencies nil) @@ -489,7 +489,7 @@ (it (format "should remove duplicates, yielding the same result (for %S command invocation)" command) ;; repeat the same test for PowerShell too (let ((expected (string-join `("-Sdeps " - ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.51.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" + ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.51.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" command) " -M:dev:test:cider/nrepl") ""))) @@ -499,7 +499,7 @@ :to-equal expected)))) (it "handles aliases correctly" (let ((expected (string-join `("-Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.51.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.51.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -527,7 +527,7 @@ :to-equal expected))))) (it "allows for global options" (let ((expected (string-join `("-J-Xverify:none -Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.51.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.51.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -538,7 +538,7 @@ (setq-local cider-jack-in-dependencies '(("org.clojure/tools.deps" (("git/sha" . "6ae2b6f71773de7549d7f22759e8b09fec27f0d9") ("git/url" . "https://github.com/clojure/tools.deps/"))))) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.51.0\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.51.1\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) From f00e83d338434c92cc21663a1818139f0847b707 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Sun, 5 Jan 2025 09:07:19 +0200 Subject: [PATCH 058/149] [Docs] Tweak some markup --- doc/modules/ROOT/pages/platforms/basilisp.adoc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/modules/ROOT/pages/platforms/basilisp.adoc b/doc/modules/ROOT/pages/platforms/basilisp.adoc index 1859f5d80..79d9b519f 100644 --- a/doc/modules/ROOT/pages/platforms/basilisp.adoc +++ b/doc/modules/ROOT/pages/platforms/basilisp.adoc @@ -1,7 +1,7 @@ = Basilisp Integration with CIDER https://github.com/basilisp-lang/basilisp[basilisp] -since CIDER 1.14 +NOTE: Basilisp support was added in CIDER 1.14. == Overview @@ -28,7 +28,7 @@ If you don't have or want a basilisp project file, you can use universal jack in NOTE: an alternative to kbd:[M-5] is kbd:[C-u 5] -You can also bind the universal jack-in to Basilisp to a function to use as a shortcut, for example +You can also bind the universal jack-in to Basilisp to a function to use as a shortcut, for example: [source,lisp] ---- @@ -51,7 +51,7 @@ To see available options, type `basilisp nrepl-server -h` in a shell prompt. == Configuration -The jack-in command can be configured with the following defcustoms +The jack-in command can be configured with the following defcustoms: === `cider-basilisp-command` @@ -81,7 +81,7 @@ For example, to set the path to the basilisp executable within a virtual environ - kbd:[M-x add-dir-local-variable] - Mode or subdirectory: `clojure-mode` - Add directory-local variable: `cider-basilisp-command` -- Add cider-basilisp-command with value: `"c:/dev/venvs/312/Scripts/basilisp"` +- Add `cider-basilisp-command` with value: `"c:/dev/venvs/312/Scripts/basilisp"` This should result to updating or creating a `.dir-local.el` file like below From 303ed541b10b529aba86a7f378b32e4a57573470 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Sat, 11 Jan 2025 21:00:11 +0200 Subject: [PATCH 059/149] Tweak a changelog entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 74fa1d0a1..ecc64fd2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## master (unreleased) ### New features + - CIDER [History](https://docs.cider.mx/cider/repl/history.html): Add a command to delete history item at point. ### Changes From 0ad73b25815666a605d9eb206f4e488bf4933d0f Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Sat, 11 Jan 2025 22:58:22 +0200 Subject: [PATCH 060/149] Bump the development version --- cider.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cider.el b/cider.el index 4a90271e4..cc6c82d06 100644 --- a/cider.el +++ b/cider.el @@ -11,7 +11,7 @@ ;; Steve Purcell ;; Maintainer: Bozhidar Batsov ;; URL: https://www.github.com/clojure-emacs/cider -;; Version: 1.16.1 +;; Version: 1.17.0-snapshot ;; Package-Requires: ((emacs "26") (clojure-mode "5.19") (parseedn "1.2.1") (queue "0.2") (spinner "1.7") (seq "2.22") (sesman "0.3.2") (transient "0.4.1")) ;; Keywords: languages, clojure, cider @@ -93,7 +93,7 @@ (require 'sesman) (require 'package) -(defconst cider-version "1.16.1" +(defconst cider-version "1.17.0-snapshot" "The current version of CIDER.") (defconst cider-codename "Kherson" From e33067498a089157af28dbed180117d8b8a3605e Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Sat, 11 Jan 2025 23:02:40 +0200 Subject: [PATCH 061/149] Bump the copyright years --- README.md | 2 +- cider-apropos.el | 2 +- cider-browse-ns.el | 2 +- cider-browse-spec.el | 2 +- cider-cheatsheet.el | 2 +- cider-classpath.el | 2 +- cider-client.el | 2 +- cider-clojuredocs.el | 2 +- cider-common.el | 2 +- cider-completion-context.el | 2 +- cider-completion.el | 2 +- cider-connection.el | 2 +- cider-debug.el | 2 +- cider-doc.el | 2 +- cider-docstring.el | 2 +- cider-eldoc.el | 4 ++-- cider-eval.el | 4 ++-- cider-find.el | 2 +- cider-format.el | 2 +- cider-inspector.el | 4 ++-- cider-jar.el | 2 +- cider-log.el | 2 +- cider-macroexpansion.el | 4 ++-- cider-mode.el | 4 ++-- cider-ns.el | 2 +- cider-overlays.el | 2 +- cider-popup.el | 2 +- cider-profile.el | 2 +- cider-repl-history.el | 2 +- cider-repl.el | 4 ++-- cider-resolve.el | 2 +- cider-scratch.el | 2 +- cider-selector.el | 4 ++-- cider-stacktrace.el | 2 +- cider-test.el | 2 +- cider-tracing.el | 2 +- cider-util.el | 4 ++-- cider-xref-backend.el | 2 +- cider-xref.el | 2 +- cider.el | 4 ++-- doc/modules/ROOT/pages/about/license.adoc | 2 +- nrepl-client.el | 4 ++-- nrepl-dict.el | 4 ++-- test/cider-apropos-tests.el | 2 +- test/cider-browse-ns-tests.el | 2 +- test/cider-browse-spec-tests.el | 2 +- test/cider-classpath-tests.el | 2 +- test/cider-client-tests.el | 2 +- test/cider-clojuredocs-tests.el | 2 +- test/cider-common-tests.el | 2 +- test/cider-completion-context-tests.el | 2 +- test/cider-completion-tests.el | 2 +- test/cider-connection-tests.el | 2 +- test/cider-debug-tests.el | 2 +- test/cider-doc-tests.el | 2 +- test/cider-eldoc-tests.el | 2 +- test/cider-error-parsing-tests.el | 2 +- test/cider-eval-tests.el | 2 +- test/cider-find-tests.el | 2 +- test/cider-inspector-tests.el | 2 +- test/cider-interaction-tests.el | 2 +- test/cider-jar-tests.el | 2 +- test/cider-log-tests.el | 2 +- test/cider-ns-tests.el | 2 +- test/cider-overlay-tests.el | 2 +- test/cider-repl-tests.el | 2 +- test/cider-selector-tests.el | 2 +- test/cider-stacktrace-tests.el | 2 +- test/cider-test-tests.el | 2 +- test/cider-tests--no-auto.el | 2 +- test/cider-tests.el | 2 +- test/cider-util-tests.el | 2 +- test/enrich/cider-docstring-tests.el | 2 +- test/integration/integration-test-utils.el | 2 +- test/integration/integration-tests.el | 2 +- test/nrepl-bencode-tests.el | 2 +- test/nrepl-client-tests.el | 2 +- test/nrepl-dict-tests.el | 2 +- test/nrepl-server-mock.el | 2 +- test/utils/cider-connection-test-utils.el | 2 +- test/utils/nrepl-tests-utils.el | 2 +- 81 files changed, 92 insertions(+), 92 deletions(-) diff --git a/README.md b/README.md index b5156e501..cb25a2f10 100644 --- a/README.md +++ b/README.md @@ -263,7 +263,7 @@ site. [[Become a sponsor](https://opencollective.com/cider#sponsor)] CIDER is distributed under the GNU General Public License, version 3. -Copyright © 2012-2024 Bozhidar Batsov, Artur Malabarba, Tim King, Phil Hagelberg and +Copyright © 2012-2025 Bozhidar Batsov, Artur Malabarba, Tim King, Phil Hagelberg and [contributors](https://github.com/clojure-emacs/cider/contributors). [badge-license]: https://img.shields.io/badge/license-GPL_3-green.svg diff --git a/cider-apropos.el b/cider-apropos.el index b94e27ed8..1cf50647c 100644 --- a/cider-apropos.el +++ b/cider-apropos.el @@ -1,6 +1,6 @@ ;;; cider-apropos.el --- Apropos functionality for Clojure -*- lexical-binding: t -*- -;; Copyright © 2014-2024 Jeff Valk, Bozhidar Batsov and CIDER contributors +;; Copyright © 2014-2025 Jeff Valk, Bozhidar Batsov and CIDER contributors ;; ;; Author: Jeff Valk diff --git a/cider-browse-ns.el b/cider-browse-ns.el index 4e9e6be79..ce35b5a62 100644 --- a/cider-browse-ns.el +++ b/cider-browse-ns.el @@ -1,6 +1,6 @@ ;;; cider-browse-ns.el --- CIDER namespace browser -*- lexical-binding: t; -*- -;; Copyright © 2014-2024 John Andrews, Bozhidar Batsov and CIDER contributors +;; Copyright © 2014-2025 John Andrews, Bozhidar Batsov and CIDER contributors ;; Author: John Andrews diff --git a/cider-browse-spec.el b/cider-browse-spec.el index 7163a25f1..eb9d28166 100644 --- a/cider-browse-spec.el +++ b/cider-browse-spec.el @@ -1,6 +1,6 @@ ;;; cider-browse-spec.el --- CIDER spec browser -*- lexical-binding: t; -*- -;; Copyright © 2017-2024 Juan Monetta, Bozhidar Batsov and CIDER contributors +;; Copyright © 2017-2025 Juan Monetta, Bozhidar Batsov and CIDER contributors ;; Author: Juan Monetta diff --git a/cider-cheatsheet.el b/cider-cheatsheet.el index fbc07dad6..6babaebcb 100644 --- a/cider-cheatsheet.el +++ b/cider-cheatsheet.el @@ -1,6 +1,6 @@ ;;; cider-cheatsheet.el --- Quick reference for Clojure -*- lexical-binding: t -*- -;; Copyright © 2019-2024 Kris Jenkins, Bozhidar Batsov and CIDER contributors +;; Copyright © 2019-2025 Kris Jenkins, Bozhidar Batsov and CIDER contributors ;; ;; Author: Kris Jenkins ;; Kato Muso diff --git a/cider-classpath.el b/cider-classpath.el index 3ebe86502..55ed6ac6b 100644 --- a/cider-classpath.el +++ b/cider-classpath.el @@ -1,6 +1,6 @@ ;;; cider-classpath.el --- Basic Java classpath browser -*- lexical-binding: t; -*- -;; Copyright © 2014-2024 Bozhidar Batsov and CIDER contributors +;; Copyright © 2014-2025 Bozhidar Batsov and CIDER contributors ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by diff --git a/cider-client.el b/cider-client.el index 26b222998..df4eacfed 100644 --- a/cider-client.el +++ b/cider-client.el @@ -1,6 +1,6 @@ ;;; cider-client.el --- A layer of abstraction above low-level nREPL client code. -*- lexical-binding: t -*- -;; Copyright © 2013-2024 Bozhidar Batsov +;; Copyright © 2013-2025 Bozhidar Batsov ;; ;; Author: Bozhidar Batsov diff --git a/cider-clojuredocs.el b/cider-clojuredocs.el index bfe8800de..0cbb99706 100644 --- a/cider-clojuredocs.el +++ b/cider-clojuredocs.el @@ -1,6 +1,6 @@ ;;; cider-clojuredocs.el --- ClojureDocs integration -*- lexical-binding: t -*- -;; Copyright © 2014-2024 Bozhidar Batsov and CIDER contributors +;; Copyright © 2014-2025 Bozhidar Batsov and CIDER contributors ;; ;; Author: Bozhidar Batsov diff --git a/cider-common.el b/cider-common.el index f3e6582f9..e038d209f 100644 --- a/cider-common.el +++ b/cider-common.el @@ -1,6 +1,6 @@ ;;; cider-common.el --- Common use functions -*- lexical-binding: t; -*- -;; Copyright © 2015-2024 Artur Malabarba +;; Copyright © 2015-2025 Artur Malabarba ;; Author: Artur Malabarba diff --git a/cider-completion-context.el b/cider-completion-context.el index 3ebbf203f..7eca77cf8 100644 --- a/cider-completion-context.el +++ b/cider-completion-context.el @@ -1,6 +1,6 @@ ;;; cider-completion-context.el --- Context parsing -*- lexical-binding: t -*- -;; Copyright © 2013-2024 Bozhidar Batsov, Artur Malabarba and CIDER contributors +;; Copyright © 2013-2025 Bozhidar Batsov, Artur Malabarba and CIDER contributors ;; ;; Author: Bozhidar Batsov ;; Artur Malabarba diff --git a/cider-completion.el b/cider-completion.el index 1e89adca2..78e64fd10 100644 --- a/cider-completion.el +++ b/cider-completion.el @@ -1,6 +1,6 @@ ;;; cider-completion.el --- Smart REPL-powered code completion -*- lexical-binding: t -*- -;; Copyright © 2013-2024 Bozhidar Batsov, Artur Malabarba and CIDER contributors +;; Copyright © 2013-2025 Bozhidar Batsov, Artur Malabarba and CIDER contributors ;; ;; Author: Bozhidar Batsov ;; Artur Malabarba diff --git a/cider-connection.el b/cider-connection.el index 35a8f2f04..e1db6c595 100644 --- a/cider-connection.el +++ b/cider-connection.el @@ -1,6 +1,6 @@ ;;; cider-connection.el --- Connection and session life-cycle management for CIDER -*- lexical-binding: t -*- ;; -;; Copyright © 2019-2024 Artur Malabarba, Bozhidar Batsov, Vitalie Spinu and CIDER contributors +;; Copyright © 2019-2025 Artur Malabarba, Bozhidar Batsov, Vitalie Spinu and CIDER contributors ;; ;; Author: Artur Malabarba ;; Bozhidar Batsov diff --git a/cider-debug.el b/cider-debug.el index 5b9a69b38..15ccd2720 100644 --- a/cider-debug.el +++ b/cider-debug.el @@ -1,6 +1,6 @@ ;;; cider-debug.el --- CIDER interaction with the cider.debug nREPL middleware -*- lexical-binding: t; -*- -;; Copyright © 2015-2024 Bozhidar Batsov, Artur Malabarba and CIDER contributors +;; Copyright © 2015-2025 Bozhidar Batsov, Artur Malabarba and CIDER contributors ;; Author: Artur Malabarba diff --git a/cider-doc.el b/cider-doc.el index d76c205e2..d9d4d6466 100644 --- a/cider-doc.el +++ b/cider-doc.el @@ -1,6 +1,6 @@ ;;; cider-doc.el --- CIDER documentation functionality -*- lexical-binding: t -*- -;; Copyright © 2014-2024 Bozhidar Batsov, Jeff Valk and CIDER contributors +;; Copyright © 2014-2025 Bozhidar Batsov, Jeff Valk and CIDER contributors ;; Author: Jeff Valk diff --git a/cider-docstring.el b/cider-docstring.el index 2ff46e1e4..700f3c1bd 100644 --- a/cider-docstring.el +++ b/cider-docstring.el @@ -1,6 +1,6 @@ ;;; cider-docstring.el --- Docstring rendering -*- lexical-binding: t -*- -;; Copyright © 2013-2024 Bozhidar Batsov and CIDER contributors +;; Copyright © 2013-2025 Bozhidar Batsov and CIDER contributors ;; ;; Author: Bozhidar Batsov diff --git a/cider-eldoc.el b/cider-eldoc.el index 1137046bb..a787393ba 100644 --- a/cider-eldoc.el +++ b/cider-eldoc.el @@ -1,7 +1,7 @@ ;;; cider-eldoc.el --- eldoc support for Clojure -*- lexical-binding: t -*- -;; Copyright © 2012-2024 Tim King, Phil Hagelberg, Bozhidar Batsov -;; Copyright © 2013-2024 Bozhidar Batsov, Artur Malabarba and CIDER contributors +;; Copyright © 2012-2025 Tim King, Phil Hagelberg, Bozhidar Batsov +;; Copyright © 2013-2025 Bozhidar Batsov, Artur Malabarba and CIDER contributors ;; ;; Author: Tim King ;; Phil Hagelberg diff --git a/cider-eval.el b/cider-eval.el index e5a68c464..8ca344525 100644 --- a/cider-eval.el +++ b/cider-eval.el @@ -1,7 +1,7 @@ ;;; cider-eval.el --- Interactive evaluation (compilation) functionality -*- lexical-binding: t -*- -;; Copyright © 2012-2024 Tim King, Phil Hagelberg, Bozhidar Batsov -;; Copyright © 2013-2024 Bozhidar Batsov, Artur Malabarba and CIDER contributors +;; Copyright © 2012-2025 Tim King, Phil Hagelberg, Bozhidar Batsov +;; Copyright © 2013-2025 Bozhidar Batsov, Artur Malabarba and CIDER contributors ;; ;; Author: Tim King ;; Phil Hagelberg diff --git a/cider-find.el b/cider-find.el index 0af706e24..baabf8bf1 100644 --- a/cider-find.el +++ b/cider-find.el @@ -1,6 +1,6 @@ ;;; cider-find.el --- Functionality for finding things -*- lexical-binding: t -*- -;; Copyright © 2013-2024 Bozhidar Batsov, Artur Malabarba and CIDER contributors +;; Copyright © 2013-2025 Bozhidar Batsov, Artur Malabarba and CIDER contributors ;; ;; Author: Bozhidar Batsov ;; Artur Malabarba diff --git a/cider-format.el b/cider-format.el index 2673430f5..a2b0bcb45 100644 --- a/cider-format.el +++ b/cider-format.el @@ -1,6 +1,6 @@ ;;; cider-format.el --- Code and EDN formatting functionality -*- lexical-binding: t -*- -;; Copyright © 2013-2024 Bozhidar Batsov, Artur Malabarba and CIDER contributors +;; Copyright © 2013-2025 Bozhidar Batsov, Artur Malabarba and CIDER contributors ;; ;; Author: Bozhidar Batsov ;; Artur Malabarba diff --git a/cider-inspector.el b/cider-inspector.el index 17567b555..dd24103ad 100644 --- a/cider-inspector.el +++ b/cider-inspector.el @@ -1,7 +1,7 @@ ;;; cider-inspector.el --- Object inspector -*- lexical-binding: t -*- -;; Copyright © 2013-2024 Vital Reactor, LLC -;; Copyright © 2014-2024 Bozhidar Batsov and CIDER contributors +;; Copyright © 2013-2025 Vital Reactor, LLC +;; Copyright © 2014-2025 Bozhidar Batsov and CIDER contributors ;; Author: Ian Eslick ;; Bozhidar Batsov diff --git a/cider-jar.el b/cider-jar.el index 006ad7ec8..49eb6b4ad 100644 --- a/cider-jar.el +++ b/cider-jar.el @@ -1,6 +1,6 @@ ;;; cider-jar.el --- Jar functionality for Clojure -*- lexical-binding: t -*- -;; Copyright © 2022-2024 Arne Brasseur +;; Copyright © 2022-2025 Arne Brasseur ;; ;; Author: Arne Brasseur diff --git a/cider-log.el b/cider-log.el index 4f01f41cd..3a304507e 100644 --- a/cider-log.el +++ b/cider-log.el @@ -1,6 +1,6 @@ ;;; cider-log.el --- Log inspection functionality for Clojure -*- lexical-binding: t -*- -;; Copyright © 2023-2024 Bozhidar Batsov and CIDER contributors +;; Copyright © 2023-2025 Bozhidar Batsov and CIDER contributors ;; Author: r0man diff --git a/cider-macroexpansion.el b/cider-macroexpansion.el index e445c4331..484827273 100644 --- a/cider-macroexpansion.el +++ b/cider-macroexpansion.el @@ -1,7 +1,7 @@ ;;; cider-macroexpansion.el --- Macro expansion support -*- lexical-binding: t -*- -;; Copyright © 2012-2024 Tim King, Phil Hagelberg, Bozhidar Batsov -;; Copyright © 2013-2024 Bozhidar Batsov, Artur Malabarba and CIDER contributors +;; Copyright © 2012-2025 Tim King, Phil Hagelberg, Bozhidar Batsov +;; Copyright © 2013-2025 Bozhidar Batsov, Artur Malabarba and CIDER contributors ;; ;; Author: Tim King ;; Phil Hagelberg diff --git a/cider-mode.el b/cider-mode.el index 780a77ca2..64567b46a 100644 --- a/cider-mode.el +++ b/cider-mode.el @@ -1,7 +1,7 @@ ;;; cider-mode.el --- Minor mode for REPL interactions -*- lexical-binding: t -*- -;; Copyright © 2012-2024 Tim King, Phil Hagelberg, Bozhidar Batsov -;; Copyright © 2013-2024 Bozhidar Batsov, Artur Malabarba and CIDER contributors +;; Copyright © 2012-2025 Tim King, Phil Hagelberg, Bozhidar Batsov +;; Copyright © 2013-2025 Bozhidar Batsov, Artur Malabarba and CIDER contributors ;; ;; Author: Tim King ;; Phil Hagelberg diff --git a/cider-ns.el b/cider-ns.el index 70e06d0be..31018b76f 100644 --- a/cider-ns.el +++ b/cider-ns.el @@ -1,6 +1,6 @@ ;;; cider-ns.el --- Namespace manipulation functionality -*- lexical-binding: t -*- -;; Copyright © 2013-2024 Bozhidar Batsov, Artur Malabarba and CIDER contributors +;; Copyright © 2013-2025 Bozhidar Batsov, Artur Malabarba and CIDER contributors ;; ;; Author: Bozhidar Batsov ;; Artur Malabarba diff --git a/cider-overlays.el b/cider-overlays.el index 511f89a19..f1808fafc 100644 --- a/cider-overlays.el +++ b/cider-overlays.el @@ -1,6 +1,6 @@ ;;; cider-overlays.el --- Managing CIDER overlays -*- lexical-binding: t; -*- -;; Copyright © 2015-2024 Bozhidar Batsov, Artur Malabarba and CIDER contributors +;; Copyright © 2015-2025 Bozhidar Batsov, Artur Malabarba and CIDER contributors ;; Author: Artur Malabarba diff --git a/cider-popup.el b/cider-popup.el index 0f0e43e0b..316b6a2b3 100644 --- a/cider-popup.el +++ b/cider-popup.el @@ -1,6 +1,6 @@ ;;; cider-popup.el --- Creating and quitting popup buffers -*- lexical-binding: t; -*- -;; Copyright © 2015-2024 Bozhidar Batsov, Artur Malabarba and CIDER contributors +;; Copyright © 2015-2025 Bozhidar Batsov, Artur Malabarba and CIDER contributors ;; Author: Artur Malabarba diff --git a/cider-profile.el b/cider-profile.el index 792d4b54e..3f38bda57 100644 --- a/cider-profile.el +++ b/cider-profile.el @@ -1,6 +1,6 @@ ;;; cider-profile.el --- CIDER support for profiling -*- lexical-binding: t; -*- -;; Copyright © 2014-2024 Edwin Watkeys and CIDER contributors +;; Copyright © 2014-2025 Edwin Watkeys and CIDER contributors ;; Author: Edwin Watkeys ;; Juan E. Maya diff --git a/cider-repl-history.el b/cider-repl-history.el index c205b6502..618cadb62 100644 --- a/cider-repl-history.el +++ b/cider-repl-history.el @@ -1,6 +1,6 @@ ;;; cider-repl-history.el --- REPL input history browser -*- lexical-binding: t; -*- -;; Copyright (c) 2017-2024 John Valente and browse-kill-ring authors +;; Copyright (c) 2017-2025 John Valente and browse-kill-ring authors ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by diff --git a/cider-repl.el b/cider-repl.el index 6c89426fb..c03a050f9 100644 --- a/cider-repl.el +++ b/cider-repl.el @@ -1,7 +1,7 @@ ;;; cider-repl.el --- CIDER REPL mode interactions -*- lexical-binding: t -*- -;; Copyright © 2012-2024 Tim King, Phil Hagelberg, Bozhidar Batsov -;; Copyright © 2013-2024 Bozhidar Batsov, Artur Malabarba and CIDER contributors +;; Copyright © 2012-2025 Tim King, Phil Hagelberg, Bozhidar Batsov +;; Copyright © 2013-2025 Bozhidar Batsov, Artur Malabarba and CIDER contributors ;; ;; Author: Tim King ;; Phil Hagelberg diff --git a/cider-resolve.el b/cider-resolve.el index eaa49d630..421242078 100644 --- a/cider-resolve.el +++ b/cider-resolve.el @@ -1,6 +1,6 @@ ;;; cider-resolve.el --- Resolve clojure symbols according to current nREPL connection -*- lexical-binding: t; -*- -;; Copyright © 2015-2024 Bozhidar Batsov, Artur Malabarba and CIDER contributors +;; Copyright © 2015-2025 Bozhidar Batsov, Artur Malabarba and CIDER contributors ;; Author: Artur Malabarba diff --git a/cider-scratch.el b/cider-scratch.el index 07de719c6..d82699ba9 100644 --- a/cider-scratch.el +++ b/cider-scratch.el @@ -1,6 +1,6 @@ ;;; cider-scratch.el --- *scratch* buffer for Clojure -*- lexical-binding: t -*- -;; Copyright © 2014-2024 Bozhidar Batsov and CIDER contributors +;; Copyright © 2014-2025 Bozhidar Batsov and CIDER contributors ;; ;; Author: Tim King ;; Phil Hagelberg diff --git a/cider-selector.el b/cider-selector.el index ec4a6503d..e729a8a30 100644 --- a/cider-selector.el +++ b/cider-selector.el @@ -1,7 +1,7 @@ ;;; cider-selector.el --- Buffer selection command inspired by SLIME's selector -*- lexical-binding: t -*- -;; Copyright © 2012-2024 Tim King, Phil Hagelberg, Bozhidar Batsov -;; Copyright © 2013-2024 Bozhidar Batsov, Artur Malabarba and CIDER contributors +;; Copyright © 2012-2025 Tim King, Phil Hagelberg, Bozhidar Batsov +;; Copyright © 2013-2025 Bozhidar Batsov, Artur Malabarba and CIDER contributors ;; ;; Author: Tim King ;; Phil Hagelberg diff --git a/cider-stacktrace.el b/cider-stacktrace.el index 930193897..41f9b3628 100644 --- a/cider-stacktrace.el +++ b/cider-stacktrace.el @@ -1,6 +1,6 @@ ;;; cider-stacktrace.el --- Stacktrace navigator -*- lexical-binding: t -*- -;; Copyright © 2014-2024 Jeff Valk, Bozhidar Batsov and CIDER contributors +;; Copyright © 2014-2025 Jeff Valk, Bozhidar Batsov and CIDER contributors ;; Author: Jeff Valk diff --git a/cider-test.el b/cider-test.el index b67021cea..5190fb9d0 100644 --- a/cider-test.el +++ b/cider-test.el @@ -1,6 +1,6 @@ ;;; cider-test.el --- Test result viewer -*- lexical-binding: t -*- -;; Copyright © 2014-2024 Jeff Valk, Bozhidar Batsov and CIDER contributors +;; Copyright © 2014-2025 Jeff Valk, Bozhidar Batsov and CIDER contributors ;; Author: Jeff Valk diff --git a/cider-tracing.el b/cider-tracing.el index f466fc8f9..bccaea407 100644 --- a/cider-tracing.el +++ b/cider-tracing.el @@ -1,6 +1,6 @@ ;;; cider-tracing.el --- Executing tracing functionality -*- lexical-binding: t -*- -;; Copyright © 2013-2024 Bozhidar Batsov, Artur Malabarba and CIDER contributors +;; Copyright © 2013-2025 Bozhidar Batsov, Artur Malabarba and CIDER contributors ;; ;; Author: Bozhidar Batsov ;; Artur Malabarba diff --git a/cider-util.el b/cider-util.el index 8316af962..4cd424439 100644 --- a/cider-util.el +++ b/cider-util.el @@ -1,7 +1,7 @@ ;; cider-util.el --- Common utility functions that don't belong anywhere else -*- lexical-binding: t -*- -;; Copyright © 2012-2024 Tim King, Phil Hagelberg, Bozhidar Batsov -;; Copyright © 2013-2024 Bozhidar Batsov, Artur Malabarba and CIDER contributors +;; Copyright © 2012-2025 Tim King, Phil Hagelberg, Bozhidar Batsov +;; Copyright © 2013-2025 Bozhidar Batsov, Artur Malabarba and CIDER contributors ;; ;; Author: Tim King ;; Phil Hagelberg diff --git a/cider-xref-backend.el b/cider-xref-backend.el index 4b3ca4b0d..0d6a4ca9c 100644 --- a/cider-xref-backend.el +++ b/cider-xref-backend.el @@ -1,6 +1,6 @@ ;;; cider-xref-backend.el --- CIDER's backend for Emacs' xref functionality -*- lexical-binding: t -*- -;; Copyright © 2013-2024 Bozhidar Batsov, Artur Malabarba and CIDER contributors +;; Copyright © 2013-2025 Bozhidar Batsov, Artur Malabarba and CIDER contributors ;; ;; Author: Bozhidar Batsov ;; Artur Malabarba diff --git a/cider-xref.el b/cider-xref.el index 453d1ef41..0d49073ac 100644 --- a/cider-xref.el +++ b/cider-xref.el @@ -1,6 +1,6 @@ ;;; cider-xref.el --- Xref functionality for Clojure -*- lexical-binding: t -*- -;; Copyright © 2019-2024 Bozhidar Batsov and CIDER contributors +;; Copyright © 2019-2025 Bozhidar Batsov and CIDER contributors ;; ;; Author: Bozhidar Batsov diff --git a/cider.el b/cider.el index cc6c82d06..69dc7d2f0 100644 --- a/cider.el +++ b/cider.el @@ -1,7 +1,7 @@ ;;; cider.el --- Clojure Interactive Development Environment that Rocks -*- lexical-binding: t -*- -;; Copyright © 2012-2024 Tim King, Phil Hagelberg, Bozhidar Batsov -;; Copyright © 2013-2024 Bozhidar Batsov, Artur Malabarba and CIDER contributors +;; Copyright © 2012-2025 Tim King, Phil Hagelberg, Bozhidar Batsov +;; Copyright © 2013-2025 Bozhidar Batsov, Artur Malabarba and CIDER contributors ;; ;; Author: Tim King ;; Phil Hagelberg diff --git a/doc/modules/ROOT/pages/about/license.adoc b/doc/modules/ROOT/pages/about/license.adoc index afc25969e..fa68717cc 100644 --- a/doc/modules/ROOT/pages/about/license.adoc +++ b/doc/modules/ROOT/pages/about/license.adoc @@ -21,4 +21,4 @@ NOTE: Reach out to Bozhidar if you have any questions about licensing. == Copyright -© 2012-2024 Bozhidar Batsov, Artur Malabarba, Tim King, Phil Hagelberg and CIDER contributors. +© 2012-2025 Bozhidar Batsov, Artur Malabarba, Tim King, Phil Hagelberg and CIDER contributors. diff --git a/nrepl-client.el b/nrepl-client.el index ed29fc8a1..3479d3857 100644 --- a/nrepl-client.el +++ b/nrepl-client.el @@ -1,7 +1,7 @@ ;;; nrepl-client.el --- Client for Clojure nREPL -*- lexical-binding: t -*- -;; Copyright © 2012-2024 Tim King, Phil Hagelberg, Bozhidar Batsov -;; Copyright © 2013-2024 Bozhidar Batsov, Artur Malabarba and CIDER contributors +;; Copyright © 2012-2025 Tim King, Phil Hagelberg, Bozhidar Batsov +;; Copyright © 2013-2025 Bozhidar Batsov, Artur Malabarba and CIDER contributors ;; ;; Author: Tim King ;; Phil Hagelberg diff --git a/nrepl-dict.el b/nrepl-dict.el index d8daeb5cf..97f8c9e45 100644 --- a/nrepl-dict.el +++ b/nrepl-dict.el @@ -1,7 +1,7 @@ ;;; nrepl-dict.el --- Dictionary functions for Clojure nREPL -*- lexical-binding: t -*- -;; Copyright © 2012-2024 Tim King, Phil Hagelberg, Bozhidar Batsov -;; Copyright © 2013-2024 Bozhidar Batsov, Artur Malabarba and CIDER contributors +;; Copyright © 2012-2025 Tim King, Phil Hagelberg, Bozhidar Batsov +;; Copyright © 2013-2025 Bozhidar Batsov, Artur Malabarba and CIDER contributors ;; ;; Author: Tim King ;; Phil Hagelberg diff --git a/test/cider-apropos-tests.el b/test/cider-apropos-tests.el index c8114459b..0d3f04b41 100644 --- a/test/cider-apropos-tests.el +++ b/test/cider-apropos-tests.el @@ -1,6 +1,6 @@ ;;; cider-apropos-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Tim King, Bozhidar Batsov +;; Copyright © 2012-2025 Tim King, Bozhidar Batsov ;; Author: Tim King ;; Bozhidar Batsov diff --git a/test/cider-browse-ns-tests.el b/test/cider-browse-ns-tests.el index 7fe5cf226..fa6c4a156 100644 --- a/test/cider-browse-ns-tests.el +++ b/test/cider-browse-ns-tests.el @@ -1,6 +1,6 @@ ;;; cider-browse-ns-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Tim King, Bozhidar Batsov +;; Copyright © 2012-2025 Tim King, Bozhidar Batsov ;; Author: Tim King ;; Bozhidar Batsov diff --git a/test/cider-browse-spec-tests.el b/test/cider-browse-spec-tests.el index df359d792..58e66f382 100644 --- a/test/cider-browse-spec-tests.el +++ b/test/cider-browse-spec-tests.el @@ -1,6 +1,6 @@ ;;; cider-browse-spec-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 r0man, Bozhidar Batsov +;; Copyright © 2012-2025 r0man, Bozhidar Batsov ;; Author: r0man ;; Bozhidar Batsov diff --git a/test/cider-classpath-tests.el b/test/cider-classpath-tests.el index 99aaf9857..a72d73061 100644 --- a/test/cider-classpath-tests.el +++ b/test/cider-classpath-tests.el @@ -1,6 +1,6 @@ ;;; cider-classpath-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Tim King, Bozhidar Batsov +;; Copyright © 2012-2025 Tim King, Bozhidar Batsov ;; Author: Tim King ;; Bozhidar Batsov diff --git a/test/cider-client-tests.el b/test/cider-client-tests.el index 7fbf8360c..b83b2494d 100644 --- a/test/cider-client-tests.el +++ b/test/cider-client-tests.el @@ -1,6 +1,6 @@ ;;; cider-client-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Tim King, Bozhidar Batsov +;; Copyright © 2012-2025 Tim King, Bozhidar Batsov ;; Author: Tim King ;; Bozhidar Batsov diff --git a/test/cider-clojuredocs-tests.el b/test/cider-clojuredocs-tests.el index bac2a4e2e..564dec73f 100644 --- a/test/cider-clojuredocs-tests.el +++ b/test/cider-clojuredocs-tests.el @@ -1,6 +1,6 @@ ;;; cider-clojuredocs-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Tim King, Bozhidar Batsov +;; Copyright © 2012-2025 Tim King, Bozhidar Batsov ;; Author: Tim King ;; Bozhidar Batsov diff --git a/test/cider-common-tests.el b/test/cider-common-tests.el index 3d42e0a41..2f1666bf6 100644 --- a/test/cider-common-tests.el +++ b/test/cider-common-tests.el @@ -1,6 +1,6 @@ ;;; cider-common-tests.el --- -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Tim King, Bozhidar Batsov +;; Copyright © 2012-2025 Tim King, Bozhidar Batsov ;; Author: Tim King ;; Bozhidar Batsov diff --git a/test/cider-completion-context-tests.el b/test/cider-completion-context-tests.el index e1e970451..9bd40b0db 100644 --- a/test/cider-completion-context-tests.el +++ b/test/cider-completion-context-tests.el @@ -1,6 +1,6 @@ ;;; cider-completion-context-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Bozhidar Batsov +;; Copyright © 2012-2025 Bozhidar Batsov ;; Author: Bozhidar Batsov diff --git a/test/cider-completion-tests.el b/test/cider-completion-tests.el index a8f58f798..f8368c39d 100644 --- a/test/cider-completion-tests.el +++ b/test/cider-completion-tests.el @@ -1,6 +1,6 @@ ;;; cider-completion-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Bozhidar Batsov +;; Copyright © 2012-2025 Bozhidar Batsov ;; Author: Bozhidar Batsov diff --git a/test/cider-connection-tests.el b/test/cider-connection-tests.el index 37875eddc..60a6765e2 100644 --- a/test/cider-connection-tests.el +++ b/test/cider-connection-tests.el @@ -1,7 +1,7 @@ ;; -*- lexical-binding: t; -*- ;;; cider-connection-tests.el -;; Copyright © 2012-2024 Tim King, Bozhidar Batsov, Vitalie Spinu +;; Copyright © 2012-2025 Tim King, Bozhidar Batsov, Vitalie Spinu ;; Author: Tim King ;; Bozhidar Batsov diff --git a/test/cider-debug-tests.el b/test/cider-debug-tests.el index 2bb5d6e60..ecdfe553a 100644 --- a/test/cider-debug-tests.el +++ b/test/cider-debug-tests.el @@ -1,6 +1,6 @@ ;;; cider-debug-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Tim King, Bozhidar Batsov +;; Copyright © 2012-2025 Tim King, Bozhidar Batsov ;; Author: Tim King ;; Bozhidar Batsov diff --git a/test/cider-doc-tests.el b/test/cider-doc-tests.el index bc272dc08..6abae8137 100644 --- a/test/cider-doc-tests.el +++ b/test/cider-doc-tests.el @@ -1,6 +1,6 @@ ;;; cider-doc-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2023-2024 Bozhidar Batsov +;; Copyright © 2023-2025 Bozhidar Batsov ;; Author: Bozhidar Batsov diff --git a/test/cider-eldoc-tests.el b/test/cider-eldoc-tests.el index 5611df447..143be9baf 100644 --- a/test/cider-eldoc-tests.el +++ b/test/cider-eldoc-tests.el @@ -1,6 +1,6 @@ ;;; cider-eldoc-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Tim King, Bozhidar Batsov +;; Copyright © 2012-2025 Tim King, Bozhidar Batsov ;; Author: Tim King ;; Bozhidar Batsov diff --git a/test/cider-error-parsing-tests.el b/test/cider-error-parsing-tests.el index a4361ac3f..7400b6525 100644 --- a/test/cider-error-parsing-tests.el +++ b/test/cider-error-parsing-tests.el @@ -1,6 +1,6 @@ ;;; cider-error-parsing-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Tim King, Bozhidar Batsov +;; Copyright © 2012-2025 Tim King, Bozhidar Batsov ;; Author: Tim King ;; Bozhidar Batsov diff --git a/test/cider-eval-tests.el b/test/cider-eval-tests.el index fda7b7a23..8f638e664 100644 --- a/test/cider-eval-tests.el +++ b/test/cider-eval-tests.el @@ -1,6 +1,6 @@ ;;; cider-eval-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Arne Brasseur +;; Copyright © 2012-2025 Arne Brasseur ;; Author: Arne Brasseur diff --git a/test/cider-find-tests.el b/test/cider-find-tests.el index 465dfc5dc..96a5fbf37 100644 --- a/test/cider-find-tests.el +++ b/test/cider-find-tests.el @@ -1,6 +1,6 @@ ;;; cider-find-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Bozhidar Batsov +;; Copyright © 2012-2025 Bozhidar Batsov ;; Author: Bozhidar Batsov diff --git a/test/cider-inspector-tests.el b/test/cider-inspector-tests.el index 0d2060de5..a2c2b1106 100644 --- a/test/cider-inspector-tests.el +++ b/test/cider-inspector-tests.el @@ -1,6 +1,6 @@ ;;; cider-inspectors-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Bozhidar Batsov +;; Copyright © 2012-2025 Bozhidar Batsov ;; Author: Bozhidar Batsov diff --git a/test/cider-interaction-tests.el b/test/cider-interaction-tests.el index f511267c8..ad9f30edc 100644 --- a/test/cider-interaction-tests.el +++ b/test/cider-interaction-tests.el @@ -1,6 +1,6 @@ ;;; cider-eval-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Tim King, Bozhidar Batsov +;; Copyright © 2012-2025 Tim King, Bozhidar Batsov ;; Author: Tim King ;; Bozhidar Batsov diff --git a/test/cider-jar-tests.el b/test/cider-jar-tests.el index faf173109..0892eba3c 100644 --- a/test/cider-jar-tests.el +++ b/test/cider-jar-tests.el @@ -1,6 +1,6 @@ ;;; cider-jar-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Arne Brasseur +;; Copyright © 2012-2025 Arne Brasseur ;; Author: Arne Brasseur diff --git a/test/cider-log-tests.el b/test/cider-log-tests.el index 200874c60..e83eafee1 100644 --- a/test/cider-log-tests.el +++ b/test/cider-log-tests.el @@ -1,6 +1,6 @@ ;;; cider-log-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2023-2024 Bozhidar Batsov and CIDER contributors +;; Copyright © 2023-2025 Bozhidar Batsov and CIDER contributors ;; Author: r0man diff --git a/test/cider-ns-tests.el b/test/cider-ns-tests.el index ab98499be..2bfedf333 100644 --- a/test/cider-ns-tests.el +++ b/test/cider-ns-tests.el @@ -1,6 +1,6 @@ ;;; cider-ns-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2019-2024 Bozhidar Batsov +;; Copyright © 2019-2025 Bozhidar Batsov ;; Author: Bozhidar Batsov diff --git a/test/cider-overlay-tests.el b/test/cider-overlay-tests.el index 362e472ed..f7102ecd0 100644 --- a/test/cider-overlay-tests.el +++ b/test/cider-overlay-tests.el @@ -1,6 +1,6 @@ ;;; cider-overlay-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2015-2024 Bozhidar Batsov, Artur Malabarba and CIDER contributors +;; Copyright © 2015-2025 Bozhidar Batsov, Artur Malabarba and CIDER contributors ;; Author: Artur Malabarba diff --git a/test/cider-repl-tests.el b/test/cider-repl-tests.el index 9d7535d30..250c32181 100644 --- a/test/cider-repl-tests.el +++ b/test/cider-repl-tests.el @@ -1,6 +1,6 @@ ;;; cider-repl-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Tim King, Bozhidar Batsov +;; Copyright © 2012-2025 Tim King, Bozhidar Batsov ;; Author: Tim King ;; Bozhidar Batsov diff --git a/test/cider-selector-tests.el b/test/cider-selector-tests.el index 76243e68f..ed579895c 100644 --- a/test/cider-selector-tests.el +++ b/test/cider-selector-tests.el @@ -1,6 +1,6 @@ ;;; cider-selector-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Tim King, Bozhidar Batsov +;; Copyright © 2012-2025 Tim King, Bozhidar Batsov ;; Author: Tim King ;; Bozhidar Batsov diff --git a/test/cider-stacktrace-tests.el b/test/cider-stacktrace-tests.el index d531a32df..7c0c9d8fc 100644 --- a/test/cider-stacktrace-tests.el +++ b/test/cider-stacktrace-tests.el @@ -1,6 +1,6 @@ ;;; cider-stacktrace-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Tim King, Bozhidar Batsov +;; Copyright © 2012-2025 Tim King, Bozhidar Batsov ;; Author: Tim King ;; Bozhidar Batsov diff --git a/test/cider-test-tests.el b/test/cider-test-tests.el index 4e636407f..a090b8a06 100644 --- a/test/cider-test-tests.el +++ b/test/cider-test-tests.el @@ -1,6 +1,6 @@ ;;; cider-test-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2023-2024 Bozhidar Batsov +;; Copyright © 2023-2025 Bozhidar Batsov ;; Author: Bozhidar Batsov diff --git a/test/cider-tests--no-auto.el b/test/cider-tests--no-auto.el index 9a5851a95..53961d5fa 100644 --- a/test/cider-tests--no-auto.el +++ b/test/cider-tests--no-auto.el @@ -1,6 +1,6 @@ ;;; cider-tests--no-auto.el --- Non-automated tests -*- lexical-binding: t -*- -;; Copyright © 2014-2024 Jeff Valk, Bozhidar Batsov and CIDER contributors +;; Copyright © 2014-2025 Jeff Valk, Bozhidar Batsov and CIDER contributors ;; Author: Jeff Valk diff --git a/test/cider-tests.el b/test/cider-tests.el index d28ad09ba..53fd97259 100644 --- a/test/cider-tests.el +++ b/test/cider-tests.el @@ -1,6 +1,6 @@ ;;; cider-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Tim King, Bozhidar Batsov +;; Copyright © 2012-2025 Tim King, Bozhidar Batsov ;; Author: Tim King ;; Bozhidar Batsov diff --git a/test/cider-util-tests.el b/test/cider-util-tests.el index 9c2e612e0..656e7f2db 100644 --- a/test/cider-util-tests.el +++ b/test/cider-util-tests.el @@ -1,6 +1,6 @@ ;;; cider-util-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Tim King, Bozhidar Batsov +;; Copyright © 2012-2025 Tim King, Bozhidar Batsov ;; Author: Tim King ;; Bozhidar Batsov diff --git a/test/enrich/cider-docstring-tests.el b/test/enrich/cider-docstring-tests.el index fa5de1709..ab5dcc14d 100644 --- a/test/enrich/cider-docstring-tests.el +++ b/test/enrich/cider-docstring-tests.el @@ -1,7 +1,7 @@ ;; -*- lexical-binding: t; -*- ;;; cider-docstring-tests.el -;; Copyright © 2012-2024 Bozhidar Batsov +;; Copyright © 2012-2025 Bozhidar Batsov ;; Author: Bozhidar Batsov diff --git a/test/integration/integration-test-utils.el b/test/integration/integration-test-utils.el index e31c757d3..bdefeba83 100644 --- a/test/integration/integration-test-utils.el +++ b/test/integration/integration-test-utils.el @@ -1,6 +1,6 @@ ;;; integration-test-utils.el -*- lexical-binding: t; -*- -;; Copyright © 2022-2024 Ioannis Kappas +;; Copyright © 2022-2025 Ioannis Kappas ;; This file is NOT part of GNU Emacs. diff --git a/test/integration/integration-tests.el b/test/integration/integration-tests.el index 1bfa2baaf..71081a995 100644 --- a/test/integration/integration-tests.el +++ b/test/integration/integration-tests.el @@ -1,6 +1,6 @@ ;;; integration-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2022-2024 Ioannis Kappas +;; Copyright © 2022-2025 Ioannis Kappas ;; This file is NOT part of GNU Emacs. diff --git a/test/nrepl-bencode-tests.el b/test/nrepl-bencode-tests.el index cb7b7d2ac..a4e3e59cb 100644 --- a/test/nrepl-bencode-tests.el +++ b/test/nrepl-bencode-tests.el @@ -1,6 +1,6 @@ ;;; nrepl-bencode-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Tim King, Bozhidar Batsov +;; Copyright © 2012-2025 Tim King, Bozhidar Batsov ;; Author: Tim King ;; Bozhidar Batsov diff --git a/test/nrepl-client-tests.el b/test/nrepl-client-tests.el index 43c776e95..3df845181 100644 --- a/test/nrepl-client-tests.el +++ b/test/nrepl-client-tests.el @@ -1,6 +1,6 @@ ;;; nrepl-client-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Tim King, Bozhidar Batsov +;; Copyright © 2012-2025 Tim King, Bozhidar Batsov ;; Author: Tim King ;; Bozhidar Batsov diff --git a/test/nrepl-dict-tests.el b/test/nrepl-dict-tests.el index 5337eec0d..b84c7cd42 100644 --- a/test/nrepl-dict-tests.el +++ b/test/nrepl-dict-tests.el @@ -1,6 +1,6 @@ ;;; nrepl-dict-tests.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Tim King, Bozhidar Batsov +;; Copyright © 2012-2025 Tim King, Bozhidar Batsov ;; Author: Tim King ;; Bozhidar Batsov diff --git a/test/nrepl-server-mock.el b/test/nrepl-server-mock.el index 4f5c96d66..e2724b09d 100644 --- a/test/nrepl-server-mock.el +++ b/test/nrepl-server-mock.el @@ -1,6 +1,6 @@ ;; nrepl-server-mock.el -*- lexical-binding: t; -*- -;; Copyright © 2021-2024 Ioannis Kappas +;; Copyright © 2021-2025 Ioannis Kappas ;; This file is NOT part of GNU Emacs. diff --git a/test/utils/cider-connection-test-utils.el b/test/utils/cider-connection-test-utils.el index c6d8a1f7d..b6da58e03 100644 --- a/test/utils/cider-connection-test-utils.el +++ b/test/utils/cider-connection-test-utils.el @@ -1,6 +1,6 @@ ;;; cider-connection-test-utils.el -*- lexical-binding: t; -*- -;; Copyright © 2012-2024 Tim King, Bozhidar Batsov +;; Copyright © 2012-2025 Tim King, Bozhidar Batsov ;; Author: Tim King ;; Bozhidar Batsov diff --git a/test/utils/nrepl-tests-utils.el b/test/utils/nrepl-tests-utils.el index 956fd91ab..11ec71f3e 100644 --- a/test/utils/nrepl-tests-utils.el +++ b/test/utils/nrepl-tests-utils.el @@ -1,6 +1,6 @@ ;;; nrepl-test-utils.el -*- lexical-binding: t; -*- -;; Copyright © 2021-2024 Ioannis Kappas +;; Copyright © 2021-2025 Ioannis Kappas ;; This file is NOT part of GNU Emacs. From 6ea2cc3f7c13f8e02dddab79c5c478b05431c265 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Fri, 10 Jan 2025 19:33:17 +0200 Subject: [PATCH 062/149] [eldoc] Don't error on missing docstring --- cider-docstring.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cider-docstring.el b/cider-docstring.el index 700f3c1bd..73b29ad24 100644 --- a/cider-docstring.el +++ b/cider-docstring.el @@ -157,7 +157,8 @@ that it usually has two spaces before each line used for indentation \(see https://guide.clojure.style/#docstring-indentation). While displaying the docstring to the user, we usually want to control indentation and other aspects of the presentation, so we format it before displaying." - (replace-regexp-in-string "\n " "\n" string)) + (when string + (replace-regexp-in-string "\n " "\n" string))) (provide 'cider-docstring) ;;; cider-docstring.el ends here From 3c89404b81756f0dd9c1412313564f84940473fb Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Fri, 10 Jan 2025 19:55:12 +0200 Subject: [PATCH 063/149] Bump cider-nrepl to 0.52.0 --- CHANGELOG.md | 2 +- cider.el | 2 +- dev/docker-sample-project/project.clj | 2 +- dev/tramp-sample-project/project.clj | 2 +- .../ROOT/pages/basics/middleware_setup.adoc | 12 ++--- .../ROOT/pages/basics/up_and_running.adoc | 4 +- doc/modules/ROOT/pages/cljs/shadow-cljs.adoc | 2 +- .../ROOT/pages/cljs/up_and_running.adoc | 2 +- test/cider-tests.el | 44 +++++++++---------- 9 files changed, 36 insertions(+), 36 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ecc64fd2f..995719d77 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ ### Changes - Bump the injected nREPL version to [1.3.1](https://github.com/nrepl/nrepl/blob/master/CHANGELOG.md#131-2025-01-01). -- Bump the injected `cider-nrepl` to [0.51.1](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0511-2025-01-03). +- Bump the injected `cider-nrepl` to [0.52.0](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0520-2025-01-10). - [#3574](https://github.com/clojure-emacs/cider/issues/3574): New value `per-project` for `cider-repl-history-file` to save the history on a per-project basis. ### Bugs fixed diff --git a/cider.el b/cider.el index 69dc7d2f0..80cdb402b 100644 --- a/cider.el +++ b/cider.el @@ -573,7 +573,7 @@ the artifact.") Used when `cider-jack-in-auto-inject-clojure' is set to `latest'.") -(defconst cider-required-middleware-version "0.51.1" +(defconst cider-required-middleware-version "0.52.0" "The CIDER nREPL version that's known to work properly with CIDER.") (defcustom cider-injected-middleware-version cider-required-middleware-version diff --git a/dev/docker-sample-project/project.clj b/dev/docker-sample-project/project.clj index 7936d6150..caa543382 100644 --- a/dev/docker-sample-project/project.clj +++ b/dev/docker-sample-project/project.clj @@ -2,4 +2,4 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.51.1"]]) + :plugins [[cider/cider-nrepl "0.52.0"]]) diff --git a/dev/tramp-sample-project/project.clj b/dev/tramp-sample-project/project.clj index 011431e63..5521907a8 100644 --- a/dev/tramp-sample-project/project.clj +++ b/dev/tramp-sample-project/project.clj @@ -2,5 +2,5 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.51.1"] + :plugins [[cider/cider-nrepl "0.52.0"] [refactor-nrepl "3.9.0"]]) diff --git a/doc/modules/ROOT/pages/basics/middleware_setup.adoc b/doc/modules/ROOT/pages/basics/middleware_setup.adoc index 3c51268a1..f80da72d7 100644 --- a/doc/modules/ROOT/pages/basics/middleware_setup.adoc +++ b/doc/modules/ROOT/pages/basics/middleware_setup.adoc @@ -32,14 +32,14 @@ Use the convenient plugin for defaults, either in your project's [source,clojure] ---- -:plugins [[cider/cider-nrepl "0.51.1"]] +:plugins [[cider/cider-nrepl "0.52.0"]] ---- A minimal `profiles.clj` for CIDER would be: [source,clojure] ---- -{:repl {:plugins [[cider/cider-nrepl "0.51.1"]]}} +{:repl {:plugins [[cider/cider-nrepl "0.52.0"]]}} ---- WARNING: Be careful not to place this in the `:user` profile, as this way CIDER's @@ -59,7 +59,7 @@ all of their projects using a `~/.boot/profile.boot` file like so: (require 'boot.repl) (swap! boot.repl/*default-dependencies* - concat '[[cider/cider-nrepl "0.51.1"]]) + concat '[[cider/cider-nrepl "0.52.0"]]) (swap! boot.repl/*default-middleware* conj 'cider.nrepl/cider-middleware) @@ -76,11 +76,11 @@ run `cider-connect` or `cider-connect-cljs`. [source,clojure] ---- - :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.51.1"}} + :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.52.0"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware]"]} :cider-cljs {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.339"} - cider/cider-nrepl {:mvn/version "0.51.1"} + cider/cider-nrepl {:mvn/version "0.52.0"} cider/piggieback {:mvn/version "0.5.3"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware,cider.piggieback/wrap-cljs-repl]"]} @@ -99,7 +99,7 @@ NOTE: Make sure you're using https://github.com/clojurephant/clojurephant[Clojur ---- dependencies { devImplementation 'nrepl:nrepl:0.9.0' - devImplementation 'cider:cider-nrepl:0.51.1' + devImplementation 'cider:cider-nrepl:0.52.0' } tasks.named('clojureRepl') { diff --git a/doc/modules/ROOT/pages/basics/up_and_running.adoc b/doc/modules/ROOT/pages/basics/up_and_running.adoc index 79f127fe0..2f0432416 100644 --- a/doc/modules/ROOT/pages/basics/up_and_running.adoc +++ b/doc/modules/ROOT/pages/basics/up_and_running.adoc @@ -73,7 +73,7 @@ simple - CIDER simply passes the extra dependencies and nREPL configuration to your build tool in the command it runs to start the nREPL server. Here's how this looks for `tools.deps`: - $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.1"} cider/cider-nrepl {:mvn/version "0.51.1"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' + $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.1"} cider/cider-nrepl {:mvn/version "0.52.0"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' TIP: If you don't want `cider-jack-in` to inject dependencies automatically, set `cider-inject-dependencies-at-jack-in` to `nil`. Note that you'll have to setup @@ -350,7 +350,7 @@ It is also possible for plain `clj`, although the command is somewhat longer: [source,sh] ---- -$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.51.1"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" +$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.52.0"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" ---- Alternatively, you can start nREPL either manually or using the facilities diff --git a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc index ee6462fae..28a20e06a 100644 --- a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc +++ b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc @@ -62,7 +62,7 @@ And connect to it with `cider-connect`. ...For that to work, `shadow-cljs.edn` contents like the following are assumed: ```clj - :dependencies [[cider/cider-nrepl "0.51.1"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) + :dependencies [[cider/cider-nrepl "0.52.0"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) [refactor-nrepl/refactor-nrepl "3.9.0"]] ;; refactor-nrepl is optional :nrepl {:middleware [cider.nrepl/cider-middleware ;; it's advisable to explicitly add this middleware. It's automatically added by shadow-cljs (if available in the classpath), unless `:nrepl {:cider false}` diff --git a/doc/modules/ROOT/pages/cljs/up_and_running.adoc b/doc/modules/ROOT/pages/cljs/up_and_running.adoc index 9f37b4291..6625e8144 100644 --- a/doc/modules/ROOT/pages/cljs/up_and_running.adoc +++ b/doc/modules/ROOT/pages/cljs/up_and_running.adoc @@ -61,7 +61,7 @@ or in `build.gradle`: ---- dependencies { devImplementation 'nrepl:nrepl:1.3.1' - devImplementation 'cider:cider-nrepl:0.51.1' + devImplementation 'cider:cider-nrepl:0.52.0' devImplementation 'cider:cider-piggieback:0.5.3' } diff --git a/test/cider-tests.el b/test/cider-tests.el index 53fd97259..b7298e36b 100644 --- a/test/cider-tests.el +++ b/test/cider-tests.el @@ -144,7 +144,7 @@ (describe "when there is a single dependency" (before-each (setq-local cider-injected-nrepl-version "0.9.0") - (setq-local cider-injected-middleware-version "0.51.1") + (setq-local cider-injected-middleware-version "0.52.0") (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t) @@ -155,7 +155,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.51.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.52.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -169,7 +169,7 @@ "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.51.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.52.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -182,7 +182,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure foo.bar/baz]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.51.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.52.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -196,7 +196,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.51.1") + (shell-quote-argument "cider/cider-nrepl:0.52.0") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -206,7 +206,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.51.1") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.52.0") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -223,7 +223,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.51.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.52.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -237,7 +237,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.51.1") + (shell-quote-argument "cider/cider-nrepl:0.52.0") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -259,7 +259,7 @@ :to-equal (concat "-o -U update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.51.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.52.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -271,7 +271,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.51.1") + (shell-quote-argument "cider/cider-nrepl:0.52.0") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -280,7 +280,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.51.1") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.52.0") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -295,14 +295,14 @@ (setq-local cider-jack-in-nrepl-middlewares '(("refactor-nrepl.middleware/wrap-refactor" :predicate middlewares-predicate) "cider.nrepl/cider-middleware" ("another/middleware")))) (it "includes plugins whose predicates return true" (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.51.1")))) + :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.52.0")))) (it "includes middlewares whose predicates return true" (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware" "another/middleware"))) (it "ignores plugins whose predicates return false" (spy-on 'plugins-predicate :and-return-value nil) (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("cider/cider-nrepl" "0.51.1"))) + :to-equal '(("cider/cider-nrepl" "0.52.0"))) (spy-on 'middlewares-predicate :and-return-value nil) (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("cider.nrepl/cider-middleware" "another/middleware"))) @@ -331,7 +331,7 @@ :and-return-value '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware")) (spy-on 'cider-jack-in-normalized-lein-plugins :and-return-value '(("refactor-nrepl" "2.0.0") - ("cider/cider-nrepl" "0.51.1") + ("cider/cider-nrepl" "0.52.0") ("mx.cider/lein-enrich-classpath" "1.19.3"))) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t)) @@ -342,7 +342,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.51.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.52.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -361,7 +361,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.51.1") + (shell-quote-argument "cider/cider-nrepl:0.52.0") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -456,7 +456,7 @@ (setq-local cider-jack-in-dependencies nil) (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.51.1\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.52.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) @@ -471,7 +471,7 @@ (it "allows specifying custom aliases with `cider-clojure-cli-aliases`" (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.51.1\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.52.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:dev:test:cider/nrepl") ""))) (setq-local cider-jack-in-dependencies nil) @@ -489,7 +489,7 @@ (it (format "should remove duplicates, yielding the same result (for %S command invocation)" command) ;; repeat the same test for PowerShell too (let ((expected (string-join `("-Sdeps " - ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.51.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" + ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.52.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" command) " -M:dev:test:cider/nrepl") ""))) @@ -499,7 +499,7 @@ :to-equal expected)))) (it "handles aliases correctly" (let ((expected (string-join `("-Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.51.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.52.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -527,7 +527,7 @@ :to-equal expected))))) (it "allows for global options" (let ((expected (string-join `("-J-Xverify:none -Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.51.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.52.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -538,7 +538,7 @@ (setq-local cider-jack-in-dependencies '(("org.clojure/tools.deps" (("git/sha" . "6ae2b6f71773de7549d7f22759e8b09fec27f0d9") ("git/url" . "https://github.com/clojure/tools.deps/"))))) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.51.1\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.52.0\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) From c0e7f2526d7b5ed67c723c4fbf3ce5391f4f5123 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Fri, 10 Jan 2025 19:55:20 +0200 Subject: [PATCH 064/149] [info] Add support for sources JAR downloading on `info' events --- CHANGELOG.md | 1 + cider-client.el | 47 +++++++++++++++---- .../usage/working_with_documentation.adoc | 18 +++++-- nrepl-client.el | 23 ++++++--- 4 files changed, 68 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 995719d77..1e83c9bba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### New features +- Automatic downloading of third-party Java sources for better Java documentation and jump-to-definition functionality. See [Obtaining source JARs](https://docs.cider.mx/cider/usage/working_with_documentation.html#obtaining-source-jars). - CIDER [History](https://docs.cider.mx/cider/repl/history.html): Add a command to delete history item at point. ### Changes diff --git a/cider-client.el b/cider-client.el index df4eacfed..b72ccf371 100644 --- a/cider-client.el +++ b/cider-client.el @@ -189,16 +189,20 @@ the current connection. Return the id of the sent message. If TOOLING is truthy then the tooling session is used." (nrepl-send-request request callback (or connection (cider-current-repl 'any 'ensure)) tooling)) -(defun cider-nrepl-send-sync-request (request &optional connection abort-on-input) +(defun cider-nrepl-send-sync-request (request &optional connection + abort-on-input callback) "Send REQUEST to the nREPL server synchronously using CONNECTION. Hold till final \"done\" message has arrived and join all response messages of the same \"op\" that came along and return the accumulated response. If ABORT-ON-INPUT is non-nil, the function will return nil at the first sign of user input, so as not to hang the -interface." +interface. +if CALLBACK is non-nil, it will additionally be called on all received messages." (nrepl-send-sync-request request (or connection (cider-current-repl 'any 'ensure)) - abort-on-input)) + abort-on-input + nil + callback)) (defun cider-nrepl-send-unhandled-request (request &optional connection) "Send REQUEST to the nREPL CONNECTION and ignore any responses. @@ -342,6 +346,17 @@ The default value in nREPL is 1024." :group 'cider :package-version '(cider . "0.25.0")) +(defcustom cider-download-java-sources nil + "Whether to automatically download source artifacts for 3rd-party Java classes. + +When enabled, CIDER will attempt to download source JARs from Maven for +Java classes if the source file is not found locally. This downloading only +happens once per artifact, and only when the user jumps to definition or +requests `cider-doc' on a Java class or a member of the class." + :type 'boolean + :group 'cider + :package-version '(cider . "1.17.0")) + (defun cider--print-fn () "Return the value to send in the nrepl.middleware.print/print slot." (pcase cider-print-fn @@ -681,13 +696,25 @@ CONTEXT represents a completion context for compliment." (defun cider-sync-request:info (symbol &optional class member context) "Send \"info\" op with parameters SYMBOL or CLASS and MEMBER, honor CONTEXT." - (let ((var-info (thread-first `("op" "info" - "ns" ,(cider-current-ns) - ,@(when symbol `("sym" ,symbol)) - ,@(when class `("class" ,class)) - ,@(when member `("member" ,member)) - ,@(when context `("context" ,context))) - (cider-nrepl-send-sync-request (cider-current-repl))))) + (let* ((req + `("op" "info" + "ns" ,(cider-current-ns) + ,@(when symbol `("sym" ,symbol)) + ,@(when class `("class" ,class)) + ,@(when member `("member" ,member)) + ,@(when context `("context" ,context)) + ,@(when cider-download-java-sources `("download-sources-jar" "1")))) + (callback + (lambda (resp) + (let ((status (nrepl-dict-get resp "status")) + (coords (nrepl-dict-get resp "coords"))) + (when (member "download-sources-jar" status) + (message "Local source not found, downloading Java sources for artifact %s/%s %s..." + (nrepl-dict-get coords "group") + (nrepl-dict-get coords "artifact") + (nrepl-dict-get coords "version")))))) + (var-info + (cider-nrepl-send-sync-request req (cider-current-repl) nil callback))) (if (member "no-info" (nrepl-dict-get var-info "status")) nil var-info))) diff --git a/doc/modules/ROOT/pages/usage/working_with_documentation.adoc b/doc/modules/ROOT/pages/usage/working_with_documentation.adoc index fe72f33f5..72dc04654 100644 --- a/doc/modules/ROOT/pages/usage/working_with_documentation.adoc +++ b/doc/modules/ROOT/pages/usage/working_with_documentation.adoc @@ -17,11 +17,21 @@ as some people prefer to keep holding `Control` and some don't. Normally the command operates on the symbol at point. If invoked with a prefix argument, or no symbol is found at point, it will prompt for a symbol. -NOTE: If using `enrich-classpath`, Java doc comments are available and rendered in the same way that Clojure docstrings are. -They're often much more handy than opening Javadoc in a browser. Starting from CIDER 1.8.0, -the HTML-like language that they use is nicely rendered into syntax-colored strings, well-aligned tables, etc +== Local JavaDoc -== JavaDoc +Most JDK distributions ship with a `src.zip` file (an archive with all base Java source files). If you have such archive present in your JDK, CIDER will automatically parse the source file when you query the documentation for a Java class (e.g. `java.lang.Thread`) or a method (e.g. `java.lang.Thread/currentThread`) and will display the properly formatted JavaDoc in the documentation buffer. You will also see better Eldoc documentation (minibuffer hints) for Java methods. If the source file are present, you are able to jump to class or method definition by pressing kbd:[M-.] on the class name or method name. + +Furthermore, CIDER is able to parse JavaDoc source files and jump to definitions for third-party Java libraries if you have downloaded the special `-sources.jar` file for that library. See the next section on how to download source JARs. + +== Obtaining source JARs + +Since version 1.17, CIDER is able to download the necessary source JAR file automatically when you either request the documentation for a Java class/method or when you jump to the definition of a Java class/method. In order for the sources to be downloaded, you need to enable custom variable `cider-download-java-sources`. When the download triggers, CIDER displays a minibuffer message about that. Fetching a single source JAR usually takes a few seconds. CIDER will make only one attempt to download the source JAR for a particular dependency per process — if it failed to download (usually, because the dependency doesn't have a source JAR published to Maven), CIDER will not retry that until the next restart. + +NOTE: While Eldoc functionality benefits from having Java sources, the eldoc itself will not trigger the downloading of Java source JARs. You will have to lookup the documentation once manually or jump to the definition in order for the JAR is downloaded. After that, Eldoc will pick up the Java sources and display better hints. + +Alternatively, you can use https://github.com/clojure-emacs/enrich-classpath[`enrich-classpath`] to download all source JARs used by your current project at once. This will incur longer startup time, but will not trigger individual JARs fetching at the runtime. + +== Online JavaDoc CIDER provides a quick access to the online Javadoc documentation via the command `cider-javadoc` (kbd:[C-c C-d j] or kbd:[C-c C-d C-j]), using your default browser. diff --git a/nrepl-client.el b/nrepl-client.el index 3479d3857..00a4c143e 100644 --- a/nrepl-client.el +++ b/nrepl-client.el @@ -939,21 +939,30 @@ the standard session." (declare-function cider-repl-emit-interactive-stderr "cider-repl") (declare-function cider--render-stacktrace-causes "cider-eval") -(defun nrepl-send-sync-request (request connection &optional abort-on-input tooling) +(defun nrepl-send-sync-request (request connection &optional abort-on-input + tooling callback) "Send REQUEST to the nREPL server synchronously using CONNECTION. Hold till final \"done\" message has arrived and join all response messages of the same \"op\" that came along. If ABORT-ON-INPUT is non-nil, the function will return nil at the first sign of user input, so as not to hang the interface. -If TOOLING, use the tooling session rather than the standard session." +If TOOLING, use the tooling session rather than the standard session. + +If CALLBACK is non-nil, it will additionally be called on all received +messages. This shouldn't be used this for any control logic — use the +asynchronous `nrepl-send-request' directly for that. CALLBACK here should +be used to react to some intermediate events in an otherwise synchronous +command and e.g. notify the user about them." (let* ((time0 (current-time)) (response (cons 'dict nil)) (nrepl-ongoing-sync-request t) + (cb (lambda (resp) + ;; If caller has provided `callback', call it on the response. + (when callback + (funcall callback resp)) + (nrepl--merge response resp))) status) - (nrepl-send-request request - (lambda (resp) (nrepl--merge response resp)) - connection - tooling) + (nrepl-send-request request cb connection tooling) (while (and (not (member "done" status)) (not (and abort-on-input (input-pending-p)))) @@ -962,7 +971,7 @@ If TOOLING, use the tooling session rather than the standard session." ;; anywhere, and we'll just timeout. So we forward it to the user. (if (member "need-input" status) (progn (cider-need-input (current-buffer)) - ;; If the used took a few seconds to respond, we might + ;; If the user took a few seconds to respond, we might ;; unnecessarily timeout, so let's reset the timer. (setq time0 (current-time))) ;; break out in case we don't receive a response for a while From e95d2affbbdb1b37348202b07510f62e56281abf Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Thu, 16 Jan 2025 22:41:33 +0200 Subject: [PATCH 065/149] [docs] Scrub Getting Started section (#3771) --- .../ROOT/pages/about/compatibility.adoc | 130 ++---------------- .../ROOT/pages/basics/installation.adoc | 9 +- .../ROOT/pages/basics/middleware_setup.adoc | 64 ++------- .../ROOT/pages/basics/up_and_running.adoc | 118 +++++++--------- doc/modules/ROOT/pages/index.adoc | 2 +- 5 files changed, 77 insertions(+), 246 deletions(-) diff --git a/doc/modules/ROOT/pages/about/compatibility.adoc b/doc/modules/ROOT/pages/about/compatibility.adoc index f8ea78c5d..310360536 100644 --- a/doc/modules/ROOT/pages/about/compatibility.adoc +++ b/doc/modules/ROOT/pages/about/compatibility.adoc @@ -16,15 +16,17 @@ NOTE: We pay special attention to supporting whatever nREPL is bundled with the == Java -CIDER officially targets Java 8, Java 11, Java 17, Java 21 and the most recent rapid -release version (e.g. Java 22). Generally speaking, we aim -to support all Java releases that are currently officially supported -by Oracle.footnote:[You can find more information about the supported Java releases https://www.oracle.com/java/technologies/java-se-support-roadmap.html[here].] +CIDER officially targets Java 8, Java 11, Java 17, Java 21, and the most recent +non-LTS version. Generally speaking, we aim to support all Java releases that +are currently officially supported by Oracle.footnote:[You can find more +information about the supported Java releases +https://www.oracle.com/java/technologies/java-se-support-roadmap.html[here].] NOTE: The requirements for Java are pretty much ``cider-nrepl``'s requirements. -On Linux you are also required to make sure that JDK sources and javadocs are installed. -You can find example commands in xref:troubleshooting.adoc#navigation-to-jdk-sources-doesnt-work[Troubleshooting]. +While CIDER can work with +https://www.ibm.com/think/topics/jvm-vs-jre-vs-jdk[JRE], it is recommended to +use the full JDK distribution. == Clojure @@ -46,58 +48,12 @@ Currently we apply the same policy for Clojure and ClojureScript support. == Compatibility Matrix -NOTE: For a very long time CIDER and cider-nrepl were released in lock-step, but -this changed in CIDER 0.18. The actual releases diverged for the first time in -CIDER 0.23. - Below you can find the official compatibility matrix for CIDER. .Compatibility Matrix |=== | CIDER | Emacs | nREPL | cider-nrepl | Required JDK | Required Clojure -| 0.22 -| 25.1 -| 0.6 -| 0.22 -| 8 -| 1.8 - -| 0.23 -| 25.1 -| 0.6 -| 0.22 -| 8 -| 1.8 - -| 0.24 -| 25.1 -| 0.6 -| 0.24 -| 8 -| 1.8 - -| 0.25 -| 25.1 -| 0.6 -| 0.25 -| 8 -| 1.8 - -| 0.26 -| 25.1 -| 0.6 -| 0.25 -| 8 -| 1.8 - -| 1.0 -| 25.1 -| 0.6 -| 0.25 -| 8 -| 1.8 - | 1.1 | 25.1 | 0.6 @@ -105,55 +61,6 @@ Below you can find the official compatibility matrix for CIDER. | 8 | 1.8 -| 1.2 -| 26.1 -| 0.9 -| 0.27 -| 8 -| 1.8 - -| 1.3 -| 26.1 -| 0.9 -| 0.28 -| 8 -| 1.8 - -| 1.4 -| 26.1 -| 0.9 -| 0.28 -| 8 -| 1.8 - -| 1.5 -| 26.1 -| 0.9 -| 0.28 -| 8 -| 1.8 - -| 1.6 -| 26.1 -| 1.0 -| 0.29 -| 8 -| 1.8 - -| 1.7 -| 26.1 -| 1.0 -| 0.30 -| 8 -| 1.8 - -| 1.8 -| 26.1 -| 1.0 -| 0.40 -| 8 -| 1.8 - | 1.9 | 26.1 | 1.0 @@ -161,13 +68,6 @@ Below you can find the official compatibility matrix for CIDER. | 8 | 1.8 -| 1.12 -| 26.1 -| 1.0 -| 0.44 -| 8 -| 1.9 - | 1.13 | 26.1 | 1.0 @@ -175,20 +75,6 @@ Below you can find the official compatibility matrix for CIDER. | 8 | 1.9 -| 1.14 -| 26.1 -| 1.0 -| 0.47 -| 8 -| 1.10 - -| 1.15 -| 26.1 -| 1.0 -| 0.49 -| 8 -| 1.10 - | 1.16 | 26.1 | 1.0 diff --git a/doc/modules/ROOT/pages/basics/installation.adoc b/doc/modules/ROOT/pages/basics/installation.adoc index 182906cbb..8e17b377f 100644 --- a/doc/modules/ROOT/pages/basics/installation.adoc +++ b/doc/modules/ROOT/pages/basics/installation.adoc @@ -12,17 +12,14 @@ release. If you're new to Emacs you might want to go through https://www.gnu.org/software/emacs/tour/index.html[the guided tour of Emacs] and the built-in tutorial (just press kbd:[C-h t]). -CIDER officially supports Emacs 26.1+, Java 8+ and Clojure(Script) -1.8+. CIDER 0.17 (Andalucía) was the final release which supported -Java 7 and Clojure(Script) 1.7. +CIDER officially supports Emacs 26.1+, Java 8+, and Clojure(Script) 1.10+. If +you need to work with earlier versions, check +xref:about/compatibility.adoc#compatibility-matrix[compatibility matrix]. You'll also need a recent version of either the Clojure CLI tools or your favorite build tool (Leiningen, Boot, or Gradle) to be able to start CIDER via `cider-jack-in`. Generally it's a good idea to use the latest stable versions. -On Linux you are also required to make sure that JDK sources and javadocs are installed. -You can find example commands in xref:troubleshooting.adoc#navigation-to-jdk-sources-doesnt-work[Troubleshooting]. - == Installation via package.el CIDER is available on all major `package.el` community diff --git a/doc/modules/ROOT/pages/basics/middleware_setup.adoc b/doc/modules/ROOT/pages/basics/middleware_setup.adoc index f80da72d7..255eac6a5 100644 --- a/doc/modules/ROOT/pages/basics/middleware_setup.adoc +++ b/doc/modules/ROOT/pages/basics/middleware_setup.adoc @@ -4,31 +4,19 @@ NOTE: You can skip this section if you don't plan to use `cider-connect` or don't care about the advanced functionality that requires `cider-nrepl`. -Much of CIDER's functionality depends on its own https://github.com/clojure-emacs/cider-nrepl[nREPL -middleware]. Starting -with version 0.11, `cider-jack-in` (kbd:[C-c C-x (C-)j (C-)j]) -automatically injects this middleware and other dependencies as required. - -NOTE: In the past, if you were setting up CIDER, you might have had to -modify `profiles.clj` or `profile.boot`. CIDER now handles -everything automatically and you don't need to add anything -special to these files. The same is true of your `deps.edn` file and -your `build.gradle` (as of Clojurephant 0.7.0-alpha.6). - -If you prefer a standalone REPL, you will need to invoke -`cider-connect` instead of `cider-jack-in` and manually add the -dependencies to your Clojure project (explained in the following -sections). +Much of CIDER's functionality depends on its own +https://github.com/clojure-emacs/cider-nrepl[nREPL middleware]. `cider-jack-in` +(kbd:[C-c C-x (C-)j (C-)j]) automatically injects this middleware and other +dependencies as required. But if you prefer a standalone REPL, you will need to +invoke `cider-connect` instead of `cider-jack-in` and manually add the +dependencies to your Clojure project (explained in the following sections). == Setting Up a Standalone REPL === Using Leiningen -NOTE: Make sure you're using Leiningen 2.9.0 or newer, as 2.9.0 is the first -release to ship with nREPL 0.6. - Use the convenient plugin for defaults, either in your project's -`project.clj` file or in the :repl profile in `~/.lein/profiles.clj`. +`project.clj` file or in the `:repl` profile in `~/.lein/profiles.clj`. [source,clojure] ---- @@ -46,27 +34,6 @@ WARNING: Be careful not to place this in the `:user` profile, as this way CIDER' middleware will always get loaded, causing `lein` to start slower. You really need it just for `lein repl` and this is what the `:repl` profile is for. -=== Using Boot - -NOTE: Make sure you're using Boot 2.8.3 or newer, as 2.8.3 is the first -release to ship with nREPL 0.6. - -Boot users can configure the tool to include the middleware automatically in -all of their projects using a `~/.boot/profile.boot` file like so: - -[source,clojure] ----- -(require 'boot.repl) - -(swap! boot.repl/*default-dependencies* - concat '[[cider/cider-nrepl "0.52.0"]]) - -(swap! boot.repl/*default-middleware* - conj 'cider.nrepl/cider-middleware) ----- - -For more information visit https://github.com/boot-clj/boot/wiki/Cider-REPL[boot-clj wiki]. - === Using tools.deps You can add the following aliases to your deps.edn in order to launch @@ -81,7 +48,7 @@ run `cider-connect` or `cider-connect-cljs`. :cider-cljs {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.339"} cider/cider-nrepl {:mvn/version "0.52.0"} - cider/piggieback {:mvn/version "0.5.3"}} + cider/piggieback {:mvn/version "0.6.0"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware,cider.piggieback/wrap-cljs-repl]"]} ---- @@ -133,11 +100,10 @@ server with CIDER's own nREPL handler. It goes without saying that your project should depend on `cider-nrepl`. -NOTE: Prior to CIDER 0.18, CIDER and cider-nrepl were always released together -and their versions had to match for things to work (e.g. CIDER 0.15 required -cider-nrepl 0.15). But as the prominence of cider-nrepl grew and many other -tools started using it, the two projects evolved separately and are no longer in -tight lock-step. Usually, any recent version of cider-nrepl should be (mostly) -compatible with a recent version of CIDER. You can check the required version of -cider-nrepl for your version of CIDER by looking at -`cider-required-middleware-version`. +NOTE: CIDER and cider-nrepl projects are co-developed, but are not released in a +lock-step — they have differing versions. Usually, any recent version of +cider-nrepl should be (mostly) compatible with a recent version of CIDER. You +can check the required version of cider-nrepl for your version of CIDER by +looking at `cider-required-middleware-version`. See also the +xref:about/compatibility.adoc#compatibility-matrix[compatibility +matrix]. diff --git a/doc/modules/ROOT/pages/basics/up_and_running.adoc b/doc/modules/ROOT/pages/basics/up_and_running.adoc index 2f0432416..49d88233a 100644 --- a/doc/modules/ROOT/pages/basics/up_and_running.adoc +++ b/doc/modules/ROOT/pages/basics/up_and_running.adoc @@ -3,13 +3,13 @@ To use CIDER, you'll need to connect it to a running nREPL server that is associated with your program. Most Clojure developers use standard -build tooling such as Leiningen, Boot, or Gradle, and CIDER can +build tooling such as tools.deps, Leiningen, or Gradle, and CIDER can automatically work with those tools to get you up and running quickly. But those tools are not required; CIDER can connect to an nREPL server that is already started and is managed separately. -NOTE: CIDER will automatically work with Leiningen 2.9.0+ or Boot -2.8.3+. Older versions are not supported. +NOTE: CIDER will automatically work with Leiningen 2.9.0+ or a recent +tools.deps. Older versions are not supported. There are two ways to connect CIDER to an nREPL server: @@ -56,20 +56,19 @@ NOTE: `cider-jack-in` is mainly designed for local development (with files on a local machine and the nREPL process running on the same machine). It does support various common remote/container scenarios, as documented later in this section. Due to the large variation of remote scenarios it cannot support all of them, so in -some cases a manual nREPL start and usage of `cider-connect` might be a better option. +some cases, a better option would be to start nREPL manually and connect to it with `cider-connect`. === Auto-Injecting Dependencies While CIDER's core functionality requires nothing more than an nREPL server, -there are many advanced features that depend on the presence of additional -nREPL middleware. In the early versions of CIDER (up to CIDER 0.11) users had -to add those dependencies themselves, which was a painful and error-prone process. -Fortunately today that's handled auto-magically when you're using `cider-jack-in`. +there are many advanced features that depend on the presence of additional nREPL +middleware. Fortunately, if you're using `cider-jack-in`, that's handled +auto-magically. -If your project uses `lein`, `boot` or `tools.deps` (`deps.edn`), CIDER will +If your project uses `lein` or `tools.deps` (`deps.edn`), CIDER will automatically inject all the necessary nREPL dependencies (e.g. `cider-nrepl` or `piggieback`) when it starts the server. The injection process is extremely -simple - CIDER simply passes the extra dependencies and nREPL configuration to +simple - CIDER passes the extra dependencies and nREPL configuration to your build tool in the command it runs to start the nREPL server. Here's how this looks for `tools.deps`: @@ -77,8 +76,7 @@ this looks for `tools.deps`: TIP: If you don't want `cider-jack-in` to inject dependencies automatically, set `cider-inject-dependencies-at-jack-in` to `nil`. Note that you'll have to setup -the dependencies yourself (see xref:basics/middleware_setup.adoc[nREPL Middleware Setup]), -just as in CIDER 0.10 and older. +the dependencies yourself (see xref:basics/middleware_setup.adoc[nREPL Middleware Setup]). Normally `cider-jack-in` would inject only `cider-nrepl` and `cider-jack-in-cljs` would add `piggieback` as well. The injection mechanism is configurable and @@ -119,14 +117,43 @@ for example, if your project defaults to an older version of Clojure than that supported by the CIDER middleware. Set `cider-jack-in-auto-inject-clojure` appropriately to enable this. +=== Enabling nREPL JVMTI agent + +Since version 1.2.0, nREPL includes a native JVMTI agent which makes the eval +interrupts work properly on Java 21 and later. To enable the agent, the Java +process should be launched with `-Djdk.attach.allowAttachSelf`. CIDER will do it +automatically during jack-in if `cider-enable-nrepl-jvmti-agent` variable is set +to `t`. + +[IMPORTANT] +==== +`cider-enable-nrepl-jvmti-agent` has no effect if you start a REPL +process outside of Emacs and connect to it with `cider-connect`. In that +scenario, you have to add `-Djdk.attach.allowAttachSelf` Java property manually +through the means of the build tool. In Leiningen, add this to `project.clj`: + +[source,lisp] +---- +:jvm-opts ["-Djdk.attach.allowAttachSelf"] +---- + +In tools.deps, add this to one of the aliases that you enable with the REPL: + +[source,lisp] +---- +:aliases {:dev + {:jvm-opts ["-Djdk.attach.allowAttachSelf"] + ...}} +---- +==== + === Jacking-in without a Project If you try to run `cider-jack-in` outside a project directory, CIDER will warn you and ask you to confirm whether you really want to do this; more often than not, this is an accident. If you decide to proceed, CIDER will invoke the command configured in -`cider-jack-in-default`. Prior to CIDER 0.17, this defaulted to `lein` -but was subsequently switched to `clj`, Clojure's basic startup command. +`cider-jack-in-default` (defaults to `clj`, Clojure's basic startup command). TIP: You can set `cider-allow-jack-in-without-project` to `t` if you'd like to disable the warning displayed when jacking-in outside a project. @@ -185,17 +212,16 @@ with === Customizing the Jack-in Command Behavior -You can use kbd:[C-u M-x] `cider-jack-in` kbd:[RET] to -specify the exact command that `cider-jack-in` would run. -This option is very useful is you want to specify a something like a `lein` -or `deps.edn` profile. +You can use kbd:[C-u M-x] `cider-jack-in` kbd:[RET] to specify the exact command +that `cider-jack-in` would run. This option is very useful is you want to e.g. +specify extra Leiningen profiles or `deps.edn` aliases. Alternatively you can kbd:[C-u C-u M-x] `cider-jack-in` kbd:[RET], which is a variation of the previous command. This command will first prompt you for the project you want to launch `cider-jack-in` in, which is pretty handy if you're in some other directory currently. This option is also useful if your project -contains some combination of project.clj, build.boot and deps.edn and you want -to launch a REPL for one or the other. +contains some combination of `project.clj` and `deps.edn` and you want to launch +a REPL for one or the other. NOTE: The examples use only `cider-jack-in`, but this behavior is consistent for all `cider-jack-in-\*` commands. @@ -204,36 +230,6 @@ You can further customize the command line CIDER uses for `cider-jack-in` by modifying the some options. Those differ a bit between the various tools, so we'll examine them tool by tool. -==== Enabling nREPL JVMTI agent - -Since version 1.2.0, nREPL includes a native JVMTI agent which makes the eval -interrupts work properly on Java 21 and later. To enable the agent, the Java -process should be launched with `-Djdk.attach.allowAttachSelf`. CIDER will do it -automatically during jack-in if `cider-enable-nrepl-jvmti-agent` variable is set -to `t`. - -[IMPORTANT] -==== -`cider-enable-nrepl-jvmti-agent` has no effect if you start a REPL -process outside of Emacs and connect to it with `cider-connect`. In that -scenario, you have to add `-Djdk.attach.allowAttachSelf` Java property manually -through the means of the build tool. In Leiningen, add this to `project.clj`: - -[source,lisp] ----- -:jvm-opts ["-Djdk.attach.allowAttachSelf"] ----- - -In tools.deps, add this to one of the aliases that you enable with the REPL: - -[source,lisp] ----- -:aliases {:dev - {:jvm-opts ["-Djdk.attach.allowAttachSelf"] - ...}} ----- -==== - ==== Leiningen Options * `cider-lein-command` - the name of the Leiningen executable (`lein` by default) @@ -264,13 +260,6 @@ with the following alternatives NOTE: Alternatively you can use WSL (e.g. to run nREPL and Emacs there), which will likely result in a better overall development experience. -==== Boot Options - -* `cider-boot-command` - the name of the Boot executable (`boot` by default) -* `cider-boot-parameters` - these are usually task names and their parameters -(e.g., `dev` for launching boot's dev task instead of the standard `repl -s -wait`) - ==== Gradle Options * `cider-gradle-command` - the name of the Gradle executable (`./gradlew` by default) @@ -287,9 +276,9 @@ Which Jack-In Command is used is based on the project type. You can override the This allows for fine-grained control over how cider starts the nrepl-server. The precedence order for determining the Jack-In Command is: -1) :jack-in-cmd if provided as a parameter, -2) `cider-jack-in-command` if set as a directory local variable, and -3) inferred from the project type (the default). +1. `:jack-in-cmd` if provided as a parameter, +2. `cider-jack-in-command` if set as a directory local variable, and +3. Inferred from the project type (the default). ==== Setting a project-wide command @@ -339,13 +328,6 @@ $ lein repl :headless This will start the project's nREPL server. -If your project uses `boot`, do this instead: - -[source,sh] ----- -$ boot repl -s wait (or whatever task launches a repl) ----- - It is also possible for plain `clj`, although the command is somewhat longer: [source,sh] @@ -390,7 +372,7 @@ connect via ssh to remote hosts when unable to connect directly. It's There's also `nrepl-force-ssh-for-remote-hosts` which will force the use of ssh for remote connection unconditionally. -WARNING: As nREPL connections are insecure by default you're encouraged to use only SSH +WARNING: As nREPL connections are insecure by default, you're encouraged to use only SSH tunneling when connecting to servers running outside of your network. There's a another case in which CIDER may optionally leverage the `ssh` command - when diff --git a/doc/modules/ROOT/pages/index.adoc b/doc/modules/ROOT/pages/index.adoc index b1cb104b3..63234e4ac 100644 --- a/doc/modules/ROOT/pages/index.adoc +++ b/doc/modules/ROOT/pages/index.adoc @@ -73,7 +73,7 @@ CIDER packs plenty of features. Here are some of them (in no particular order): * `clojure.test` integration * `clojure.spec` integration * Interactive debugger -* Data Inspector +* Data inspector * Integration with Java logging frameworks * Profiling & tracing * ClojureScript support From ead9a0d2efe9bd0b251d86a8e982d8b922a94ccc Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Fri, 17 Jan 2025 11:33:21 +0200 Subject: [PATCH 066/149] Replace the defunct stale bot with actions/stale --- .github/stale.yml | 62 ------------------------------------- .github/workflows/stale.yml | 42 +++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 62 deletions(-) delete mode 100644 .github/stale.yml create mode 100644 .github/workflows/stale.yml diff --git a/.github/stale.yml b/.github/stale.yml deleted file mode 100644 index 8bbe234c0..000000000 --- a/.github/stale.yml +++ /dev/null @@ -1,62 +0,0 @@ -# Configuration for probot-stale - https://github.com/probot/stale - -# Number of days of inactivity before an Issue or Pull Request becomes stale -daysUntilStale: 90 - -# Number of days of inactivity before an Issue or Pull Request with the stale label is closed. -# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale. -daysUntilClose: 30 - -# Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled) -onlyLabels: [] - -# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable -exemptLabels: - - "high priority" - - "good first issue" - - "pinned" - -# Set to true to ignore issues in a project (defaults to false) -exemptProjects: false - -# Set to true to ignore issues in a milestone (defaults to false) -exemptMilestones: true - -# Set to true to ignore issues with an assignee (defaults to false) -exemptAssignees: true - -# Label to use when marking as stale -staleLabel: stale - -# Comment to post when marking as stale. Set to `false` to disable -markComment: > - This issue has been automatically marked as stale because it has not had - recent activity. It will be closed if no further activity occurs. Thank you - for your contribution and understanding! - -# Comment to post when removing the stale label. -# unmarkComment: > -# Your comment here. - -# Comment to post when closing a stale Issue or Pull Request. -closeComment: > - This issues been automatically closed due to lack of activity. Feel free to re-open it - if you ever come back to it. - -# Limit the number of actions per hour, from 1-30. Default is 30 -limitPerRun: 30 - -# Limit to only `issues` or `pulls` -# only: issues - -# Optionally, specify configuration settings that are specific to just 'issues' or 'pulls': -# pulls: -# daysUntilStale: 30 -# markComment: > -# This pull request has been automatically marked as stale because it has not had -# recent activity. It will be closed if no further activity occurs. Thank you -# for your contributions. - -# issues: -# exemptLabels: -# - confirmed diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml new file mode 100644 index 000000000..cf44e1a63 --- /dev/null +++ b/.github/workflows/stale.yml @@ -0,0 +1,42 @@ +name: Close inactive issues and pull requests +on: + schedule: + - cron: "30 1 * * *" + +jobs: + close-issues: + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - uses: actions/stale@v9 + with: + days-before-issue-stale: 30 + days-before-issue-close: 30 + stale-issue-label: "stale" + exempt-issue-labels: + - "high priority" + - "good first issue" + - "pinned" + stale-issue-message: >- + This issue has been automatically marked as stale because it has not + had any recent activity. It will be closed soon if no further + activity occurs. Thank you for your contribution and understanding! + close-issue-message: >- + This issue been automatically closed due to lack of activity. Feel free to re-open it + if you ever come back to it. + days-before-pr-stale: 30 + days-before-pr-close: 30 + exempt-pr-labels: + - "high priority" + - "good first issue" + - "pinned" + stale-pr-message: >- + This pull request has been automatically marked as stale because it has not + had any recent activity. It will be closed soon if no further + activity occurs. Thank you for your contribution and understanding! + close-pr-message: >- + This issue been automatically closed due to lack of activity. Feel free to re-open it + if you ever come back to it. + repo-token: ${{ secrets.GITHUB_TOKEN }} From 5f8b17c44778caaab0ce93f304a0e4bd484c9428 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Sat, 18 Jan 2025 11:06:55 +0200 Subject: [PATCH 067/149] Fix exempt labels for the action/stale Turned out those were supposed to be a string. --- .github/workflows/stale.yml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index cf44e1a63..05e690f47 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -15,10 +15,7 @@ jobs: days-before-issue-stale: 30 days-before-issue-close: 30 stale-issue-label: "stale" - exempt-issue-labels: - - "high priority" - - "good first issue" - - "pinned" + exempt-issue-labels: "high priority, good first issue, pinned" stale-issue-message: >- This issue has been automatically marked as stale because it has not had any recent activity. It will be closed soon if no further @@ -28,10 +25,7 @@ jobs: if you ever come back to it. days-before-pr-stale: 30 days-before-pr-close: 30 - exempt-pr-labels: - - "high priority" - - "good first issue" - - "pinned" + exempt-pr-labels: "high priority, good first issue, pinned" stale-pr-message: >- This pull request has been automatically marked as stale because it has not had any recent activity. It will be closed soon if no further From 7818864a9de3cbad5f977e7a058044c76401ec1f Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Mon, 20 Jan 2025 11:35:08 +0200 Subject: [PATCH 068/149] Use the new GFM admonition syntax --- README.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index cb25a2f10..93ad5d1e8 100644 --- a/README.md +++ b/README.md @@ -69,8 +69,9 @@ connect to it. Alternatively you can use C-u M-x `cider-jack-in` to specify the path to a Clojure project, without having to visit any file in it. -**Tip:** In Clojure(Script) buffers the command `cider-jack-in` is bound to -C-c C-x (C-)j. +> [!TIP] +> +> In Clojure(Script) buffers the command `cider-jack-in` is bound to C-c C-x (C-)j. ### Connect to a running nREPL server @@ -93,9 +94,11 @@ by your project's build tool (`tools.deps`, Gradle, Maven, etc). After you get your nREPL server running go back to Emacs. Typing there M-x `cider-connect` will allow you to connect to the running nREPL server. -**Tip:** In Clojure(Script) buffers the command `cider-connect` is bound to -C-c C-x (C-)c (C-)j and the command `cider-connect-cljs` is bound to -C-c C-x (C-)c (C-)s. +> [!TIP] +> +> In Clojure(Script) buffers the command `cider-connect` is bound to +> C-c C-x (C-)c (C-)j and the command `cider-connect-cljs` is bound to +> C-c C-x (C-)c (C-)s. ## Diving Deeper From c59605bc7899dfc779ad72b4e7048e50d79da454 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Wed, 22 Jan 2025 10:09:01 +0200 Subject: [PATCH 069/149] Address a few checkdoc warnings --- test/nrepl-server-mock.el | 43 +++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/test/nrepl-server-mock.el b/test/nrepl-server-mock.el index e2724b09d..6264eb8d2 100644 --- a/test/nrepl-server-mock.el +++ b/test/nrepl-server-mock.el @@ -1,4 +1,4 @@ -;; nrepl-server-mock.el -*- lexical-binding: t; -*- +;; nrepl-server-mock.el --- Mock nREPL server -*- lexical-binding: t; -*- ;; Copyright © 2021-2025 Ioannis Kappas @@ -24,7 +24,7 @@ ;; A mock nREPL server that sends dummy replies back to clients with just enough ;; information onboard to accommodate testing requirements. ;; -;; Meant to be invoked as the top-level fn of an emacs subprocess. +;; Meant to be invoked as the top-level fn of an Emacs subprocess. ;;; Code: @@ -34,8 +34,8 @@ (require 'cl) (defun nrepl-server-mock-filter (proc output) - "Handle the nREPL message found in OUTPUT sent by the client -PROC. Minimal implementation, just enough for fulfilling clients' testing + "Handle the nREPL message found in OUTPUT sent by the client PROC. +Minimal implementation, just enough for fulfilling clients' testing requirements." ;; (mock/log! ":mock.filter/output %s :msg %s" proc output) @@ -47,21 +47,21 @@ requirements." `(dict "id" ,id "session" "a-session" "status" ("done") - "new-session" "a-new-session")) + "new-session" "a-new-session")) (`(dict "op" "describe" "session" ,session "id" ,id) `(dict "id" ,id "session" ,session "status" - ("done"))) + ("done"))) ;; Eval op can include other fields in addition to the ;; code, we only need the signature and the session and ;; id fields at the end. (`(dict "op" "eval" "code" ,_code . ,rest) (cl-destructuring-bind (_ session _ id) (seq-drop rest (- (seq-length rest) 4)) `(dict "id" ,id "session" ,session "status" - ("done")))) + ("done")))) (`(dict "op" "close" "session" ,session "id" ,id) `(dict "id" ,id "session" ,session "status" - ("done")))))) + ("done")))))) (mock/log! ":mock.filter/msg :out %S" response) (if (not response) @@ -82,25 +82,26 @@ requirements." )) (defun nrepl-server-mock-start () - "Start a mock nREPL server process. Prints out nREPL welcome message of -the port and host it is started on. Exits after a 10 secs" + "Start a mock nREPL server process. +Prints out nREPL welcome message of the port and host it is started +on. Exits after a 10 secs" ;; change first argument to non-nil to enable logging to file (nrepl-tests-log/init! nil mock "./nrepl-server-mock.log" 'new) (mock/log! ":mock/starting...") (let* ((server-process (make-network-process - :name "server-mock/process" - :server 't - :host 'local + :name "server-mock/process" + :server 't + :host 'local ;; listen to an unoccupied port - :service 't - :buffer "server-mock/buffer" - :filter #'nrepl-server-mock-filter - :sentinel - (lambda (_proc status-change-descr) - (mock/log! ":mock/process-status %s" status-change-descr)))) - (contact (process-contact server-process 't)) + :service 't + :buffer "server-mock/buffer" + :filter #'nrepl-server-mock-filter + :sentinel + (lambda (_proc status-change-descr) + (mock/log! ":mock/process-status %s" status-change-descr)))) + (contact (process-contact server-process 't)) (mock-message (format "nREPL server started on port %d on host %s" (plist-get contact :service) (plist-get contact :host)))) @@ -115,3 +116,5 @@ the port and host it is started on. Exits after a 10 secs" (make-string (- 4096 (length mock-message)) ?*))) (sleep-for 10) (mock/log! ":mock/exiting..."))) + +;;; nrepl-server-mock.el ends here From eca47d5e1eb92d69902e63197c5a19a36915bdcf Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Thu, 23 Jan 2025 10:20:48 +0200 Subject: [PATCH 070/149] Ignore bugs in issue staleness checks --- .github/workflows/stale.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 05e690f47..a39c034a5 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -15,7 +15,7 @@ jobs: days-before-issue-stale: 30 days-before-issue-close: 30 stale-issue-label: "stale" - exempt-issue-labels: "high priority, good first issue, pinned" + exempt-issue-labels: "bug, high priority, good first issue, pinned" stale-issue-message: >- This issue has been automatically marked as stale because it has not had any recent activity. It will be closed soon if no further From 08581554662c81d388a1d32c829c7f9e3b2396c1 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Thu, 23 Jan 2025 13:23:06 +0200 Subject: [PATCH 071/149] Don't mark as stale issues and PRs with a milestone --- .github/workflows/stale.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index a39c034a5..a7774f413 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -15,6 +15,7 @@ jobs: days-before-issue-stale: 30 days-before-issue-close: 30 stale-issue-label: "stale" + exempt-all-milestones: true exempt-issue-labels: "bug, high priority, good first issue, pinned" stale-issue-message: >- This issue has been automatically marked as stale because it has not From eb78711b7fb0cb89a9eb1b854aabb174b705f7b2 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Thu, 30 Jan 2025 10:01:22 +0200 Subject: [PATCH 072/149] [Docs] Update the list of support channels --- doc/modules/ROOT/pages/about/support.adoc | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/doc/modules/ROOT/pages/about/support.adoc b/doc/modules/ROOT/pages/about/support.adoc index 655aa7a34..e4096508d 100644 --- a/doc/modules/ROOT/pages/about/support.adoc +++ b/doc/modules/ROOT/pages/about/support.adoc @@ -17,14 +17,6 @@ https://github.com/clojure-emacs/cider/discussions[here]. It's a great place to share ideas, help other CIDER users and just be up-to-date with interesting developments. -== Discord - -CIDER has its own Discord chat server, created by CIDER's -author Bozhidar. You can join the Discord server -https://discord.com/invite/nFPpynQPME[here]. - -NOTE: As of 2021, Discord is Bozhidar's preferred chat for CIDER. - == Slack We've got an official https://clojurians.slack.com/[Clojurians @@ -43,14 +35,3 @@ We're also encouraging users to ask CIDER-related questions on StackOverflow. When doing so you should use the http://stackoverflow.com/questions/tagged/cider[cider] tag (ideally combined with the tags `emacs` and `clojure`). - -== Mailing list - -The https://groups.google.com/forum/#!forum/cider-emacs[official mailing list] is -hosted at Google Groups. It's a low-traffic list, so don't be too hesitant to subscribe. - -== Freenode - -We've got an unofficial Freenode channel - `#clojure-emacs`. It's not actively -monitored by the CIDER maintainers themselves, but still you can get support -from other CIDER users there. From e905618055cc95c7fd2f01c10d8cd08ed35f08f2 Mon Sep 17 00:00:00 2001 From: Steve Purcell Date: Wed, 5 Feb 2025 00:57:46 +1300 Subject: [PATCH 073/149] Add Emacs HEAD to CI matrix --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 30efc5717..64ce306eb 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -22,7 +22,7 @@ jobs: strategy: matrix: os: [macos-13, ubuntu-latest, windows-latest] - emacs_version: ['26.3', '27.2', '28.2', '29.3'] + emacs_version: ['26.3', '27.2', '28.2', '29.3', 'snapshot'] java_version: ['11', '17'] include: # aarch64 (macos-13 is Intel) From 7e9e70ce6647894d7833aa8598f4c48440d6444b Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Fri, 14 Feb 2025 10:22:38 +0200 Subject: [PATCH 074/149] [overlays] Fix overlay slowness when huge result is displayed --- CHANGELOG.md | 1 + cider-overlays.el | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e83c9bba..54819aefe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ ### Bugs fixed - [#3763](https://github.com/clojure-emacs/cider/issues/3763): Fix `cider-docview-render` completion popup error when symbol being completed does not have a docstring. +- [#3774](https://github.com/clojure-emacs/cider/issues/3774): Fix overlay hangup when evaluating huge values. ## 1.16.1 (2024-12-03) diff --git a/cider-overlays.el b/cider-overlays.el index f1808fafc..8d0546606 100644 --- a/cider-overlays.el +++ b/cider-overlays.el @@ -232,6 +232,8 @@ overlay." ;; Specify `default' face, otherwise unformatted text will ;; inherit the face of the following text. (display-string (format (propertize format 'face 'default) value)) + ;; Maximum value width at which we truncate it. + (truncation-threshold (* 3 (window-width))) (o nil)) ;; Remove any overlay at the position we're creating a new one, if it ;; exists. @@ -245,17 +247,22 @@ overlay." ;; If the display spans multiple lines or is very long, display it at ;; the beginning of the next line. (when (or (string-match "\n." display-string) + ;; string-width can be very slow on large results, so check + ;; with a cheaper predicate first. Conservatively limit to + ;; truncation threshold. + (> (length display-string) truncation-threshold) (> (string-width display-string) (- (window-width) (current-column)))) (setq display-string (concat " \n" display-string))) - ;; Put the cursor property only once we're done manipulating the - ;; string, since we want it to be at the first char. - (put-text-property 0 1 'cursor 0 display-string) - (when (> (string-width display-string) (* 3 (window-width))) + (when (or (> (length display-string) truncation-threshold) + (> (string-width display-string) truncation-threshold)) (setq display-string - (concat (substring display-string 0 (* 3 (window-width))) + (concat (substring display-string 0 truncation-threshold) (substitute-command-keys "...\nResult truncated. Type `\\[cider-inspect-last-result]' to inspect it.")))) + ;; Put the cursor property only once we're done manipulating the + ;; string, since we want it to be at the first char. + (put-text-property 0 1 'cursor 0 display-string) ;; Create the result overlay. (setq o (apply #'cider--make-overlay beg end type @@ -285,7 +292,7 @@ overlay." (when (and (<= (window-start win) (point) (window-end win)) ;; Right edge is visible. This is a little conservative ;; if the overlay contains line breaks. - (or (< (+ (current-column) (string-width value)) + (or (< (+ (current-column) (string-width display-string)) (window-width win)) (not truncate-lines))) o))))))) From 45699c0ee92c3ef9e71584477f374540dbc3f251 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Sun, 16 Feb 2025 20:47:01 +0200 Subject: [PATCH 075/149] [Docs] Update the instructions for building and deploying the docs --- doc/modules/ROOT/pages/contributing/docs.adoc | 44 +++++++++++++------ 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/doc/modules/ROOT/pages/contributing/docs.adoc b/doc/modules/ROOT/pages/contributing/docs.adoc index eabe5c14f..123af5e12 100644 --- a/doc/modules/ROOT/pages/contributing/docs.adoc +++ b/doc/modules/ROOT/pages/contributing/docs.adoc @@ -8,7 +8,7 @@ of the primary ways to discover those. Please, consider improving and extending The manual is generated from the AsciiDoc files in the https://github.com/clojure-emacs/cider/tree/master/doc[doc] folder of CIDER's GitHub repo and is published to https://docs.cider.mx. https://antora.org[Antora] is used to convert the AsciiDoc source into HTML. -Antora's filesystem layout is described https://docs.antora.org/antora/2.0/component-structure/[here]. +Antora's filesystem layout is described https://docs.antora.org/antora/3.1/component-structure/[here]. == Installing Antora @@ -18,10 +18,10 @@ Installing the Antora is super simple: [source] ---- -$ npm i -g @antora/cli@2.0 @antora/site-generator-default@2.0 +$ npm install ---- -Check out https://docs.antora.org/antora/2.0/install/install-antora/[the detailed installation instructions] +Check out https://docs.antora.org/antora/3.1/install/install-antora/[the detailed installation instructions] if you run into any problems. == Editing the Docs @@ -37,27 +37,43 @@ You can build the documentation locally from the https://github.com/clojure-emac [source,shell] ---- +$ git clone https://github.com/clojure-emacs/docs.cider.mx $ cd docs.cider.mx -$ antora antora-playbook.yml +$ make build ---- +To check the generated site you can simply open `build/site/index.html` in your favourite browser. + == Deploying the Docs Site NOTE: The manual will be regenerated manually periodically by CIDER's Core Team. We're currently publishing the user manual to GitHub Pages. -The deployment process is simply pushing the generated HTML to GitHub. Simple as that. -There's a simple script in the documentation repository that automates the process of -fetching the latest updates and publishing them: +The deployment is handled by a GitHub Actions workflow that builds and deploys the +documentation every time something is changed in the documentation site's repository. +It can also be triggered manually if needed. -[source,shell] ----- -$ cd docs.cider.mx -$ ./deploy ----- +== Updating the Playbook IMPORTANT: Don't forget to update the manual's version metadata when cutting CIDER releases. It lives in `doc/antora.yml`. -Down the road we plan to automate the process and deploy automatically changes to the manual. -Ideally this should be done by our CI. +When cutting new releases you'll have to updated `antora-playbook.yml` to mention +their relevant tags from which the documentation needs to be build. Here's how this +looks for one of the projects: + +[source] +---- +- url: https://github.com/clojure-emacs/cider.git + branches: master + tags: ['v1.7.0', 'v1.8.0'] + start_path: docs +---- + +TIP: You need to add one such block for each new CIDER module you're adding to the docs site. + +== Troubleshooting + +The most common mistake that people make is to forget to update the version of an Antora docs module +after cutting a release. This will result in an error saying you've got the same version in two branches (e.g. `master` +and `v1.0`). Fixing this is pretty simple - just update the version to `master` in `antora.yml`. From 371729b371f88fe9eb24419b0a9fecab312fa348 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Mon, 17 Feb 2025 16:33:11 +0200 Subject: [PATCH 076/149] Release CIDER 1.17 ("Cologne") --- CHANGELOG.md | 2 ++ cider.el | 6 +++--- doc/antora.yml | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 54819aefe..fbbd59bcc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## master (unreleased) +## 1.17.0 (2025-02-17) + ### New features - Automatic downloading of third-party Java sources for better Java documentation and jump-to-definition functionality. See [Obtaining source JARs](https://docs.cider.mx/cider/usage/working_with_documentation.html#obtaining-source-jars). diff --git a/cider.el b/cider.el index 80cdb402b..532a3d615 100644 --- a/cider.el +++ b/cider.el @@ -11,7 +11,7 @@ ;; Steve Purcell ;; Maintainer: Bozhidar Batsov ;; URL: https://www.github.com/clojure-emacs/cider -;; Version: 1.17.0-snapshot +;; Version: 1.17.0 ;; Package-Requires: ((emacs "26") (clojure-mode "5.19") (parseedn "1.2.1") (queue "0.2") (spinner "1.7") (seq "2.22") (sesman "0.3.2") (transient "0.4.1")) ;; Keywords: languages, clojure, cider @@ -93,10 +93,10 @@ (require 'sesman) (require 'package) -(defconst cider-version "1.17.0-snapshot" +(defconst cider-version "1.17.0" "The current version of CIDER.") -(defconst cider-codename "Kherson" +(defconst cider-codename "Cologne" "Codename used to denote stable releases.") (defcustom cider-lein-command diff --git a/doc/antora.yml b/doc/antora.yml index fd9dacd59..256d7ea17 100644 --- a/doc/antora.yml +++ b/doc/antora.yml @@ -2,6 +2,6 @@ name: cider title: CIDER # We always provide version without patch here (e.g. 1.1), # as patch versions should not appear in the docs. -version: ~ +version: "1.17" nav: - modules/ROOT/nav.adoc From 41c77310a2404a778643532a0c434096e7294caa Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Mon, 17 Feb 2025 16:38:37 +0200 Subject: [PATCH 077/149] Reset the docs version --- doc/antora.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/antora.yml b/doc/antora.yml index 256d7ea17..fd9dacd59 100644 --- a/doc/antora.yml +++ b/doc/antora.yml @@ -2,6 +2,6 @@ name: cider title: CIDER # We always provide version without patch here (e.g. 1.1), # as patch versions should not appear in the docs. -version: "1.17" +version: ~ nav: - modules/ROOT/nav.adoc From a0d616902667b287ad20b18889d7f073c6a50b41 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Fri, 21 Feb 2025 15:06:08 +0200 Subject: [PATCH 078/149] [Docs] Fix the size of the demo video --- doc/modules/ROOT/pages/index.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/modules/ROOT/pages/index.adoc b/doc/modules/ROOT/pages/index.adoc index 63234e4ac..53d505501 100644 --- a/doc/modules/ROOT/pages/index.adoc +++ b/doc/modules/ROOT/pages/index.adoc @@ -92,7 +92,7 @@ and then jumped to a REPL buffer to try out something there. Here's also a video demo of CIDER's essential functionality: -video::aYA4AAjLfT0[youtube] +video::aYA4AAjLfT0[youtube,width=100%] You can find several other demo videos on the xref:additional_resources.adoc[Additional Resources] page. From 5b873a94a8f4804034713ddb774ad7f6f493708f Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Sun, 23 Feb 2025 09:43:42 +0200 Subject: [PATCH 079/149] [Docs] Set size for the video tutorial explicitly --- doc/modules/ROOT/pages/index.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/modules/ROOT/pages/index.adoc b/doc/modules/ROOT/pages/index.adoc index 53d505501..6661d1e0c 100644 --- a/doc/modules/ROOT/pages/index.adoc +++ b/doc/modules/ROOT/pages/index.adoc @@ -92,7 +92,7 @@ and then jumped to a REPL buffer to try out something there. Here's also a video demo of CIDER's essential functionality: -video::aYA4AAjLfT0[youtube,width=100%] +video::aYA4AAjLfT0[youtube,width=640,height=480] You can find several other demo videos on the xref:additional_resources.adoc[Additional Resources] page. From 981cb5e31020b74c0dc7e99424e56303aeb57532 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Tue, 25 Feb 2025 11:03:44 +0200 Subject: [PATCH 080/149] Bump cider-nrepl to 0.52.1 --- CHANGELOG.md | 2 + cider.el | 2 +- dev/docker-sample-project/project.clj | 2 +- dev/tramp-sample-project/project.clj | 2 +- .../ROOT/pages/basics/middleware_setup.adoc | 10 ++--- .../ROOT/pages/basics/up_and_running.adoc | 4 +- doc/modules/ROOT/pages/cljs/shadow-cljs.adoc | 2 +- .../ROOT/pages/cljs/up_and_running.adoc | 2 +- test/cider-tests.el | 44 +++++++++---------- 9 files changed, 36 insertions(+), 34 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fbbd59bcc..8bc3cf794 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## master (unreleased) +- Bump the injected `cider-nrepl` to [0.52.1](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0521-2025-02-24). + ## 1.17.0 (2025-02-17) ### New features diff --git a/cider.el b/cider.el index 532a3d615..de48e4c89 100644 --- a/cider.el +++ b/cider.el @@ -573,7 +573,7 @@ the artifact.") Used when `cider-jack-in-auto-inject-clojure' is set to `latest'.") -(defconst cider-required-middleware-version "0.52.0" +(defconst cider-required-middleware-version "0.52.1" "The CIDER nREPL version that's known to work properly with CIDER.") (defcustom cider-injected-middleware-version cider-required-middleware-version diff --git a/dev/docker-sample-project/project.clj b/dev/docker-sample-project/project.clj index caa543382..d1ee9d726 100644 --- a/dev/docker-sample-project/project.clj +++ b/dev/docker-sample-project/project.clj @@ -2,4 +2,4 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.52.0"]]) + :plugins [[cider/cider-nrepl "0.52.1"]]) diff --git a/dev/tramp-sample-project/project.clj b/dev/tramp-sample-project/project.clj index 5521907a8..7cc8a5358 100644 --- a/dev/tramp-sample-project/project.clj +++ b/dev/tramp-sample-project/project.clj @@ -2,5 +2,5 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.52.0"] + :plugins [[cider/cider-nrepl "0.52.1"] [refactor-nrepl "3.9.0"]]) diff --git a/doc/modules/ROOT/pages/basics/middleware_setup.adoc b/doc/modules/ROOT/pages/basics/middleware_setup.adoc index 255eac6a5..b75f884ed 100644 --- a/doc/modules/ROOT/pages/basics/middleware_setup.adoc +++ b/doc/modules/ROOT/pages/basics/middleware_setup.adoc @@ -20,14 +20,14 @@ Use the convenient plugin for defaults, either in your project's [source,clojure] ---- -:plugins [[cider/cider-nrepl "0.52.0"]] +:plugins [[cider/cider-nrepl "0.52.1"]] ---- A minimal `profiles.clj` for CIDER would be: [source,clojure] ---- -{:repl {:plugins [[cider/cider-nrepl "0.52.0"]]}} +{:repl {:plugins [[cider/cider-nrepl "0.52.1"]]}} ---- WARNING: Be careful not to place this in the `:user` profile, as this way CIDER's @@ -43,11 +43,11 @@ run `cider-connect` or `cider-connect-cljs`. [source,clojure] ---- - :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.52.0"}} + :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.52.1"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware]"]} :cider-cljs {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.339"} - cider/cider-nrepl {:mvn/version "0.52.0"} + cider/cider-nrepl {:mvn/version "0.52.1"} cider/piggieback {:mvn/version "0.6.0"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware,cider.piggieback/wrap-cljs-repl]"]} @@ -66,7 +66,7 @@ NOTE: Make sure you're using https://github.com/clojurephant/clojurephant[Clojur ---- dependencies { devImplementation 'nrepl:nrepl:0.9.0' - devImplementation 'cider:cider-nrepl:0.52.0' + devImplementation 'cider:cider-nrepl:0.52.1' } tasks.named('clojureRepl') { diff --git a/doc/modules/ROOT/pages/basics/up_and_running.adoc b/doc/modules/ROOT/pages/basics/up_and_running.adoc index 49d88233a..7b5a65dd8 100644 --- a/doc/modules/ROOT/pages/basics/up_and_running.adoc +++ b/doc/modules/ROOT/pages/basics/up_and_running.adoc @@ -72,7 +72,7 @@ simple - CIDER passes the extra dependencies and nREPL configuration to your build tool in the command it runs to start the nREPL server. Here's how this looks for `tools.deps`: - $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.1"} cider/cider-nrepl {:mvn/version "0.52.0"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' + $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.1"} cider/cider-nrepl {:mvn/version "0.52.1"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' TIP: If you don't want `cider-jack-in` to inject dependencies automatically, set `cider-inject-dependencies-at-jack-in` to `nil`. Note that you'll have to setup @@ -332,7 +332,7 @@ It is also possible for plain `clj`, although the command is somewhat longer: [source,sh] ---- -$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.52.0"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" +$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.52.1"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" ---- Alternatively, you can start nREPL either manually or using the facilities diff --git a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc index 28a20e06a..7e5f7c850 100644 --- a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc +++ b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc @@ -62,7 +62,7 @@ And connect to it with `cider-connect`. ...For that to work, `shadow-cljs.edn` contents like the following are assumed: ```clj - :dependencies [[cider/cider-nrepl "0.52.0"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) + :dependencies [[cider/cider-nrepl "0.52.1"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) [refactor-nrepl/refactor-nrepl "3.9.0"]] ;; refactor-nrepl is optional :nrepl {:middleware [cider.nrepl/cider-middleware ;; it's advisable to explicitly add this middleware. It's automatically added by shadow-cljs (if available in the classpath), unless `:nrepl {:cider false}` diff --git a/doc/modules/ROOT/pages/cljs/up_and_running.adoc b/doc/modules/ROOT/pages/cljs/up_and_running.adoc index 6625e8144..52d16b245 100644 --- a/doc/modules/ROOT/pages/cljs/up_and_running.adoc +++ b/doc/modules/ROOT/pages/cljs/up_and_running.adoc @@ -61,7 +61,7 @@ or in `build.gradle`: ---- dependencies { devImplementation 'nrepl:nrepl:1.3.1' - devImplementation 'cider:cider-nrepl:0.52.0' + devImplementation 'cider:cider-nrepl:0.52.1' devImplementation 'cider:cider-piggieback:0.5.3' } diff --git a/test/cider-tests.el b/test/cider-tests.el index b7298e36b..e3eb0403d 100644 --- a/test/cider-tests.el +++ b/test/cider-tests.el @@ -144,7 +144,7 @@ (describe "when there is a single dependency" (before-each (setq-local cider-injected-nrepl-version "0.9.0") - (setq-local cider-injected-middleware-version "0.52.0") + (setq-local cider-injected-middleware-version "0.52.1") (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t) @@ -155,7 +155,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.52.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.52.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -169,7 +169,7 @@ "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.52.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.52.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -182,7 +182,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure foo.bar/baz]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.52.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.52.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -196,7 +196,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.52.0") + (shell-quote-argument "cider/cider-nrepl:0.52.1") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -206,7 +206,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.52.0") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.52.1") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -223,7 +223,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.52.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.52.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -237,7 +237,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.52.0") + (shell-quote-argument "cider/cider-nrepl:0.52.1") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -259,7 +259,7 @@ :to-equal (concat "-o -U update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.52.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.52.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -271,7 +271,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.52.0") + (shell-quote-argument "cider/cider-nrepl:0.52.1") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -280,7 +280,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.52.0") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.52.1") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -295,14 +295,14 @@ (setq-local cider-jack-in-nrepl-middlewares '(("refactor-nrepl.middleware/wrap-refactor" :predicate middlewares-predicate) "cider.nrepl/cider-middleware" ("another/middleware")))) (it "includes plugins whose predicates return true" (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.52.0")))) + :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.52.1")))) (it "includes middlewares whose predicates return true" (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware" "another/middleware"))) (it "ignores plugins whose predicates return false" (spy-on 'plugins-predicate :and-return-value nil) (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("cider/cider-nrepl" "0.52.0"))) + :to-equal '(("cider/cider-nrepl" "0.52.1"))) (spy-on 'middlewares-predicate :and-return-value nil) (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("cider.nrepl/cider-middleware" "another/middleware"))) @@ -331,7 +331,7 @@ :and-return-value '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware")) (spy-on 'cider-jack-in-normalized-lein-plugins :and-return-value '(("refactor-nrepl" "2.0.0") - ("cider/cider-nrepl" "0.52.0") + ("cider/cider-nrepl" "0.52.1") ("mx.cider/lein-enrich-classpath" "1.19.3"))) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t)) @@ -342,7 +342,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.52.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.52.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -361,7 +361,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.52.0") + (shell-quote-argument "cider/cider-nrepl:0.52.1") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -456,7 +456,7 @@ (setq-local cider-jack-in-dependencies nil) (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.52.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.52.1\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) @@ -471,7 +471,7 @@ (it "allows specifying custom aliases with `cider-clojure-cli-aliases`" (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.52.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.52.1\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:dev:test:cider/nrepl") ""))) (setq-local cider-jack-in-dependencies nil) @@ -489,7 +489,7 @@ (it (format "should remove duplicates, yielding the same result (for %S command invocation)" command) ;; repeat the same test for PowerShell too (let ((expected (string-join `("-Sdeps " - ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.52.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" + ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.52.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" command) " -M:dev:test:cider/nrepl") ""))) @@ -499,7 +499,7 @@ :to-equal expected)))) (it "handles aliases correctly" (let ((expected (string-join `("-Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.52.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.52.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -527,7 +527,7 @@ :to-equal expected))))) (it "allows for global options" (let ((expected (string-join `("-J-Xverify:none -Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.52.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.52.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -538,7 +538,7 @@ (setq-local cider-jack-in-dependencies '(("org.clojure/tools.deps" (("git/sha" . "6ae2b6f71773de7549d7f22759e8b09fec27f0d9") ("git/url" . "https://github.com/clojure/tools.deps/"))))) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.52.0\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.52.1\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) From d2f34b60e5c5e569d4b7f4f79b36893f5c4dfa20 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Tue, 25 Feb 2025 11:05:14 +0200 Subject: [PATCH 081/149] Release 1.17.1 --- CHANGELOG.md | 2 ++ cider-client.el | 2 +- cider.el | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8bc3cf794..d4a379861 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## master (unreleased) +## 1.17.1 (2025-02-25) + - Bump the injected `cider-nrepl` to [0.52.1](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0521-2025-02-24). ## 1.17.0 (2025-02-17) diff --git a/cider-client.el b/cider-client.el index b72ccf371..df59bc3f0 100644 --- a/cider-client.el +++ b/cider-client.el @@ -355,7 +355,7 @@ happens once per artifact, and only when the user jumps to definition or requests `cider-doc' on a Java class or a member of the class." :type 'boolean :group 'cider - :package-version '(cider . "1.17.0")) + :package-version '(cider . "1.17.1")) (defun cider--print-fn () "Return the value to send in the nrepl.middleware.print/print slot." diff --git a/cider.el b/cider.el index de48e4c89..ff9d1fcc1 100644 --- a/cider.el +++ b/cider.el @@ -11,7 +11,7 @@ ;; Steve Purcell ;; Maintainer: Bozhidar Batsov ;; URL: https://www.github.com/clojure-emacs/cider -;; Version: 1.17.0 +;; Version: 1.17.1 ;; Package-Requires: ((emacs "26") (clojure-mode "5.19") (parseedn "1.2.1") (queue "0.2") (spinner "1.7") (seq "2.22") (sesman "0.3.2") (transient "0.4.1")) ;; Keywords: languages, clojure, cider @@ -93,7 +93,7 @@ (require 'sesman) (require 'package) -(defconst cider-version "1.17.0" +(defconst cider-version "1.17.1" "The current version of CIDER.") (defconst cider-codename "Cologne" From 85cb9f5c80caceb03b197e73e5c7f4330088c7f6 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Wed, 26 Feb 2025 16:28:37 +0200 Subject: [PATCH 082/149] [inspector] Clean up references to javadoc fragments --- cider-inspector.el | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/cider-inspector.el b/cider-inspector.el index dd24103ad..afeae400b 100644 --- a/cider-inspector.el +++ b/cider-inspector.el @@ -612,10 +612,6 @@ instead of just its \"value\" entry." (let* ((value (if v2 (nrepl-dict-get dict-or-value "value") dict-or-value)) - (fragments (when v2 - (nrepl-dict-get dict-or-value "doc-fragments"))) - (block-tags (when v2 - (nrepl-dict-get dict-or-value "doc-block-tags-fragments"))) (ns (cider-current-ns)) (font-size (when-let* ((b (get-buffer cider-inspector-buffer)) (variable 'text-scale-mode-amount) @@ -633,9 +629,7 @@ instead of just its \"value\" entry." (cider-inspector-render cider-inspector-buffer value :font-size font-size :truncate-lines-defined truncate-lines-defined - :truncate-lines-p truncate-lines-p - :fragments fragments - :block-tags block-tags) + :truncate-lines-p truncate-lines-p) (cider-popup-buffer-display cider-inspector-buffer cider-inspector-auto-select-buffer) (when cider-inspector-fill-frame (delete-other-windows)) (ignore-errors (cider-inspector-next-inspectable-object 1)) @@ -655,7 +649,7 @@ instead of just its \"value\" entry." (when cider-inspector-page-location-stack (goto-char (pop cider-inspector-page-location-stack))))))) -(cl-defun cider-inspector-render (buffer str &key font-size truncate-lines-defined truncate-lines-p fragments block-tags) +(cl-defun cider-inspector-render (buffer str &key font-size truncate-lines-defined truncate-lines-p) "Render STR in BUFFER." (with-current-buffer buffer (cider-inspector-mode) @@ -665,23 +659,17 @@ instead of just its \"value\" entry." (setq-local truncate-lines truncate-lines-p)) (let ((inhibit-read-only t)) (condition-case nil - (cider-inspector-render* (car (read-from-string str)) - fragments - block-tags) + (cider-inspector-render* (car (read-from-string str))) (error (insert "\nInspector error for: " str)))) (goto-char (point-min)))) (defvar cider-inspector-looking-at-java-p nil) -(defun cider-inspector-render* (elements &optional fragments block-tags) - "Render ELEMENTS, and FRAGMENTS, BLOCK-TAGS if present." +(defun cider-inspector-render* (elements) + "Render ELEMENTS." (setq cider-inspector-looking-at-java-p nil) (dolist (el elements) - (cider-inspector-render-el* el)) - (when fragments - (insert "\n\n") - (insert (cider--render-docstring (list "doc-fragments" fragments - "doc-block-tags-fragments" block-tags))))) + (cider-inspector-render-el* el))) (defconst cider--inspector-java-headers ;; NOTE "--- Static fields:" "--- Instance fields:" are for objects, From 531c91e81d12484fc0120b77c9fb0a451cd8c2de Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Wed, 26 Feb 2025 16:43:07 +0200 Subject: [PATCH 083/149] [inspector] Clean up public functions; use v2 response by default --- CHANGELOG.md | 10 + cider-inspector.el | 291 +++++++----------- .../ROOT/pages/debugging/inspector.adoc | 5 - 3 files changed, 116 insertions(+), 190 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d4a379861..21c9a7a30 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,10 +2,20 @@ ## master (unreleased) +### Changes + +- [#3777](https://github.com/clojure-emacs/cider/issues/3777): Inspector no longer displays parsed Javadoc for Java classes and members. + ## 1.17.1 (2025-02-25) +### Changes + - Bump the injected `cider-nrepl` to [0.52.1](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0521-2025-02-24). +### Bugs fixed + +- [#3775](https://github.com/clojure-emacs/cider/issues/3775): Code completion throws MalformedURLException on Windows. + ## 1.17.0 (2025-02-17) ### New features diff --git a/cider-inspector.el b/cider-inspector.el index afeae400b..97481cc46 100644 --- a/cider-inspector.el +++ b/cider-inspector.el @@ -230,9 +230,9 @@ current buffer's namespace." (interactive (list (cider-read-from-minibuffer "Inspect expression: " (cider-sexp-at-point)) (cider-current-ns))) (setq cider-inspector--current-repl (cider-current-repl)) - (let ((result (cider-sync-request:inspect-expr expr ns 'v2))) + (let ((result (cider-sync-request:inspect-expr expr ns))) (when (nrepl-dict-get result "value") - (cider-inspector--render-value result 'v2)))) + (cider-inspector--render-value result)))) (defun cider-inspect-expr-from-inspector () "Performs `cider-inspect-expr' in a way that is suitable from the Inspector itself. @@ -249,18 +249,18 @@ In particular, it does not read `cider-sexp-at-point'." See `cider-sync-request:inspect-pop' and `cider-inspector--render-value'." (interactive) (setq cider-inspector-last-command 'cider-inspector-pop) - (let ((result (cider-sync-request:inspect-pop 'v2))) + (let ((result (cider-sync-request:inspect-pop))) (when (nrepl-dict-get result "value") - (cider-inspector--render-value result 'v2)))) + (cider-inspector--render-value result)))) (defun cider-inspector-push (idx) "Inspect the value at IDX in the inspector stack and render it. See `cider-sync-request:inspect-push' and `cider-inspector--render-value'" (interactive) - (let ((result (cider-sync-request:inspect-push idx 'v2))) + (let ((result (cider-sync-request:inspect-push idx))) (when (nrepl-dict-get result "value") (push (point) cider-inspector-location-stack) - (cider-inspector--render-value result 'v2) + (cider-inspector--render-value result) (cider-inspector-next-inspectable-object 1)))) (defun cider-inspector-inspect-last-exception (index) @@ -268,30 +268,30 @@ See `cider-sync-request:inspect-push' and `cider-inspector--render-value'" (interactive) (cl-assert (numberp index)) (setq cider-inspector--current-repl (cider-current-repl)) - (let ((result (cider-sync-request:inspect-last-exception index 'v2))) + (let ((result (cider-sync-request:inspect-last-exception index))) (when (nrepl-dict-get result "value") (push (point) cider-inspector-location-stack) - (cider-inspector--render-value result 'v2) + (cider-inspector--render-value result) (cider-inspector-next-inspectable-object 1)))) (defun cider-inspector-previous-sibling () "Inspect the previous sibling value within a sequential parent. See `cider-sync-request:inspect-previous-sibling' and `cider-inspector--render-value'" (interactive) - (let ((result (cider-sync-request:inspect-previous-sibling 'v2))) + (let ((result (cider-sync-request:inspect-previous-sibling))) (when (nrepl-dict-get result "value") (push (point) cider-inspector-location-stack) - (cider-inspector--render-value result 'v2) + (cider-inspector--render-value result) (cider-inspector-next-inspectable-object 1)))) (defun cider-inspector-next-sibling () "Inspect the next sibling value within a sequential parent. See `cider-sync-request:inspect-next-sibling' and `cider-inspector--render-value'" (interactive) - (let ((result (cider-sync-request:inspect-next-sibling 'v2))) + (let ((result (cider-sync-request:inspect-next-sibling))) (when (nrepl-dict-get result "value") (push (point) cider-inspector-location-stack) - (cider-inspector--render-value result 'v2) + (cider-inspector--render-value result) (cider-inspector-next-inspectable-object 1)))) (defun cider-inspector--refresh-with-opts (&rest opts) @@ -300,11 +300,10 @@ Re-renders the currently inspected value." (let ((result (cider-nrepl-send-sync-request `("op" "inspect-refresh" ,@opts) cider-inspector--current-repl))) (when (nrepl-dict-get result "value") - (cider-inspector--render-value result 'v2)))) + (cider-inspector--render-value result)))) (defun cider-inspector-refresh () - "Re-render the currently inspected value. -See `cider-sync-request:inspect-refresh' and `cider-inspector--render-value'" + "Re-render the currently inspected value." (interactive) (cider-inspector--refresh-with-opts)) @@ -314,9 +313,9 @@ See `cider-sync-request:inspect-refresh' and `cider-inspector--render-value'" Does nothing if already on the last page." (interactive) (push (point) cider-inspector-page-location-stack) - (let ((result (cider-sync-request:inspect-next-page 'v2))) + (let ((result (cider-sync-request:inspect-next-page))) (when (nrepl-dict-get result "value") - (cider-inspector--render-value result 'v2)))) + (cider-inspector--render-value result)))) (defun cider-inspector-prev-page () "Jump to the previous page when expecting a paginated sequence/map. @@ -324,9 +323,9 @@ Does nothing if already on the last page." Does nothing if already on the first page." (interactive) (setq cider-inspector-last-command 'cider-inspector-prev-page) - (let ((result (cider-sync-request:inspect-prev-page 'v2))) + (let ((result (cider-sync-request:inspect-prev-page))) (when (nrepl-dict-get result "value") - (cider-inspector--render-value result 'v2)))) + (cider-inspector--render-value result)))) (defun cider-inspector-set-page-size (page-size) "Set the page size in pagination mode to the specified PAGE-SIZE. @@ -358,7 +357,7 @@ MAX-NESTED-DEPTH is the new value." (let ((result (cider-nrepl-send-sync-request `("op" "inspect-toggle-view-mode") cider-inspector--current-repl))) (when (nrepl-dict-get result "value") - (cider-inspector--render-value result 'v2)))) + (cider-inspector--render-value result)))) (defcustom cider-inspector-preferred-var-names nil "The preferred var names to be suggested by `cider-inspector-def-current-val'. @@ -388,8 +387,8 @@ current-namespace." (interactive (let ((ns (cider-current-ns))) (list (cider-inspector--read-var-name-from-user ns) ns))) - (when-let* ((result (cider-sync-request:inspect-def-current-val ns var-name 'v2))) - (cider-inspector--render-value result 'v2) + (when-let* ((result (cider-sync-request:inspect-def-current-val ns var-name))) + (cider-inspector--render-value result) (message "Defined current inspector value as #'%s/%s" ns var-name))) (defun cider-inspector-tap-current-val () @@ -424,153 +423,84 @@ current-namespace." (user-error "No CIDER session found"))) ;; nREPL interactions -(defun cider-sync-request:inspect-pop (&optional v2) - "Move one level up in the inspector stack, -V2 indicates if the entire response should be returned -instead of just its \"value\" entry." - (let ((result (thread-first '("op" "inspect-pop") - (cider-nrepl-send-sync-request cider-inspector--current-repl)))) - (if v2 - result - (nrepl-dict-get result "value")))) - -(defun cider-sync-request:inspect-push (idx &optional v2) - "Inspect the inside value specified by IDX, -V2 indicates if the entire response should be returned -instead of just its \"value\" entry." - (let ((result (thread-first `("op" "inspect-push" - "idx" ,idx) - (cider-nrepl-send-sync-request cider-inspector--current-repl)))) - (if v2 - result - (nrepl-dict-get result "value")))) - -(defun cider-sync-request:inspect-previous-sibling (&optional v2) - "Inspect the previous sibling value within a sequential parent, -V2 indicates if the entire response should be returned -instead of just its \"value\" entry." - (let ((result (thread-first `("op" "inspect-previous-sibling") - (cider-nrepl-send-sync-request cider-inspector--current-repl)))) - (if v2 - result - (nrepl-dict-get result "value")))) +(defun cider-sync-request:inspect-pop () + "Move one level up in the inspector stack." + (cider-nrepl-send-sync-request `("op" "inspect-pop") + cider-inspector--current-repl)) + +(defun cider-sync-request:inspect-push (idx) + "Inspect the inside value specified by IDX." + (cider-nrepl-send-sync-request `("op" "inspect-push" + "idx" ,idx) + cider-inspector--current-repl)) + +(defun cider-sync-request:inspect-previous-sibling () + "Inspect the previous sibling value within a sequential parent." + (cider-nrepl-send-sync-request `("op" "inspect-previous-sibling") + cider-inspector--current-repl)) ;;;###autoload -(defun cider-sync-request:inspect-last-exception (index &optional v2) - "Inspects the exception in the cause stack identified by INDEX, -V2 indicates if the entire response should be returned -instead of just its \"value\" entry." +(defun cider-sync-request:inspect-last-exception (index) + "Inspects the exception in the cause stack identified by INDEX." (cl-assert (numberp index)) - (let ((result (thread-first `("op" "inspect-last-exception" - "index" ,index) - (cider-nrepl-send-sync-request cider-inspector--current-repl)))) - (if v2 - result - (nrepl-dict-get result "value")))) - -(defun cider-sync-request:inspect-next-sibling (&optional v2) - "Inspect the next sibling value within a sequential parent, -V2 indicates if the entire response should be returned -instead of just its \"value\" entry." - (let ((result (thread-first `("op" "inspect-next-sibling") - (cider-nrepl-send-sync-request cider-inspector--current-repl)))) - (if v2 - result - (nrepl-dict-get result "value")))) - -(defun cider-sync-request:inspect-refresh (&optional v2) - "Re-render the currently inspected value, -V2 indicates if the entire response should be returned -instead of just its \"value\" entry." - (let ((result (thread-first '("op" "inspect-refresh") - (cider-nrepl-send-sync-request cider-inspector--current-repl)))) - (if v2 - result - (nrepl-dict-get result "value")))) - -(defun cider-sync-request:inspect-next-page (&optional v2) - "Jump to the next page in paginated collection view, -V2 indicates if the entire response should be returned -instead of just its \"value\" entry." - (let ((result (thread-first '("op" "inspect-next-page") - (cider-nrepl-send-sync-request cider-inspector--current-repl)))) - (if v2 - result - (nrepl-dict-get result "value")))) - -(defun cider-sync-request:inspect-prev-page (&optional v2) - "Jump to the previous page in paginated collection view, -V2 indicates if the entire response should be returned -instead of just its \"value\" entry." - (let ((result (thread-first '("op" "inspect-prev-page") - (cider-nrepl-send-sync-request cider-inspector--current-repl)))) - (if v2 - result - (nrepl-dict-get result "value")))) - -(defun cider-sync-request:inspect-set-page-size (page-size &optional v2) - "Set the page size in paginated view to PAGE-SIZE, -V2 indicates if the entire response should be returned -instead of just its \"value\" entry." + (cider-nrepl-send-sync-request `("op" "inspect-last-exception" + "index" ,index) + cider-inspector--current-repl)) + +(defun cider-sync-request:inspect-next-sibling () + "Inspect the next sibling value within a sequential parent." + (cider-nrepl-send-sync-request `("op" "inspect-next-sibling") + cider-inspector--current-repl)) + +(defun cider-sync-request:inspect-next-page () + "Jump to the next page in paginated collection view." + (cider-nrepl-send-sync-request '("op" "inspect-next-page") + cider-inspector--current-repl)) + +(defun cider-sync-request:inspect-prev-page () + "Jump to the previous page in paginated collection view." + (cider-nrepl-send-sync-request '("op" "inspect-prev-page") + cider-inspector--current-repl)) + +(defun cider-sync-request:inspect-set-page-size (page-size) + "Set the page size in paginated view to PAGE-SIZE." (declare (obsolete "use `inspect-refresh' op instead." "1.15.0")) - (let ((result (thread-first `("op" "inspect-set-page-size" - "page-size" ,page-size) - (cider-nrepl-send-sync-request cider-inspector--current-repl)))) - (if v2 - result - (nrepl-dict-get result "value")))) - -(defun cider-sync-request:inspect-set-max-atom-length (max-length &optional v2) - "Set the max length of nested atoms to MAX-LENGTH, -V2 indicates if the entire response should be returned -instead of just its \"value\" entry." + (cider-nrepl-send-sync-request `("op" "inspect-set-page-size" + "page-size" ,page-size) + cider-inspector--current-repl)) + +(defun cider-sync-request:inspect-set-max-atom-length (max-length) + "Set the max length of nested atoms to MAX-LENGTH." (declare (obsolete "use `inspect-refresh' op instead." "1.15.0")) - (let ((result (thread-first `("op" "inspect-set-max-atom-length" - "max-atom-length" ,max-length) - (cider-nrepl-send-sync-request cider-inspector--current-repl)))) - (if v2 - result - (nrepl-dict-get result "value")))) - -(defun cider-sync-request:inspect-set-max-coll-size (max-size &optional v2) - "Set the number of nested collection members to display before truncating. -MAX-SIZE is the new value, V2 indicates if the entire response should be returned -instead of just its \"value\" entry." + (cider-nrepl-send-sync-request `("op" "inspect-set-max-atom-length" + "max-atom-length" ,max-length) + cider-inspector--current-repl)) + +(defun cider-sync-request:inspect-set-max-coll-size (max-size) + "Set the maximum number of nested collection members to display to MAX-SIZE." (declare (obsolete "use `inspect-refresh' op instead." "1.15.0")) - (let ((result (thread-first `("op" "inspect-set-max-coll-size" - "max-coll-size" ,max-size) - (cider-nrepl-send-sync-request cider-inspector--current-repl)))) - (if v2 - result - (nrepl-dict-get result "value")))) - -(defun cider-sync-request:inspect-set-max-nested-depth (max-nested-depth &optional v2) - "Set the level of nesting for collections to display before truncating. -MAX-NESTED-DEPTH is the new value, V2 indicates if the entire response should be returned -instead of just its \"value\" entry." + (cider-nrepl-send-sync-request `("op" "inspect-set-max-coll-size" + "max-coll-size" ,max-size) + cider-inspector--current-repl)) + +(defun cider-sync-request:inspect-set-max-nested-depth (max-nested-depth) + "Set the level of nesting to display before truncating to MAX-NESTED-DEPTH." (declare (obsolete "use `inspect-refresh' op instead." "1.15.0")) - (let ((result (thread-first `("op" "inspect-set-max-nested-depth" - "max-nested-depth" ,max-nested-depth) - (cider-nrepl-send-sync-request cider-inspector--current-repl)))) - (if v2 - result - (nrepl-dict-get result "value")))) - -(defun cider-sync-request:inspect-def-current-val (ns var-name &optional v2) - "Defines a var with VAR-NAME in NS with the current inspector value, -V2 indicates if the entire response should be returned -instead of just its \"value\" entry." - (let ((result (thread-first `("op" "inspect-def-current-value" - "ns" ,ns - "var-name" ,var-name) - (cider-nrepl-send-sync-request cider-inspector--current-repl)))) - (if v2 - result - (nrepl-dict-get result "value")))) + (cider-nrepl-send-sync-request `("op" "inspect-set-max-nested-depth" + "max-nested-depth" ,max-nested-depth) + cider-inspector--current-repl)) + +(defun cider-sync-request:inspect-def-current-val (ns var-name) + "Defines a var with VAR-NAME in NS with the current inspector value." + (cider-nrepl-send-sync-request `("op" "inspect-def-current-value" + "ns" ,ns + "var-name" ,var-name) + cider-inspector--current-repl)) (defun cider-sync-request:inspect-tap-current-val () "Sends current inspector value to tap>." - (cider-nrepl-send-sync-request '("op" "inspect-tap-current-value") cider-inspector--current-repl)) + (cider-nrepl-send-sync-request '("op" "inspect-tap-current-value") + cider-inspector--current-repl)) (defun cider-sync-request:inspect-tap-indexed (idx) "Sends current inspector sub-value to tap>, per IDX." @@ -579,39 +509,30 @@ instead of just its \"value\" entry." "idx" ,idx) cider-inspector--current-repl)) -(defun cider-sync-request:inspect-expr (expr ns &optional v2) +(defun cider-sync-request:inspect-expr (expr ns) "Evaluate EXPR in context of NS and inspect its result. Set the page size in paginated view to PAGE-SIZE, maximum length of atomic collection members to MAX-ATOM-LENGTH, and maximum size of nested collections to -MAX-COLL-SIZE if non nil, -V2 indicates if the entire response should be returned -instead of just its \"value\" entry." - (let ((result (thread-first - (append (nrepl--eval-request expr ns) - `("inspect" "true" - ,@(when cider-inspector-page-size - `("page-size" ,cider-inspector-page-size)) - ,@(when cider-inspector-max-atom-length - `("max-atom-length" ,cider-inspector-max-atom-length)) - ,@(when cider-inspector-max-coll-size - `("max-coll-size" ,cider-inspector-max-coll-size)) - ,@(when cider-inspector-max-nested-depth - `("max-nested-depth" ,cider-inspector-max-nested-depth)) - "spacious" ,(if cider-inspector-spacious-collections - "true" "false"))) - (cider-nrepl-send-sync-request cider-inspector--current-repl)))) - (if v2 - result - (nrepl-dict-get result "value")))) +MAX-COLL-SIZE if non nil." + (thread-first + (append (nrepl--eval-request expr ns) + `("inspect" "true" + ,@(when cider-inspector-page-size + `("page-size" ,cider-inspector-page-size)) + ,@(when cider-inspector-max-atom-length + `("max-atom-length" ,cider-inspector-max-atom-length)) + ,@(when cider-inspector-max-coll-size + `("max-coll-size" ,cider-inspector-max-coll-size)) + ,@(when cider-inspector-max-nested-depth + `("max-nested-depth" ,cider-inspector-max-nested-depth)))) + (cider-nrepl-send-sync-request cider-inspector--current-repl))) (declare-function cider-set-buffer-ns "cider-mode") ;; Render Inspector from Structured Values -(defun cider-inspector--render-value (dict-or-value &optional v2) - "Render DICT-OR-VALUE, depending on V2." - (let* ((value (if v2 - (nrepl-dict-get dict-or-value "value") - dict-or-value)) +(defun cider-inspector--render-value (response-dict) + "Render value in RESPONSE-DICT." + (let* ((value (nrepl-dict-get response-dict "value")) (ns (cider-current-ns)) (font-size (when-let* ((b (get-buffer cider-inspector-buffer)) (variable 'text-scale-mode-amount) diff --git a/doc/modules/ROOT/pages/debugging/inspector.adoc b/doc/modules/ROOT/pages/debugging/inspector.adoc index 72bc376e1..2076d598d 100644 --- a/doc/modules/ROOT/pages/debugging/inspector.adoc +++ b/doc/modules/ROOT/pages/debugging/inspector.adoc @@ -110,11 +110,6 @@ You'll have access to additional keybindings in the inspector buffer |=== -== Use `enrich-classpath` for best results - -If xref:config/basic_config.adoc#use-enrich-classpath[enrich-classpath] is activated, inspecting a Java class, method or field -will richly display its Java doc comment documentation at the bottom of the inspector. - == Configuration By default, navigation skips over values like nils, numbers and From 634d418ebc327073272f3f67925502f6bec133f6 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Fri, 28 Feb 2025 16:11:03 +0200 Subject: [PATCH 084/149] Remove the obsolete Vagrantfile --- Vagrantfile | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 Vagrantfile diff --git a/Vagrantfile b/Vagrantfile deleted file mode 100644 index 483b37dec..000000000 --- a/Vagrantfile +++ /dev/null @@ -1,8 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -Vagrant::Config.run do |config| - config.vm.box = "ubuntu/trusty64" - - config.vm.provision :shell, :path => "vagrant/provision.sh" -end From 1fdbac308e8ab8332ea2de5a261ad35f4ba3f23b Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Wed, 26 Feb 2025 21:10:25 +0200 Subject: [PATCH 085/149] [ci] Shrink testing matrix --- .circleci/config.yml | 3 ++- .github/workflows/test.yml | 26 ++++++++++++-------------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 5e843a02f..024307a54 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -157,4 +157,5 @@ workflows: - test-shellcheck - test-macos-emacs-latest: requires: - - test-ubuntu-emacs-28 + - test-lint + - test-shellcheck diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 64ce306eb..26bc73d81 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,23 +21,21 @@ jobs: strategy: matrix: - os: [macos-13, ubuntu-latest, windows-latest] + # Test all Emacs versions on Ubuntu. + os: [ubuntu-latest] emacs_version: ['26.3', '27.2', '28.2', '29.3', 'snapshot'] - java_version: ['11', '17'] + java_version: ['21'] include: - # aarch64 (macos-13 is Intel) - - os: macos-latest + # For other OSes, test only the latest stable Emacs version. + - os: macos-latest # aarch64 emacs_version: '29.3' - java_version: '11' - - os: macos-latest - emacs_version: '28.2' - java_version: '11' - - os: macos-latest + java_version: '21' + - os: macos-13 # x64 emacs_version: '29.3' - java_version: '17' - - os: macos-latest - emacs_version: '28.2' - java_version: '17' + java_version: '21' + - os: windows-latest + emacs_version: '29.3' + java_version: '21' steps: - name: Set up Emacs @@ -114,7 +112,7 @@ jobs: eldev -p -dtTC test --test-type integration || eldev -p -dtTC test --test-type integration - name: Run tests that need enrich-classpath - if: "!startsWith(matrix.os, 'windows') && (matrix.java_version != '11')" + if: "!startsWith(matrix.os, 'windows')" run: | cd dev; ../clojure.sh clojure -M:gen; cd - wc -l test/File.edn From 2dc342ca53b8b0b7dad47bc296e5ec9d08e3c546 Mon Sep 17 00:00:00 2001 From: Bozhidar Batsov Date: Tue, 4 Mar 2025 15:58:30 +0200 Subject: [PATCH 086/149] Bump the dev version --- cider.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cider.el b/cider.el index ff9d1fcc1..33f2e83a7 100644 --- a/cider.el +++ b/cider.el @@ -11,7 +11,7 @@ ;; Steve Purcell ;; Maintainer: Bozhidar Batsov ;; URL: https://www.github.com/clojure-emacs/cider -;; Version: 1.17.1 +;; Version: 1.18.0-snapshot ;; Package-Requires: ((emacs "26") (clojure-mode "5.19") (parseedn "1.2.1") (queue "0.2") (spinner "1.7") (seq "2.22") (sesman "0.3.2") (transient "0.4.1")) ;; Keywords: languages, clojure, cider @@ -93,7 +93,7 @@ (require 'sesman) (require 'package) -(defconst cider-version "1.17.1" +(defconst cider-version "1.18.0-snapshot" "The current version of CIDER.") (defconst cider-codename "Cologne" From 6594b4aa26a6e4255bd5d7028221130d35619b2c Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Wed, 5 Mar 2025 14:51:11 +0200 Subject: [PATCH 087/149] [inspector] Fix inspecting value from the debugger --- cider-inspector.el | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/cider-inspector.el b/cider-inspector.el index 97481cc46..774f79406 100644 --- a/cider-inspector.el +++ b/cider-inspector.el @@ -530,9 +530,13 @@ MAX-COLL-SIZE if non nil." (declare-function cider-set-buffer-ns "cider-mode") ;; Render Inspector from Structured Values -(defun cider-inspector--render-value (response-dict) - "Render value in RESPONSE-DICT." - (let* ((value (nrepl-dict-get response-dict "value")) +(defun cider-inspector--render-value (dict-or-value) + "Render DICT-OR-VALUE. +It can either be a value directly or a inspector response that contains +`value' field." + (let* ((value (if (nrepl-dict-p dict-or-value) + (nrepl-dict-get dict-or-value "value") + dict-or-value)) (ns (cider-current-ns)) (font-size (when-let* ((b (get-buffer cider-inspector-buffer)) (variable 'text-scale-mode-amount) From 3153495948bb4f71d866624da264cc76e874f6ff Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Tue, 4 Mar 2025 15:22:51 +0200 Subject: [PATCH 088/149] [ci] Drop Emacs 26, test Emacs 30 --- .circleci/config.yml | 25 ++++++++++--------- .github/workflows/test.yml | 8 +++--- CHANGELOG.md | 1 + cider.el | 2 +- .../ROOT/pages/about/compatibility.adoc | 13 +++++++--- .../ROOT/pages/basics/installation.adoc | 2 +- 6 files changed, 30 insertions(+), 21 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 024307a54..3c4f80f4a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -54,14 +54,6 @@ commands: command: eldev -dtT compile --warnings-as-errors jobs: - test-ubuntu-emacs-26: - docker: - - image: silex/emacs:26-ci - entrypoint: bash - steps: - - setup - - test - test-ubuntu-emacs-27: docker: - image: silex/emacs:27-ci @@ -77,6 +69,7 @@ jobs: steps: - setup - test + test-ubuntu-emacs-29: docker: - image: silex/emacs:29-ci @@ -85,6 +78,14 @@ jobs: - setup - test + test-ubuntu-emacs-30: + docker: + - image: silex/emacs:30-ci + entrypoint: bash + steps: + - setup + - test + test-ubuntu-emacs-master: docker: - image: silex/emacs:master-ci @@ -131,10 +132,6 @@ workflows: jobs: - test-shellcheck - test-lint - - test-ubuntu-emacs-26: - requires: - - test-lint - - test-shellcheck - test-ubuntu-emacs-27: requires: - test-lint @@ -147,6 +144,10 @@ workflows: requires: - test-lint - test-shellcheck + - test-ubuntu-emacs-30: + requires: + - test-lint + - test-shellcheck - test-ubuntu-emacs-master: requires: - test-lint diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 26bc73d81..d23cc4db7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -23,18 +23,18 @@ jobs: matrix: # Test all Emacs versions on Ubuntu. os: [ubuntu-latest] - emacs_version: ['26.3', '27.2', '28.2', '29.3', 'snapshot'] + emacs_version: ['27.2', '28.2', '29.3', '30.1', 'snapshot'] java_version: ['21'] include: # For other OSes, test only the latest stable Emacs version. - os: macos-latest # aarch64 - emacs_version: '29.3' + emacs_version: '30.1' java_version: '21' - os: macos-13 # x64 - emacs_version: '29.3' + emacs_version: '30.1' java_version: '21' - os: windows-latest - emacs_version: '29.3' + emacs_version: '30.1' java_version: '21' steps: diff --git a/CHANGELOG.md b/CHANGELOG.md index 21c9a7a30..681f929ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Changes +- [#3782](https://github.com/clojure-emacs/cider/issues/3782): **(Breaking)** Drop official support for Emacs 26. - [#3777](https://github.com/clojure-emacs/cider/issues/3777): Inspector no longer displays parsed Javadoc for Java classes and members. ## 1.17.1 (2025-02-25) diff --git a/cider.el b/cider.el index 33f2e83a7..152a6aafb 100644 --- a/cider.el +++ b/cider.el @@ -12,7 +12,7 @@ ;; Maintainer: Bozhidar Batsov ;; URL: https://www.github.com/clojure-emacs/cider ;; Version: 1.18.0-snapshot -;; Package-Requires: ((emacs "26") (clojure-mode "5.19") (parseedn "1.2.1") (queue "0.2") (spinner "1.7") (seq "2.22") (sesman "0.3.2") (transient "0.4.1")) +;; Package-Requires: ((emacs "27") (clojure-mode "5.19") (parseedn "1.2.1") (queue "0.2") (spinner "1.7") (seq "2.22") (sesman "0.3.2") (transient "0.4.1")) ;; Keywords: languages, clojure, cider ;; This program is free software: you can redistribute it and/or modify diff --git a/doc/modules/ROOT/pages/about/compatibility.adoc b/doc/modules/ROOT/pages/about/compatibility.adoc index 310360536..60f29d66e 100644 --- a/doc/modules/ROOT/pages/about/compatibility.adoc +++ b/doc/modules/ROOT/pages/about/compatibility.adoc @@ -2,7 +2,7 @@ == Emacs -CIDER supports Emacs 26.1+. More generally we try to support the last 3 major Emacs releases +CIDER supports Emacs 27.1+. More generally we try to support the last 3 major Emacs releases when that's feasible and doesn't add a lot of maintenance overhead. NOTE: We pay special attention to supporting whatever Emacs is bundled with the current stable Debian @@ -16,7 +16,7 @@ NOTE: We pay special attention to supporting whatever nREPL is bundled with the == Java -CIDER officially targets Java 8, Java 11, Java 17, Java 21, and the most recent +CIDER officially targets Java 8, 11, 17, 21, and the most recent non-LTS version. Generally speaking, we aim to support all Java releases that are currently officially supported by Oracle.footnote:[You can find more information about the supported Java releases @@ -75,13 +75,20 @@ Below you can find the official compatibility matrix for CIDER. | 8 | 1.9 -| 1.16 +| 1.17 | 26.1 | 1.0 | 0.50 | 8 | 1.10 +| 1.18 +| 27.1 +| 1.0 +| 0.50 +| 8 +| 1.10 + |=== TIP: You can also check the requirements of a particular CIDER version by inspecting diff --git a/doc/modules/ROOT/pages/basics/installation.adoc b/doc/modules/ROOT/pages/basics/installation.adoc index 8e17b377f..e35fefb81 100644 --- a/doc/modules/ROOT/pages/basics/installation.adoc +++ b/doc/modules/ROOT/pages/basics/installation.adoc @@ -12,7 +12,7 @@ release. If you're new to Emacs you might want to go through https://www.gnu.org/software/emacs/tour/index.html[the guided tour of Emacs] and the built-in tutorial (just press kbd:[C-h t]). -CIDER officially supports Emacs 26.1+, Java 8+, and Clojure(Script) 1.10+. If +CIDER officially supports Emacs 27.1+, Java 8+, and Clojure(Script) 1.10+. If you need to work with earlier versions, check xref:about/compatibility.adoc#compatibility-matrix[compatibility matrix]. From 8f726689fdd134db9c5eef69143404dc0ef30933 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Tue, 4 Mar 2025 16:01:08 +0200 Subject: [PATCH 089/149] Appease linter gods --- cider-client.el | 6 +++--- cider-connection.el | 4 ++-- cider-selector.el | 4 +++- nrepl-client.el | 12 ++++++------ 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/cider-client.el b/cider-client.el index df59bc3f0..4e8ad9441 100644 --- a/cider-client.el +++ b/cider-client.el @@ -249,7 +249,7 @@ Assuming this is the Clojure map you want to use as `cljfmt' options: you need to encode it as the following plist: - '((\"indents\" ((\"org.me/foo\" ((\"inner\" 0))))) (\"alias-map\" ((\"me\" \"org.me\"))))" + \\='((\"indents\" ((\"org.me/foo\" ((\"inner\" 0))))) (\"alias-map\" ((\"me\" \"org.me\"))))" :type 'list :group 'cider :package-version '(cider . "1.1.0")) @@ -257,7 +257,7 @@ you need to encode it as the following plist: (defun cider--nrepl-format-code-request-map (&optional format-options) "Map to merge into requests that require code formatting. If non-nil, FORMAT-OPTIONS specifies the options cljfmt will use to format -the code. See `cider-format-code-options` for details." +the code. See `cider-format-code-options' for details." (when format-options (let* ((indents-dict (when (assoc "indents" format-options) (thread-last @@ -320,7 +320,7 @@ nil." "A map of options that will be passed to `cider-print-fn'. Here's an example for `pprint': - '((\"length\" 50) (\"right-margin\" 70))" + \\='((\"length\" 50) (\"right-margin\" 70))" :type 'list :group 'cider :package-version '(cider . "0.21.0")) diff --git a/cider-connection.el b/cider-connection.el index e1db6c595..7bec4d33d 100644 --- a/cider-connection.el +++ b/cider-connection.el @@ -264,7 +264,7 @@ We look only at the major and minor components. When the major version is 0, only check that the minor versions match. When the major version is > 0, first check that the major version matches, then that the minor version is >= the required minor version. -VER the 'installed' version, +VER the `installed' version, REQUIRED-VER the version required by cider." (let ((ver* (cider--strip-version-patch ver)) (required-ver* (cider--strip-version-patch required-ver))) @@ -785,7 +785,7 @@ Session name can be customized with `cider-session-name-template'." ;;; REPL Buffer Init (defvar-local cider-cljs-repl-type nil - "The type of the ClojureScript runtime ('browser, 'node, 'figwheel, etc.).") + "The type of the ClojureScript runtime (\\='browser, \\='node, \\='figwheel, etc.).") (defvar-local cider-repl-type nil "The type of this REPL buffer, usually either clj or cljs.") diff --git a/cider-selector.el b/cider-selector.el index e729a8a30..d53235c1c 100644 --- a/cider-selector.el +++ b/cider-selector.el @@ -104,6 +104,7 @@ selects a buffer. BODY is a series of forms which are evaluated when the selector is chosen. The returned buffer is selected with `switch-to-buffer'." + (declare (indent 1)) (let ((method `(lambda () (let ((buffer (progn ,@body))) (cond ((not (and buffer (get-buffer buffer))) @@ -143,7 +144,8 @@ is chosen. The returned buffer is selected with "Most recently visited emacs-lisp-mode buffer." (cider-selector--recently-visited-buffer 'emacs-lisp-mode)) -(def-cider-selector-method ?q "Abort." +(def-cider-selector-method ?q + "Abort." (top-level)) (def-cider-selector-method ?r diff --git a/nrepl-client.el b/nrepl-client.el index 00a4c143e..d5a5a110d 100644 --- a/nrepl-client.el +++ b/nrepl-client.el @@ -833,13 +833,13 @@ to the REPL." truncated-handler) "Make a response handler for connection BUFFER. A handler is a function that takes one argument - response received from -the server process. The response is an alist that contains at least 'id' -and 'session' keys. Other standard response keys are 'value', 'out', 'err', -and 'status'. +the server process. The response is an alist that contains at least `id' +and `session' keys. Other standard response keys are `value', `out', `err', +and `status'. The presence of a particular key determines the type of the response. For -example, if 'value' key is present, the response is of type 'value', if -'out' key is present the response is 'stdout' etc. +example, if `value' key is present, the response is of type `value', if +`out' key is present the response is `stdout' etc. Depending on the type, the handler dispatches the appropriate value to one of the supplied handlers: VALUE-HANDLER, STDOUT-HANDLER, STDERR-HANDLER, @@ -1219,7 +1219,7 @@ up." (defun nrepl-server-sentinel (process event) "Handle nREPL server PROCESS EVENT. If the nREPL PROCESS failed to initiate and encountered a fatal EVENT -signal, raise an 'error'. Additionally, if the EVENT signal is SIGHUP, +signal, raise an `error'. Additionally, if the EVENT signal is SIGHUP, close any existing client connections." ;; only interested on fatal signals. (when (not (process-live-p process)) From ee5ee375c2b72823150b7afb3bf8486cbb0478dc Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Thu, 13 Mar 2025 15:49:36 +0200 Subject: [PATCH 090/149] Temporarily comment Emacs 27 testing --- .circleci/config.yml | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 3c4f80f4a..d1e6dc55a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -54,13 +54,15 @@ commands: command: eldev -dtT compile --warnings-as-errors jobs: - test-ubuntu-emacs-27: - docker: - - image: silex/emacs:27-ci - entrypoint: bash - steps: - - setup - - test + # NB: commented until https://github.com/magit/transient/issues/368 or + # whatever is causing it is fixed. + # test-ubuntu-emacs-27: + # docker: + # - image: silex/emacs:27-ci + # entrypoint: bash + # steps: + # - setup + # - test test-ubuntu-emacs-28: docker: @@ -132,10 +134,10 @@ workflows: jobs: - test-shellcheck - test-lint - - test-ubuntu-emacs-27: - requires: - - test-lint - - test-shellcheck + # - test-ubuntu-emacs-27: + # requires: + # - test-lint + # - test-shellcheck - test-ubuntu-emacs-28: requires: - test-lint From d80acaea7e1982bdb984ea5c807bd9ffd91d5cf6 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Tue, 11 Mar 2025 16:32:26 +0200 Subject: [PATCH 091/149] [connection] Introduce cider--ancillary-buffer-current-repl --- cider-connection.el | 29 ++++++++++------ cider-debug.el | 1 - cider-inspector.el | 83 +++++++++++++++++++-------------------------- 3 files changed, 53 insertions(+), 60 deletions(-) diff --git a/cider-connection.el b/cider-connection.el index 7bec4d33d..1983c75f8 100644 --- a/cider-connection.el +++ b/cider-connection.el @@ -938,6 +938,12 @@ function with the repl buffer set as current." (user-error "No %s REPLs in current session \"%s\"" type (car (sesman-current-session 'CIDER))))) +(defvar-local cider--ancillary-buffer-repl nil + "Special buffer-local variable that contains reference to the REPL connection. +This should be set in ancillary CIDER buffers that originate from some +event (e.g. *cider-inspector*, *cider-error*) and which never change the +REPL (connection) which produced them.") + (defun cider-current-repl (&optional type ensure) "Get the most recent REPL of TYPE from the current session. TYPE is either clj, cljs, multi or any. @@ -951,17 +957,18 @@ no linked session or there is no REPL of TYPE within the current session." (eq cider-repl-type type))) ;; shortcut when in REPL buffer (current-buffer) - (let* ((type (or type (cider-repl-type-for-buffer))) - (repls (cider-repls type ensure)) - (repl (if (<= (length repls) 1) - (car repls) - ;; pick the most recent one - (seq-find (lambda (b) - (member b repls)) - (buffer-list))))) - (if (and ensure (null repl)) - (cider--no-repls-user-error type) - repl))))) + (or cider--ancillary-buffer-repl + (let* ((type (or type (cider-repl-type-for-buffer))) + (repls (cider-repls type ensure)) + (repl (if (<= (length repls) 1) + (car repls) + ;; pick the most recent one + (seq-find (lambda (b) + (member b repls)) + (buffer-list))))) + (if (and ensure (null repl)) + (cider--no-repls-user-error type) + repl)))))) (defun cider--match-repl-type (type buffer) "Return non-nil if TYPE matches BUFFER's REPL type." diff --git a/cider-debug.el b/cider-debug.el index 15ccd2720..a9393de1f 100644 --- a/cider-debug.el +++ b/cider-debug.el @@ -683,7 +683,6 @@ needed. It is expected to contain at least \"key\", \"input-type\", and (setq cider--debug-mode-response response) (cider--debug-mode 1))) (when inspect - (setq cider-inspector--current-repl (cider-current-repl)) (cider-inspector--render-value inspect))) ;; If something goes wrong, we send a "quit" or the session hangs. (error (cider-debug-mode-send-reply ":quit" key) diff --git a/cider-inspector.el b/cider-inspector.el index 774f79406..8e40f3e8c 100644 --- a/cider-inspector.el +++ b/cider-inspector.el @@ -216,11 +216,6 @@ This is used as an alternative to the built-in `last-command'. Whenever we invoke any command through \\[execute-extended-command] and its variants, the value of `last-command' is not set to the command it invokes.") -(defvar cider-inspector--current-repl nil - "Contains the reference to the REPL where inspector was last invoked from. -This is needed for internal inspector buffer operations (push, -pop) to execute against the correct REPL session.") - ;; Operations ;;;###autoload (defun cider-inspect-expr (expr ns) @@ -229,7 +224,6 @@ Interactively, EXPR is read from the minibuffer, and NS the current buffer's namespace." (interactive (list (cider-read-from-minibuffer "Inspect expression: " (cider-sexp-at-point)) (cider-current-ns))) - (setq cider-inspector--current-repl (cider-current-repl)) (let ((result (cider-sync-request:inspect-expr expr ns))) (when (nrepl-dict-get result "value") (cider-inspector--render-value result)))) @@ -267,7 +261,6 @@ See `cider-sync-request:inspect-push' and `cider-inspector--render-value'" "Inspects the exception in the cause stack identified by INDEX." (interactive) (cl-assert (numberp index)) - (setq cider-inspector--current-repl (cider-current-repl)) (let ((result (cider-sync-request:inspect-last-exception index))) (when (nrepl-dict-get result "value") (push (point) cider-inspector-location-stack) @@ -298,7 +291,7 @@ See `cider-sync-request:inspect-next-sibling' and `cider-inspector--render-value "Invokes `inspect-refresh' op with supplied extra OPTS. Re-renders the currently inspected value." (let ((result (cider-nrepl-send-sync-request `("op" "inspect-refresh" ,@opts) - cider-inspector--current-repl))) + (cider-current-repl)))) (when (nrepl-dict-get result "value") (cider-inspector--render-value result)))) @@ -355,7 +348,7 @@ MAX-NESTED-DEPTH is the new value." "Toggle the view mode of the inspector between normal and object view mode." (interactive) (let ((result (cider-nrepl-send-sync-request `("op" "inspect-toggle-view-mode") - cider-inspector--current-repl))) + (cider-current-repl)))) (when (nrepl-dict-get result "value") (cider-inspector--render-value result)))) @@ -394,50 +387,42 @@ current-namespace." (defun cider-inspector-tap-current-val () "Sends the current Inspector current value to `tap>'." (interactive) - ;; NOTE: we don't set `cider-inspector--current-repl', because we mean to tap the current value of an existing Inspector, - ;; so whatever repl was used for it, should be used here. - (if cider-inspector--current-repl - (let ((response (cider-sync-request:inspect-tap-current-val))) - (nrepl-dbind-response response (value err) - (if value - (message "Successfully tapped the current Inspector value") - (error "Could not tap the current Inspector value: %s" err)))) - (user-error "No CIDER session found"))) + (let ((response (cider-sync-request:inspect-tap-current-val))) + (nrepl-dbind-response response (value err) + (if value + (message "Successfully tapped the current Inspector value") + (error "Could not tap the current Inspector value: %s" err))))) (defun cider-inspector-tap-at-point () "Sends the current Inspector current sub-value (per POINT) to `tap>'." (interactive) - ;; NOTE: we don't set `cider-inspector--current-repl', because we mean to tap the current value of an existing Inspector, - ;; so whatever repl was used for it, should be used here. - (if cider-inspector--current-repl - (seq-let (property value) (cider-inspector-property-at-point) - (pcase property - (`cider-value-idx - (let* ((idx value) - (response (cider-sync-request:inspect-tap-indexed idx))) - (nrepl-dbind-response response (value err) - (if value - (message "Successfully tapped the Inspector item at point") - (error "Could not tap the Inspector item at point: %s" err))))) - (_ (error "No object at point")))) - (user-error "No CIDER session found"))) + (seq-let (property value) (cider-inspector-property-at-point) + (pcase property + (`cider-value-idx + (let* ((idx value) + (response (cider-sync-request:inspect-tap-indexed idx))) + (nrepl-dbind-response response (value err) + (if value + (message "Successfully tapped the Inspector item at point") + (error "Could not tap the Inspector item at point: %s" err))))) + (_ (error "No object at point"))))) ;; nREPL interactions (defun cider-sync-request:inspect-pop () "Move one level up in the inspector stack." (cider-nrepl-send-sync-request `("op" "inspect-pop") - cider-inspector--current-repl)) + (cider-current-repl))) (defun cider-sync-request:inspect-push (idx) "Inspect the inside value specified by IDX." (cider-nrepl-send-sync-request `("op" "inspect-push" "idx" ,idx) - cider-inspector--current-repl)) + (cider-current-repl))) (defun cider-sync-request:inspect-previous-sibling () "Inspect the previous sibling value within a sequential parent." (cider-nrepl-send-sync-request `("op" "inspect-previous-sibling") - cider-inspector--current-repl)) + (cider-current-repl))) ;;;###autoload (defun cider-sync-request:inspect-last-exception (index) @@ -445,69 +430,69 @@ current-namespace." (cl-assert (numberp index)) (cider-nrepl-send-sync-request `("op" "inspect-last-exception" "index" ,index) - cider-inspector--current-repl)) + (cider-current-repl))) (defun cider-sync-request:inspect-next-sibling () "Inspect the next sibling value within a sequential parent." (cider-nrepl-send-sync-request `("op" "inspect-next-sibling") - cider-inspector--current-repl)) + (cider-current-repl))) (defun cider-sync-request:inspect-next-page () "Jump to the next page in paginated collection view." (cider-nrepl-send-sync-request '("op" "inspect-next-page") - cider-inspector--current-repl)) + (cider-current-repl))) (defun cider-sync-request:inspect-prev-page () "Jump to the previous page in paginated collection view." (cider-nrepl-send-sync-request '("op" "inspect-prev-page") - cider-inspector--current-repl)) + (cider-current-repl))) (defun cider-sync-request:inspect-set-page-size (page-size) "Set the page size in paginated view to PAGE-SIZE." (declare (obsolete "use `inspect-refresh' op instead." "1.15.0")) (cider-nrepl-send-sync-request `("op" "inspect-set-page-size" "page-size" ,page-size) - cider-inspector--current-repl)) + (cider-current-repl))) (defun cider-sync-request:inspect-set-max-atom-length (max-length) "Set the max length of nested atoms to MAX-LENGTH." (declare (obsolete "use `inspect-refresh' op instead." "1.15.0")) (cider-nrepl-send-sync-request `("op" "inspect-set-max-atom-length" "max-atom-length" ,max-length) - cider-inspector--current-repl)) + (cider-current-repl))) (defun cider-sync-request:inspect-set-max-coll-size (max-size) "Set the maximum number of nested collection members to display to MAX-SIZE." (declare (obsolete "use `inspect-refresh' op instead." "1.15.0")) (cider-nrepl-send-sync-request `("op" "inspect-set-max-coll-size" "max-coll-size" ,max-size) - cider-inspector--current-repl)) + (cider-current-repl))) (defun cider-sync-request:inspect-set-max-nested-depth (max-nested-depth) "Set the level of nesting to display before truncating to MAX-NESTED-DEPTH." (declare (obsolete "use `inspect-refresh' op instead." "1.15.0")) (cider-nrepl-send-sync-request `("op" "inspect-set-max-nested-depth" "max-nested-depth" ,max-nested-depth) - cider-inspector--current-repl)) + (cider-current-repl))) (defun cider-sync-request:inspect-def-current-val (ns var-name) "Defines a var with VAR-NAME in NS with the current inspector value." (cider-nrepl-send-sync-request `("op" "inspect-def-current-value" "ns" ,ns "var-name" ,var-name) - cider-inspector--current-repl)) + (cider-current-repl))) (defun cider-sync-request:inspect-tap-current-val () "Sends current inspector value to tap>." (cider-nrepl-send-sync-request '("op" "inspect-tap-current-value") - cider-inspector--current-repl)) + (cider-current-repl))) (defun cider-sync-request:inspect-tap-indexed (idx) "Sends current inspector sub-value to tap>, per IDX." (cl-assert idx) (cider-nrepl-send-sync-request `("op" "inspect-tap-indexed" "idx" ,idx) - cider-inspector--current-repl)) + (cider-current-repl))) (defun cider-sync-request:inspect-expr (expr ns) "Evaluate EXPR in context of NS and inspect its result. @@ -525,7 +510,7 @@ MAX-COLL-SIZE if non nil." `("max-coll-size" ,cider-inspector-max-coll-size)) ,@(when cider-inspector-max-nested-depth `("max-nested-depth" ,cider-inspector-max-nested-depth)))) - (cider-nrepl-send-sync-request cider-inspector--current-repl))) + (cider-nrepl-send-sync-request (cider-current-repl)))) (declare-function cider-set-buffer-ns "cider-mode") @@ -549,7 +534,8 @@ It can either be a value directly or a inspector response that contains (local-variable-p 'truncate-lines b))) (truncate-lines-p (when-let* ((b (get-buffer cider-inspector-buffer)) (continue truncate-lines-defined)) - (buffer-local-value 'truncate-lines b)))) + (buffer-local-value 'truncate-lines b))) + (repl (cider-current-repl))) (cider-make-popup-buffer cider-inspector-buffer 'cider-inspector-mode 'ancillary) (cider-inspector-render cider-inspector-buffer value :font-size font-size @@ -559,6 +545,7 @@ It can either be a value directly or a inspector response that contains (when cider-inspector-fill-frame (delete-other-windows)) (ignore-errors (cider-inspector-next-inspectable-object 1)) (with-current-buffer cider-inspector-buffer + (setq cider--ancillary-buffer-repl repl) (cider-set-buffer-ns ns) (when (eq cider-inspector-last-command 'cider-inspector-pop) (setq cider-inspector-last-command nil) From e125d3eaef7718b6975f12b94f7b4ffa4bd20b58 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Tue, 11 Mar 2025 17:18:54 +0200 Subject: [PATCH 092/149] [inspector] Reimplement point retention between inspector screen changes --- CHANGELOG.md | 1 + cider-debug.el | 2 +- cider-inspector.el | 66 +++++++++++++++------------------------------- 3 files changed, 23 insertions(+), 46 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 681f929ba..54d30de43 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - [#3782](https://github.com/clojure-emacs/cider/issues/3782): **(Breaking)** Drop official support for Emacs 26. - [#3777](https://github.com/clojure-emacs/cider/issues/3777): Inspector no longer displays parsed Javadoc for Java classes and members. +- [#3784](https://github.com/clojure-emacs/cider/issues/3784): Inspector: make point less erratic when navigating between inspector screens. ## 1.17.1 (2025-02-25) diff --git a/cider-debug.el b/cider-debug.el index a9393de1f..cd17469dc 100644 --- a/cider-debug.el +++ b/cider-debug.el @@ -683,7 +683,7 @@ needed. It is expected to contain at least \"key\", \"input-type\", and (setq cider--debug-mode-response response) (cider--debug-mode 1))) (when inspect - (cider-inspector--render-value inspect))) + (cider-inspector--render-value inspect :next-inspectable))) ;; If something goes wrong, we send a "quit" or the session hangs. (error (cider-debug-mode-send-reply ":quit" key) (message "Error encountered while handling the debug message: %S" e))))) diff --git a/cider-inspector.el b/cider-inspector.el index 8e40f3e8c..5621f6d9f 100644 --- a/cider-inspector.el +++ b/cider-inspector.el @@ -205,17 +205,6 @@ With a second prefix argument it prompts for an expression to eval and inspect." These locations are used to emulate `save-excursion' between `cider-inspector-push' and `cider-inspector-pop' operations.") -(defvar cider-inspector-page-location-stack nil - "A stack used to save point locations in inspector buffers. -These locations are used to emulate `save-excursion' between -`cider-inspector-next-page' and `cider-inspector-prev-page' operations.") - -(defvar cider-inspector-last-command nil - "Contains the value of the most recently used `cider-inspector-*' command. -This is used as an alternative to the built-in `last-command'. Whenever we -invoke any command through \\[execute-extended-command] and its variants, -the value of `last-command' is not set to the command it invokes.") - ;; Operations ;;;###autoload (defun cider-inspect-expr (expr ns) @@ -226,7 +215,8 @@ current buffer's namespace." (cider-current-ns))) (let ((result (cider-sync-request:inspect-expr expr ns))) (when (nrepl-dict-get result "value") - (cider-inspector--render-value result)))) + (setq cider-inspector-location-stack nil) + (cider-inspector--render-value result :next-inspectable)))) (defun cider-inspect-expr-from-inspector () "Performs `cider-inspect-expr' in a way that is suitable from the Inspector itself. @@ -242,10 +232,9 @@ In particular, it does not read `cider-sexp-at-point'." "Pop the last value off the inspector stack and render it. See `cider-sync-request:inspect-pop' and `cider-inspector--render-value'." (interactive) - (setq cider-inspector-last-command 'cider-inspector-pop) (let ((result (cider-sync-request:inspect-pop))) (when (nrepl-dict-get result "value") - (cider-inspector--render-value result)))) + (cider-inspector--render-value result :pop)))) (defun cider-inspector-push (idx) "Inspect the value at IDX in the inspector stack and render it. @@ -254,8 +243,7 @@ See `cider-sync-request:inspect-push' and `cider-inspector--render-value'" (let ((result (cider-sync-request:inspect-push idx))) (when (nrepl-dict-get result "value") (push (point) cider-inspector-location-stack) - (cider-inspector--render-value result) - (cider-inspector-next-inspectable-object 1)))) + (cider-inspector--render-value result :next-inspectable)))) (defun cider-inspector-inspect-last-exception (index) "Inspects the exception in the cause stack identified by INDEX." @@ -263,9 +251,8 @@ See `cider-sync-request:inspect-push' and `cider-inspector--render-value'" (cl-assert (numberp index)) (let ((result (cider-sync-request:inspect-last-exception index))) (when (nrepl-dict-get result "value") - (push (point) cider-inspector-location-stack) - (cider-inspector--render-value result) - (cider-inspector-next-inspectable-object 1)))) + (setq cider-inspector-location-stack nil) + (cider-inspector--render-value result :next-inspectable)))) (defun cider-inspector-previous-sibling () "Inspect the previous sibling value within a sequential parent. @@ -273,9 +260,7 @@ See `cider-sync-request:inspect-previous-sibling' and `cider-inspector--render-v (interactive) (let ((result (cider-sync-request:inspect-previous-sibling))) (when (nrepl-dict-get result "value") - (push (point) cider-inspector-location-stack) - (cider-inspector--render-value result) - (cider-inspector-next-inspectable-object 1)))) + (cider-inspector--render-value result)))) (defun cider-inspector-next-sibling () "Inspect the next sibling value within a sequential parent. @@ -283,9 +268,7 @@ See `cider-sync-request:inspect-next-sibling' and `cider-inspector--render-value (interactive) (let ((result (cider-sync-request:inspect-next-sibling))) (when (nrepl-dict-get result "value") - (push (point) cider-inspector-location-stack) - (cider-inspector--render-value result) - (cider-inspector-next-inspectable-object 1)))) + (cider-inspector--render-value result)))) (defun cider-inspector--refresh-with-opts (&rest opts) "Invokes `inspect-refresh' op with supplied extra OPTS. @@ -305,7 +288,6 @@ Re-renders the currently inspected value." Does nothing if already on the last page." (interactive) - (push (point) cider-inspector-page-location-stack) (let ((result (cider-sync-request:inspect-next-page))) (when (nrepl-dict-get result "value") (cider-inspector--render-value result)))) @@ -315,7 +297,6 @@ Does nothing if already on the last page." Does nothing if already on the first page." (interactive) - (setq cider-inspector-last-command 'cider-inspector-prev-page) (let ((result (cider-sync-request:inspect-prev-page))) (when (nrepl-dict-get result "value") (cider-inspector--render-value result)))) @@ -350,7 +331,7 @@ MAX-NESTED-DEPTH is the new value." (let ((result (cider-nrepl-send-sync-request `("op" "inspect-toggle-view-mode") (cider-current-repl)))) (when (nrepl-dict-get result "value") - (cider-inspector--render-value result)))) + (cider-inspector--render-value result :next-inspectable)))) (defcustom cider-inspector-preferred-var-names nil "The preferred var names to be suggested by `cider-inspector-def-current-val'. @@ -515,10 +496,12 @@ MAX-COLL-SIZE if non nil." (declare-function cider-set-buffer-ns "cider-mode") ;; Render Inspector from Structured Values -(defun cider-inspector--render-value (dict-or-value) +(defun cider-inspector--render-value (dict-or-value &optional point-action) "Render DICT-OR-VALUE. It can either be a value directly or a inspector response that contains -`value' field." +`value' field. +POINT-ACTION can either be nil (leave point where it is now), `:pop' (pop point +from stack), `:next-inspectable' (move point to next inspectable object)." (let* ((value (if (nrepl-dict-p dict-or-value) (nrepl-dict-get dict-or-value "value") dict-or-value)) @@ -535,7 +518,8 @@ It can either be a value directly or a inspector response that contains (truncate-lines-p (when-let* ((b (get-buffer cider-inspector-buffer)) (continue truncate-lines-defined)) (buffer-local-value 'truncate-lines b))) - (repl (cider-current-repl))) + (repl (cider-current-repl)) + (current-point (point))) (cider-make-popup-buffer cider-inspector-buffer 'cider-inspector-mode 'ancillary) (cider-inspector-render cider-inspector-buffer value :font-size font-size @@ -543,23 +527,15 @@ It can either be a value directly or a inspector response that contains :truncate-lines-p truncate-lines-p) (cider-popup-buffer-display cider-inspector-buffer cider-inspector-auto-select-buffer) (when cider-inspector-fill-frame (delete-other-windows)) - (ignore-errors (cider-inspector-next-inspectable-object 1)) (with-current-buffer cider-inspector-buffer (setq cider--ancillary-buffer-repl repl) (cider-set-buffer-ns ns) - (when (eq cider-inspector-last-command 'cider-inspector-pop) - (setq cider-inspector-last-command nil) - ;; Prevents error message being displayed when we try to pop - ;; from the top-level of a data structure - (when cider-inspector-location-stack - (goto-char (pop cider-inspector-location-stack)))) - - (when (eq cider-inspector-last-command 'cider-inspector-prev-page) - (setq cider-inspector-last-command nil) - ;; Prevents error message being displayed when we try to - ;; go to a prev-page from the first page - (when cider-inspector-page-location-stack - (goto-char (pop cider-inspector-page-location-stack))))))) + (cond ((eq point-action nil) (goto-char current-point)) + ((eq point-action :next-inspectable) (ignore-errors (cider-inspector-next-inspectable-object 1))) + ((eq point-action :pop) + (goto-char (or (when cider-inspector-location-stack + (pop cider-inspector-location-stack)) + current-point))))))) (cl-defun cider-inspector-render (buffer str &key font-size truncate-lines-defined truncate-lines-p) "Render STR in BUFFER." From ee35c30d58bffe08dab080ec5135e23b9dfcf508 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Thu, 13 Mar 2025 15:42:36 +0200 Subject: [PATCH 093/149] Always use plists to represent nrepl requests --- cider-client.el | 69 ++++++++++++++++++--------------------------- cider-debug.el | 7 ++--- cider-eval.el | 57 ++++++++++++++++++------------------- cider-log.el | 12 ++++---- cider-ns.el | 32 +++++++++------------ cider-repl.el | 31 ++++++++------------ cider-stacktrace.el | 12 ++------ cider-test.el | 13 ++++----- nrepl-dict.el | 10 +++++++ 9 files changed, 105 insertions(+), 138 deletions(-) diff --git a/cider-client.el b/cider-client.el index 4e8ad9441..d03bb3957 100644 --- a/cider-client.el +++ b/cider-client.el @@ -254,7 +254,7 @@ you need to encode it as the following plist: :group 'cider :package-version '(cider . "1.1.0")) -(defun cider--nrepl-format-code-request-map (&optional format-options) +(defun cider--nrepl-format-code-request-options (&optional format-options) "Map to merge into requests that require code formatting. If non-nil, FORMAT-OPTIONS specifies the options cljfmt will use to format the code. See `cider-format-code-options' for details." @@ -271,15 +271,11 @@ the code. See `cider-format-code-options' for details." (map-pairs) (seq-mapcat #'identity) (apply #'nrepl-dict))))) - (thread-last - (map-merge 'list - (when indents-dict - `(("indents" ,indents-dict))) - (when alias-map-dict - `(("alias-map" ,alias-map-dict)))) - (map-pairs) - (seq-mapcat #'identity) - (apply #'nrepl-dict))))) + (nrepl-dict + `(,@(when indents-dict + `("indents" ,indents-dict)) + ,@(when alias-map-dict + `("alias-map" ,alias-map-dict))))))) (defcustom cider-print-fn 'pprint "Sets the function to use for printing. @@ -388,7 +384,7 @@ The result will be a string." (result (cdr (assoc printer (cadr (assoc name cider--print-options-mapping)))))) (symbol-name (or result name)))) -(defun cider--nrepl-print-request-map (&optional right-margin) +(defun cider--nrepl-print-request-plist (&optional right-margin) "Map to merge into requests that require pretty-printing. RIGHT-MARGIN specifies the maximum column-width of the printed result, and is included in the request if non-nil." @@ -400,35 +396,29 @@ is included in the request if non-nil." (map-pairs) (seq-mapcat #'identity) (apply #'nrepl-dict)))) - (map-merge 'list - `(("nrepl.middleware.print/stream?" "1")) - (when cider-print-fn - `(("nrepl.middleware.print/print" ,(cider--print-fn)))) - (when cider-print-quota - `(("nrepl.middleware.print/quota" ,cider-print-quota))) - (when cider-print-buffer-size - `(("nrepl.middleware.print/buffer-size" ,cider-print-buffer-size))) - (unless (nrepl-dict-empty-p print-options) - `(("nrepl.middleware.print/options" ,print-options)))))) - -(defun cider--nrepl-pr-request-map () + `("nrepl.middleware.print/stream?" "1" + ,@(when cider-print-fn + `("nrepl.middleware.print/print" ,(cider--print-fn))) + ,@(when cider-print-quota + `("nrepl.middleware.print/quota" ,cider-print-quota)) + ,@(when cider-print-buffer-size + `("nrepl.middleware.print/buffer-size" ,cider-print-buffer-size)) + ,@(unless (nrepl-dict-empty-p print-options) + `("nrepl.middleware.print/options" ,print-options))))) + +(defun cider--nrepl-pr-request-plist () "Map to merge into requests that do not require pretty printing." (let ((print-options (thread-last cider-print-options (map-pairs) (seq-mapcat #'identity) (apply #'nrepl-dict)))) - (map-merge 'list - `(("nrepl.middleware.print/print" "cider.nrepl.pprint/pr") - ("nrepl.middleware.print/stream?" nil)) - (unless (nrepl-dict-empty-p print-options) - `(("nrepl.middleware.print/options" ,print-options))) - (when cider-print-quota - `(("nrepl.middleware.print/quota" ,cider-print-quota)))))) - -(defun cider--nrepl-content-type-map () - "Map to be merged into an eval request to make it use content-types." - '(("content-type" "true"))) + `("nrepl.middleware.print/print" "cider.nrepl.pprint/pr" + "nrepl.middleware.print/stream?" nil + ,@(unless (nrepl-dict-empty-p print-options) + `("nrepl.middleware.print/options" ,print-options)) + ,@(when cider-print-quota + `("nrepl.middleware.print/quota" ,cider-print-quota))))) (defun cider-tooling-eval (input callback &optional ns connection) "Send the request INPUT to CONNECTION and register the CALLBACK. @@ -877,7 +867,7 @@ The result entries are relative to the classpath." "Perform nREPL \"format-code\" op with CODE. FORMAT-OPTIONS is an optional configuration map for cljfmt." (let* ((request `("op" "format-code" - "options" ,(cider--nrepl-format-code-request-map format-options) + "options" ,(cider--nrepl-format-code-request-options format-options) "code" ,code)) (response (cider-nrepl-send-sync-request request)) (err (nrepl-dict-get response "err"))) @@ -889,12 +879,9 @@ FORMAT-OPTIONS is an optional configuration map for cljfmt." (defun cider-sync-request:format-edn (edn right-margin) "Perform \"format-edn\" op with EDN and RIGHT-MARGIN." - (let* ((request (thread-last - (map-merge 'list - `(("op" "format-edn") - ("edn" ,edn)) - (cider--nrepl-print-request-map right-margin)) - (seq-mapcat #'identity))) + (let* ((request `("op" "format-edn" + "edn" ,edn + ,@(cider--nrepl-print-request-plist right-margin))) (response (cider-nrepl-send-sync-request request)) (err (nrepl-dict-get response "err"))) (when err diff --git a/cider-debug.el b/cider-debug.el index cd17469dc..d7427b57a 100644 --- a/cider-debug.el +++ b/cider-debug.el @@ -143,11 +143,8 @@ configure `cider-debug-prompt' instead." (defun cider--debug-init-connection () "Initialize a connection with the cider.debug middleware." (cider-nrepl-send-request - (thread-last - (map-merge 'list - '(("op" "init-debugger")) - (cider--nrepl-print-request-map fill-column)) - (seq-mapcat #'identity)) + `("op" "init-debugger" + ,@(cider--nrepl-print-request-plist fill-column)) #'cider--debug-response-handler)) diff --git a/cider-eval.el b/cider-eval.el index 8ca344525..51bb0ca2d 100644 --- a/cider-eval.el +++ b/cider-eval.el @@ -354,11 +354,8 @@ into a new error buffer." ;; Causes are returned as a series of messages, which we aggregate in `causes' (let (causes ex-phase) (cider-nrepl-send-request - (thread-last - (map-merge 'list - '(("op" "analyze-last-stacktrace")) - (cider--nrepl-print-request-map fill-column)) - (seq-mapcat #'identity)) + `("op" "analyze-last-stacktrace" + ,@(cider--nrepl-print-request-plist fill-column)) (lambda (response) (nrepl-dbind-response response (phase) (when phase @@ -691,13 +688,12 @@ REPL buffer. This is controlled via (cider-current-repl)))) (when (cider-nrepl-op-supported-p "analyze-last-stacktrace" conn) (let ((nrepl-sync-request-timeout 4)) ;; ensure that this feature cannot possibly create an overly laggy UX - (when-let* ((result (nrepl-send-sync-request (thread-last (map-merge 'list - '(("op" "analyze-last-stacktrace")) - (cider--nrepl-print-request-map fill-column)) - (seq-mapcat #'identity)) - conn - 'abort-on-input ;; favor responsiveness over this feature, in case something went wrong. - ))) + (when-let* ((result (nrepl-send-sync-request + `("op" "analyze-last-stacktrace" + ,@(cider--nrepl-print-request-plist fill-column)) + conn + 'abort-on-input ;; favor responsiveness over this feature, in case something went wrong. + ))) (nrepl-dict-get result "phase"))))))) (defcustom cider-inline-error-message-function #'cider--shorten-error-message @@ -1026,11 +1022,12 @@ API. Most other interactive eval functions should rely on this function. If CALLBACK is nil use `cider-interactive-eval-handler'. BOUNDS, if non-nil, is a list of two numbers marking the start and end positions of FORM in its buffer. -ADDITIONAL-PARAMS is a map to be merged into the request message. +ADDITIONAL-PARAMS is a plist to be merged into the request message. If `cider-interactive-eval-override' is a function, call it with the same arguments and only proceed with evaluation if it returns nil." (let ((form (or form (apply #'buffer-substring-no-properties bounds))) + (additional-params (nrepl--alist-to-plist additional-params)) (start (car-safe bounds)) (end (car-safe (cdr-safe bounds)))) (when (and start end) @@ -1057,7 +1054,7 @@ arguments and only proceed with evaluation if it returns nil." (if (cider-ns-form-p form) "user" (cider-current-ns)) (when start (line-number-at-pos start)) (when start (cider-column-number-at-pos start)) - (seq-mapcat #'identity additional-params) + additional-params connection)))))) (defun cider-eval-region (start end) @@ -1066,7 +1063,7 @@ arguments and only proceed with evaluation if it returns nil." (cider-interactive-eval nil nil (list start end) - (cider--nrepl-pr-request-map))) + (cider--nrepl-pr-request-plist))) (defun cider-eval-last-sexp (&optional output-to-current-buffer) "Evaluate the expression preceding point. @@ -1076,7 +1073,7 @@ buffer." (cider-interactive-eval nil (when output-to-current-buffer (cider-eval-print-handler)) (cider-last-sexp 'bounds) - (cider--nrepl-pr-request-map))) + (cider--nrepl-pr-request-plist))) (defun cider-eval-last-sexp-and-replace () "Evaluate the expression preceding point and replace it with its result." @@ -1091,7 +1088,7 @@ buffer." (cider-interactive-eval last-sexp (cider-eval-print-handler) nil - (cider--nrepl-pr-request-map)))) + (cider--nrepl-pr-request-plist)))) (defun cider-eval-list-at-point (&optional output-to-current-buffer) "Evaluate the list (eg. a function call, surrounded by parens) around point. @@ -1118,7 +1115,7 @@ buffer." (cider-interactive-eval tapped-form (when output-to-current-buffer (cider-eval-print-handler)) nil - (cider--nrepl-pr-request-map)))) + (cider--nrepl-pr-request-plist)))) (defun cider-tap-sexp-at-point (&optional output-to-current-buffer) "Evaluate and tap the expression around point. @@ -1167,7 +1164,7 @@ When GUESS is non-nil, attempt to extract the context from parent let-bindings." (cider-interactive-eval code nil bounds - (cider--nrepl-pr-request-map)))) + (cider--nrepl-pr-request-plist)))) (defun cider-eval-last-sexp-in-context (guess) "Evaluate the preceding sexp in user-supplied context. @@ -1206,7 +1203,7 @@ With the prefix arg INSERT-BEFORE, insert before the form, otherwise afterwards. (set-marker (make-marker) insertion-point) cider-comment-prefix) bounds - (cider--nrepl-pr-request-map)))) + (cider--nrepl-pr-request-plist)))) (defun cider-pprint-form-to-comment (form-fn insert-before) "Evaluate the form selected by FORM-FN and insert result as comment. @@ -1236,7 +1233,7 @@ If INSERT-BEFORE is non-nil, insert before the form, otherwise afterwards." cider-comment-continued-prefix comment-postfix) bounds - (cider--nrepl-print-request-map fill-column)))) + (cider--nrepl-print-request-plist fill-column)))) (defun cider-pprint-eval-last-sexp-to-comment (&optional insert-before) "Evaluate the last sexp and insert result as comment. @@ -1290,13 +1287,13 @@ honoring SWITCH-TO-REPL, REQUEST-MAP." "Evaluate the expression preceding point and insert its result in the REPL. If invoked with a PREFIX argument, switch to the REPL buffer." (interactive "P") - (cider--eval-last-sexp-to-repl prefix (cider--nrepl-pr-request-map))) + (cider--eval-last-sexp-to-repl prefix (cider--nrepl-pr-request-plist))) (defun cider-pprint-eval-last-sexp-to-repl (&optional prefix) "Evaluate expr before point and insert its pretty-printed result in the REPL. If invoked with a PREFIX argument, switch to the REPL buffer." (interactive "P") - (cider--eval-last-sexp-to-repl prefix (cider--nrepl-print-request-map fill-column))) + (cider--eval-last-sexp-to-repl prefix (cider--nrepl-print-request-plist fill-column))) (defun cider-eval-print-last-sexp (&optional pretty-print) "Evaluate the expression preceding point. @@ -1307,8 +1304,8 @@ With an optional PRETTY-PRINT prefix it pretty-prints the result." (cider-eval-print-handler) (cider-last-sexp 'bounds) (if pretty-print - (cider--nrepl-print-request-map fill-column) - (cider--nrepl-pr-request-map)))) + (cider--nrepl-print-request-plist fill-column) + (cider--nrepl-pr-request-plist)))) (defun cider--pprint-eval-form (form) "Pretty print FORM in popup buffer." @@ -1319,7 +1316,7 @@ With an optional PRETTY-PRINT prefix it pretty-prints the result." (cider-interactive-eval (when (stringp form) form) handler (when (consp form) form) - (cider--nrepl-print-request-map fill-column))))) + (cider--nrepl-print-request-plist fill-column))))) (defun cider-pprint-eval-last-sexp (&optional output-to-current-buffer) "Evaluate the sexp preceding point and pprint its value. @@ -1383,7 +1380,7 @@ command `cider-debug-defun-at-point'." (concat "#dbg\n" (cider-defun-at-point))) nil (cider-defun-at-point 'bounds) - (cider--nrepl-pr-request-map)))) + (cider--nrepl-pr-request-plist)))) (defun cider--insert-closing-delimiters (code) "Closes all open parenthesized or bracketed expressions of CODE." @@ -1415,7 +1412,7 @@ buffer. It constructs an expression to eval in the following manner: (when output-to-current-buffer (cider-eval-print-handler)) (list beg-of-defun (point)) - (cider--nrepl-pr-request-map)))) + (cider--nrepl-pr-request-plist)))) (defun cider--matching-delimiter (delimiter) "Get the matching (opening/closing) delimiter for DELIMITER." @@ -1446,7 +1443,7 @@ buffer. It constructs an expression to eval in the following manner: (when output-to-current-buffer (cider-eval-print-handler)) (list beg-of-sexp (point)) - (cider--nrepl-pr-request-map)))) + (cider--nrepl-pr-request-plist)))) (defun cider-pprint-eval-defun-at-point (&optional output-to-current-buffer) "Evaluate the \"top-level\" form at point and pprint its value. @@ -1485,7 +1482,7 @@ If VALUE is non-nil, it is inserted into the minibuffer as initial input." (cider-interactive-eval form nil nil - (cider--nrepl-pr-request-map)))))) + (cider--nrepl-pr-request-plist)))))) (defun cider-read-and-eval-defun-at-point () "Insert the toplevel form at point in the minibuffer and output its result. diff --git a/cider-log.el b/cider-log.el index 3a304507e..fab84ea6d 100644 --- a/cider-log.el +++ b/cider-log.el @@ -282,13 +282,11 @@ It will not be used if the package hasn't been installed." "Format the log EVENT from the APPENDER of the log FRAMEWORK." (cider-ensure-op-supported "cider/log-format-event") (thread-first - (seq-mapcat #'identity - (map-merge 'list - (cider--nrepl-print-request-map fill-column) - `(("op" "cider/log-format-event") - ("framework" ,(cider-log-framework-id framework)) - ("appender" ,(cider-log-appender-id appender)) - ("event" ,(cider-log-event-id event))))) + `("op" "cider/log-format-event" + "framework" ,(cider-log-framework-id framework) + "appender" ,(cider-log-appender-id appender) + "event" ,(cider-log-event-id event) + ,@(cider--nrepl-print-request-plist fill-column)) (cider-nrepl-send-sync-request) (nrepl-dict-get "cider/log-format-event"))) diff --git a/cider-ns.el b/cider-ns.el index 31018b76f..5379c4c1f 100644 --- a/cider-ns.el +++ b/cider-ns.el @@ -237,15 +237,14 @@ Its behavior is controlled by `cider-ns-save-files-on-refresh' and (defun cider-ns--reload-op (op-name) "Return the reload operation to use. Based on OP-NAME and the value of cider-ns-code-reload-tool defcustom." - (list "op" - (if (eq cider-ns-code-reload-tool 'tools.namespace) - (cond ((string= op-name "reload") "refresh") - ((string= op-name "reload-all") "refresh-all") - ((string= op-name "reload-clear") "refresh-clear")) + (if (eq cider-ns-code-reload-tool 'tools.namespace) + (cond ((string= op-name "reload") "refresh") + ((string= op-name "reload-all") "refresh-all") + ((string= op-name "reload-clear") "refresh-clear")) - (cond ((string= op-name "reload") "cider.clj-reload/reload") - ((string= op-name "reload-all") "cider.clj-reload/reload-all") - ((string= op-name "reload-clear") "cider.clj-reload/reload-clear"))))) + (cond ((string= op-name "reload") "cider.clj-reload/reload") + ((string= op-name "reload-all") "cider.clj-reload/reload-all") + ((string= op-name "reload-clear") "cider.clj-reload/reload-clear")))) ;;;###autoload (defun cider-ns-reload (&optional prompt) @@ -317,17 +316,14 @@ refresh functions (defined in `cider-ns-refresh-before-fn' and nil t)) (when clear? - (cider-nrepl-send-sync-request (cider-ns--reload-op "reload-clear") conn)) + (cider-nrepl-send-sync-request `("op" ,(cider-ns--reload-op "reload-clear")) conn)) (cider-nrepl-send-request - (thread-last - (map-merge 'list - `(,(cider-ns--reload-op (if all? "reload-all" "reload"))) - (cider--nrepl-print-request-map fill-column) - (when (and (not inhibit-refresh-fns) cider-ns-refresh-before-fn) - `(("before" ,cider-ns-refresh-before-fn))) - (when (and (not inhibit-refresh-fns) cider-ns-refresh-after-fn) - `(("after" ,cider-ns-refresh-after-fn)))) - (seq-mapcat #'identity)) + `("op" ,(cider-ns--reload-op (if all? "reload-all" "reload")) + ,@(cider--nrepl-print-request-plist fill-column) + ,@(when (and (not inhibit-refresh-fns) cider-ns-refresh-before-fn) + `("before" ,cider-ns-refresh-before-fn)) + ,@(when (and (not inhibit-refresh-fns) cider-ns-refresh-after-fn) + `("after" ,cider-ns-refresh-after-fn))) (lambda (response) (cider-ns-refresh--handle-response response log-buffer)) conn)))))) diff --git a/cider-repl.el b/cider-repl.el index c03a050f9..d37bb3382 100644 --- a/cider-repl.el +++ b/cider-repl.el @@ -290,9 +290,8 @@ Run CALLBACK once the evaluation is complete." "Evaluate `cider-repl-init-code' in the current REPL. Run CALLBACK once the evaluation is complete." (interactive) - (let* ((request (map-merge 'hash-table - (cider--repl-request-map fill-column) - '(("inhibit-cider-middleware" "true"))))) + (let* ((request `(,@(cider--repl-request-plist) + "inhibit-cider-middleware" "true"))) (cider-nrepl-request:eval ;; Ensure we evaluate _something_ so the initial namespace is correctly set (thread-first (or cider-repl-init-code '("nil")) @@ -301,10 +300,7 @@ Run CALLBACK once the evaluation is complete." nil (line-number-at-pos (point)) (cider-column-number-at-pos (point)) - (thread-last - request - (map-pairs) - (seq-mapcat #'identity))))) + request))) (defun cider-repl-init (buffer &optional callback) "Initialize the REPL in BUFFER. @@ -1083,15 +1079,13 @@ and responding to them.") (lambda (buffer warning) (cider-repl-emit-stderr buffer warning))))) -(defun cider--repl-request-map (right-margin) - "Map to be merged into REPL eval requests. -RIGHT-MARGIN is as in `cider--nrepl-print-request-map'." - (map-merge 'hash-table - (cider--nrepl-print-request-map right-margin) - (unless cider-repl-use-pretty-printing - '(("nrepl.middleware.print/print" "cider.nrepl.pprint/pr"))) - (when cider-repl-use-content-types - (cider--nrepl-content-type-map)))) +(defun cider--repl-request-plist () + "Plist to be merged into REPL eval requests." + `(,@(cider--nrepl-print-request-plist fill-column) + ,@(unless cider-repl-use-pretty-printing + `("nrepl.middleware.print/print" "cider.nrepl.pprint/pr")) + ,@(when cider-repl-use-content-types + `("content-type" "true")))) (defun cider-repl--send-input (&optional newline) "Go to the end of the input and send the current input. @@ -1132,10 +1126,7 @@ If NEWLINE is true then add a newline at the end of the input." (cider-current-ns) (line-number-at-pos input-start) (cider-column-number-at-pos input-start) - (thread-last - (cider--repl-request-map fill-column) - (map-pairs) - (seq-mapcat #'identity))))))) + (cider--repl-request-plist)))))) (defun cider-repl-return (&optional end-of-input) "Evaluate the current input string, or insert a newline. diff --git a/cider-stacktrace.el b/cider-stacktrace.el index 41f9b3628..966944355 100644 --- a/cider-stacktrace.el +++ b/cider-stacktrace.el @@ -931,14 +931,6 @@ through the `cider-stacktrace-suppressed-errors' variable." "Return the Cider NREPL op to analyze STACKTRACE." (list "op" "analyze-stacktrace" "stacktrace" stacktrace)) -(defun cider-stacktrace--stacktrace-request (stacktrace) - "Return the Cider NREPL request to analyze STACKTRACE." - (thread-last - (map-merge 'list - (list (cider-stacktrace--analyze-stacktrace-op stacktrace)) - (cider--nrepl-print-request-map fill-column)) - (seq-mapcat #'identity))) - (defun cider-stacktrace--analyze-render (causes) "Render the CAUSES of the stacktrace analysis result." (let ((buffer (get-buffer-create cider-error-buffer))) @@ -953,7 +945,9 @@ through the `cider-stacktrace-suppressed-errors' variable." (set-text-properties 0 (length stacktrace) nil stacktrace)) (let (causes) (cider-nrepl-send-request - (cider-stacktrace--stacktrace-request stacktrace) + `("op" "analyze-stacktrace" + "stacktrace" ,stacktrace + ,@(cider--nrepl-print-request-plist fill-column)) (lambda (response) (setq causes (nrepl-dbind-response response (class status) (cond (class (cons response causes)) diff --git a/cider-test.el b/cider-test.el index 5190fb9d0..39cbdb154 100644 --- a/cider-test.el +++ b/cider-test.el @@ -272,14 +272,11 @@ prompt and whether to use a new window. Similar to `cider-find-var'." "Display stacktrace for the erring NS VAR test with the assertion INDEX." (let (causes) (cider-nrepl-send-request - (thread-last - (map-merge 'list - `(("op" "test-stacktrace") - ("ns" ,ns) - ("var" ,var) - ("index" ,index)) - (cider--nrepl-print-request-map fill-column)) - (seq-mapcat #'identity)) + `("op" "test-stacktrace" + "ns" ,ns + "var" ,var + "index" ,index + ,@(cider--nrepl-print-request-plist fill-column)) (lambda (response) (nrepl-dbind-response response (class status) (cond (class (setq causes (cons response causes))) diff --git a/nrepl-dict.el b/nrepl-dict.el index 97f8c9e45..09d5fabb1 100644 --- a/nrepl-dict.el +++ b/nrepl-dict.el @@ -174,6 +174,16 @@ FUNCTION should be a function taking two arguments, key and value." (cons obj (car stack))) (cdr stack)))) +(defun nrepl--alist-to-plist (maybe-alist) + "Transform MAYBE-ALIST into a plist if it is an alist. +Compatibility function for functions that used to accepts nrepl request +options as alists. A warning will be printed if alist is received." + (let ((first-arg (car-safe maybe-alist))) + (if (or (null first-arg) (not (listp first-arg))) + maybe-alist ;; It is a plist - don't have to convert + (warn "Received alist where it should have been plist: %s" maybe-alist) + (seq-mapcat #'identity maybe-alist)))) + (defun nrepl--merge (dict1 dict2 &optional no-join) "Join nREPL dicts DICT1 and DICT2 in a meaningful way. String values for non \"id\" and \"session\" keys are concatenated. Lists From d346f3e4866d497a4c8327b80a5bb79adde87637 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Tue, 18 Mar 2025 20:27:56 +0200 Subject: [PATCH 094/149] [stacktrace] Visual improvements, expand causes by 1 by default --- CHANGELOG.md | 1 + cider-stacktrace.el | 22 ++++++++++------------ 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 54d30de43..a8456afad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - [#3782](https://github.com/clojure-emacs/cider/issues/3782): **(Breaking)** Drop official support for Emacs 26. - [#3777](https://github.com/clojure-emacs/cider/issues/3777): Inspector no longer displays parsed Javadoc for Java classes and members. - [#3784](https://github.com/clojure-emacs/cider/issues/3784): Inspector: make point less erratic when navigating between inspector screens. +- [#3790](https://github.com/clojure-emacs/cider/issues/3790): Stacktrace: show messages and data for all exception causes by default. ## 1.17.1 (2025-02-25) diff --git a/cider-stacktrace.el b/cider-stacktrace.el index 966944355..644f9c38c 100644 --- a/cider-stacktrace.el +++ b/cider-stacktrace.el @@ -209,7 +209,9 @@ The error types are represented as strings." (setq-local electric-indent-chars nil) (setq-local cider-stacktrace-hidden-frame-count 0) (setq-local cider-stacktrace-filters cider-stacktrace-default-filters) - (setq-local cider-stacktrace-cause-visibility (make-vector 10 0)) + ;; Expand all exception causes to "detail level 1" by default, meaning they + ;; will show the message and the data (but not the stacktrace). + (setq-local cider-stacktrace-cause-visibility (make-vector 10 1)) (buffer-disable-undo)) @@ -707,8 +709,7 @@ This associates text properties to enable filtering and source navigation." (put-text-property p1 p4 'font-lock-face 'cider-stacktrace-ns-face) (put-text-property p2 p3 'font-lock-face 'cider-stacktrace-fn-face) (put-text-property (line-beginning-position) (line-end-position) - 'cider-stacktrace-frame t))) - (insert "\n"))))))) + 'cider-stacktrace-frame t))))))))) (defun cider-stacktrace-render-compile-error (buffer cause) "Emit into BUFFER the compile error CAUSE, and enable jumping to it." @@ -844,41 +845,38 @@ make INSPECT-INDEX actionable if present." ,cider-stacktrace-exception-map) (insert (format "%d. " num) (propertize note 'font-lock-face 'font-lock-comment-face) " " - (propertize class 'font-lock-face class-face 'mouse-face 'highlight) - "\n")) + (propertize class 'font-lock-face class-face 'mouse-face 'highlight))) ;; Detail level 1: message + ex-data (cider-propertize-region '(detail 1) + (insert "\n") (if (equal class "clojure.lang.Compiler$CompilerException") (cider-stacktrace-render-compile-error buffer cause) (cider-stacktrace-emit-indented (propertize (or message "(No message)") 'font-lock-face message-face) indent t)) - (insert "\n") (when spec + (insert "\n") (cider-stacktrace--emit-spec-problems spec (concat indent " "))) (when data + (insert "\n") (cider-stacktrace-emit-indented data indent nil t))) ;; Detail level 2: stacktrace (cider-propertize-region '(detail 2) - (insert "\n") (let ((beg (point)) (bg `(:background ,cider-stacktrace-frames-background-color :extend t))) (dolist (frame stacktrace) + (insert "\n") (cider-stacktrace-render-frame buffer frame)) (overlay-put (make-overlay beg (point)) 'font-lock-face bg))) ;; Add line break between causes, even when collapsed. (cider-propertize-region '(detail 0) - (insert "\n"))))))) + (insert "\n\n"))))))) (defun cider-stacktrace-initialize (causes) "Set and apply CAUSES initial visibility, filters, and cursor position." (nrepl-dbind-response (car causes) (class) (let ((compile-error-p (equal class "clojure.lang.Compiler$CompilerException"))) - ;; Partially display outermost cause if it's a compiler exception (the - ;; description reports reader location of the error). - (when compile-error-p - (cider-stacktrace-cycle-cause (length causes) 1)) ;; Fully display innermost cause. This also applies visibility/filters. (cider-stacktrace-cycle-cause 1 cider-stacktrace-detail-max) ;; Move point (DWIM) to the compile error location if present, or to the From f7ad3cbc12877e0eaf01cf832e427532053e7141 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Wed, 19 Mar 2025 23:17:18 +0200 Subject: [PATCH 095/149] Bump cider-nrepl to 0.53.0 --- CHANGELOG.md | 4 ++ cider.el | 2 +- dev/docker-sample-project/project.clj | 2 +- dev/tramp-sample-project/project.clj | 2 +- .../ROOT/pages/basics/middleware_setup.adoc | 10 ++--- .../ROOT/pages/basics/up_and_running.adoc | 4 +- doc/modules/ROOT/pages/cljs/shadow-cljs.adoc | 2 +- .../ROOT/pages/cljs/up_and_running.adoc | 2 +- test/cider-tests.el | 44 +++++++++---------- 9 files changed, 38 insertions(+), 34 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a8456afad..b32c778f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,10 @@ ### Changes - [#3782](https://github.com/clojure-emacs/cider/issues/3782): **(Breaking)** Drop official support for Emacs 26. +- Bump the injected `cider-nrepl` to [0.53.0](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0530-2025-03-19). + - Info: recognize printed Java classes/methods and munged Clojure functions in stacktrace outputs. + - Inspector: add dedicated view for Exceptions. + - Stop vendoring Haystack dependency. - [#3777](https://github.com/clojure-emacs/cider/issues/3777): Inspector no longer displays parsed Javadoc for Java classes and members. - [#3784](https://github.com/clojure-emacs/cider/issues/3784): Inspector: make point less erratic when navigating between inspector screens. - [#3790](https://github.com/clojure-emacs/cider/issues/3790): Stacktrace: show messages and data for all exception causes by default. diff --git a/cider.el b/cider.el index 152a6aafb..11c81e64d 100644 --- a/cider.el +++ b/cider.el @@ -573,7 +573,7 @@ the artifact.") Used when `cider-jack-in-auto-inject-clojure' is set to `latest'.") -(defconst cider-required-middleware-version "0.52.1" +(defconst cider-required-middleware-version "0.53.0" "The CIDER nREPL version that's known to work properly with CIDER.") (defcustom cider-injected-middleware-version cider-required-middleware-version diff --git a/dev/docker-sample-project/project.clj b/dev/docker-sample-project/project.clj index d1ee9d726..15694e7e1 100644 --- a/dev/docker-sample-project/project.clj +++ b/dev/docker-sample-project/project.clj @@ -2,4 +2,4 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.52.1"]]) + :plugins [[cider/cider-nrepl "0.53.0"]]) diff --git a/dev/tramp-sample-project/project.clj b/dev/tramp-sample-project/project.clj index 7cc8a5358..048c3682f 100644 --- a/dev/tramp-sample-project/project.clj +++ b/dev/tramp-sample-project/project.clj @@ -2,5 +2,5 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.52.1"] + :plugins [[cider/cider-nrepl "0.53.0"] [refactor-nrepl "3.9.0"]]) diff --git a/doc/modules/ROOT/pages/basics/middleware_setup.adoc b/doc/modules/ROOT/pages/basics/middleware_setup.adoc index b75f884ed..81663a1e8 100644 --- a/doc/modules/ROOT/pages/basics/middleware_setup.adoc +++ b/doc/modules/ROOT/pages/basics/middleware_setup.adoc @@ -20,14 +20,14 @@ Use the convenient plugin for defaults, either in your project's [source,clojure] ---- -:plugins [[cider/cider-nrepl "0.52.1"]] +:plugins [[cider/cider-nrepl "0.53.0"]] ---- A minimal `profiles.clj` for CIDER would be: [source,clojure] ---- -{:repl {:plugins [[cider/cider-nrepl "0.52.1"]]}} +{:repl {:plugins [[cider/cider-nrepl "0.53.0"]]}} ---- WARNING: Be careful not to place this in the `:user` profile, as this way CIDER's @@ -43,11 +43,11 @@ run `cider-connect` or `cider-connect-cljs`. [source,clojure] ---- - :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.52.1"}} + :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.53.0"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware]"]} :cider-cljs {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.339"} - cider/cider-nrepl {:mvn/version "0.52.1"} + cider/cider-nrepl {:mvn/version "0.53.0"} cider/piggieback {:mvn/version "0.6.0"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware,cider.piggieback/wrap-cljs-repl]"]} @@ -66,7 +66,7 @@ NOTE: Make sure you're using https://github.com/clojurephant/clojurephant[Clojur ---- dependencies { devImplementation 'nrepl:nrepl:0.9.0' - devImplementation 'cider:cider-nrepl:0.52.1' + devImplementation 'cider:cider-nrepl:0.53.0' } tasks.named('clojureRepl') { diff --git a/doc/modules/ROOT/pages/basics/up_and_running.adoc b/doc/modules/ROOT/pages/basics/up_and_running.adoc index 7b5a65dd8..0d9f3a362 100644 --- a/doc/modules/ROOT/pages/basics/up_and_running.adoc +++ b/doc/modules/ROOT/pages/basics/up_and_running.adoc @@ -72,7 +72,7 @@ simple - CIDER passes the extra dependencies and nREPL configuration to your build tool in the command it runs to start the nREPL server. Here's how this looks for `tools.deps`: - $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.1"} cider/cider-nrepl {:mvn/version "0.52.1"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' + $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.1"} cider/cider-nrepl {:mvn/version "0.53.0"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' TIP: If you don't want `cider-jack-in` to inject dependencies automatically, set `cider-inject-dependencies-at-jack-in` to `nil`. Note that you'll have to setup @@ -332,7 +332,7 @@ It is also possible for plain `clj`, although the command is somewhat longer: [source,sh] ---- -$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.52.1"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" +$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.53.0"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" ---- Alternatively, you can start nREPL either manually or using the facilities diff --git a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc index 7e5f7c850..997f20030 100644 --- a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc +++ b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc @@ -62,7 +62,7 @@ And connect to it with `cider-connect`. ...For that to work, `shadow-cljs.edn` contents like the following are assumed: ```clj - :dependencies [[cider/cider-nrepl "0.52.1"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) + :dependencies [[cider/cider-nrepl "0.53.0"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) [refactor-nrepl/refactor-nrepl "3.9.0"]] ;; refactor-nrepl is optional :nrepl {:middleware [cider.nrepl/cider-middleware ;; it's advisable to explicitly add this middleware. It's automatically added by shadow-cljs (if available in the classpath), unless `:nrepl {:cider false}` diff --git a/doc/modules/ROOT/pages/cljs/up_and_running.adoc b/doc/modules/ROOT/pages/cljs/up_and_running.adoc index 52d16b245..ab117cb34 100644 --- a/doc/modules/ROOT/pages/cljs/up_and_running.adoc +++ b/doc/modules/ROOT/pages/cljs/up_and_running.adoc @@ -61,7 +61,7 @@ or in `build.gradle`: ---- dependencies { devImplementation 'nrepl:nrepl:1.3.1' - devImplementation 'cider:cider-nrepl:0.52.1' + devImplementation 'cider:cider-nrepl:0.53.0' devImplementation 'cider:cider-piggieback:0.5.3' } diff --git a/test/cider-tests.el b/test/cider-tests.el index e3eb0403d..8d0961e4e 100644 --- a/test/cider-tests.el +++ b/test/cider-tests.el @@ -144,7 +144,7 @@ (describe "when there is a single dependency" (before-each (setq-local cider-injected-nrepl-version "0.9.0") - (setq-local cider-injected-middleware-version "0.52.1") + (setq-local cider-injected-middleware-version "0.53.0") (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t) @@ -155,7 +155,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.52.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.53.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -169,7 +169,7 @@ "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.52.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.53.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -182,7 +182,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure foo.bar/baz]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.52.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.53.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -196,7 +196,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.52.1") + (shell-quote-argument "cider/cider-nrepl:0.53.0") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -206,7 +206,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.52.1") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.53.0") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -223,7 +223,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.52.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.53.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -237,7 +237,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.52.1") + (shell-quote-argument "cider/cider-nrepl:0.53.0") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -259,7 +259,7 @@ :to-equal (concat "-o -U update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.52.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.53.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -271,7 +271,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.52.1") + (shell-quote-argument "cider/cider-nrepl:0.53.0") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -280,7 +280,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.52.1") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.53.0") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -295,14 +295,14 @@ (setq-local cider-jack-in-nrepl-middlewares '(("refactor-nrepl.middleware/wrap-refactor" :predicate middlewares-predicate) "cider.nrepl/cider-middleware" ("another/middleware")))) (it "includes plugins whose predicates return true" (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.52.1")))) + :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.53.0")))) (it "includes middlewares whose predicates return true" (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware" "another/middleware"))) (it "ignores plugins whose predicates return false" (spy-on 'plugins-predicate :and-return-value nil) (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("cider/cider-nrepl" "0.52.1"))) + :to-equal '(("cider/cider-nrepl" "0.53.0"))) (spy-on 'middlewares-predicate :and-return-value nil) (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("cider.nrepl/cider-middleware" "another/middleware"))) @@ -331,7 +331,7 @@ :and-return-value '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware")) (spy-on 'cider-jack-in-normalized-lein-plugins :and-return-value '(("refactor-nrepl" "2.0.0") - ("cider/cider-nrepl" "0.52.1") + ("cider/cider-nrepl" "0.53.0") ("mx.cider/lein-enrich-classpath" "1.19.3"))) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t)) @@ -342,7 +342,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.52.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.53.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -361,7 +361,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.52.1") + (shell-quote-argument "cider/cider-nrepl:0.53.0") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -456,7 +456,7 @@ (setq-local cider-jack-in-dependencies nil) (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.52.1\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.53.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) @@ -471,7 +471,7 @@ (it "allows specifying custom aliases with `cider-clojure-cli-aliases`" (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.52.1\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.53.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:dev:test:cider/nrepl") ""))) (setq-local cider-jack-in-dependencies nil) @@ -489,7 +489,7 @@ (it (format "should remove duplicates, yielding the same result (for %S command invocation)" command) ;; repeat the same test for PowerShell too (let ((expected (string-join `("-Sdeps " - ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.52.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" + ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.53.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" command) " -M:dev:test:cider/nrepl") ""))) @@ -499,7 +499,7 @@ :to-equal expected)))) (it "handles aliases correctly" (let ((expected (string-join `("-Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.52.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.53.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -527,7 +527,7 @@ :to-equal expected))))) (it "allows for global options" (let ((expected (string-join `("-J-Xverify:none -Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.52.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.53.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -538,7 +538,7 @@ (setq-local cider-jack-in-dependencies '(("org.clojure/tools.deps" (("git/sha" . "6ae2b6f71773de7549d7f22759e8b09fec27f0d9") ("git/url" . "https://github.com/clojure/tools.deps/"))))) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.52.1\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.53.0\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) From 317c1644f3ff093651c73fd71b16023794256bb5 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Tue, 18 Mar 2025 00:07:14 +0200 Subject: [PATCH 096/149] [eval] Refactor exception handling logic and overlay display --- CHANGELOG.md | 1 + cider-eval.el | 407 +++++++++++++----------------- cider-stacktrace.el | 7 +- nrepl-client.el | 2 +- test/cider-error-parsing-tests.el | 61 +---- 5 files changed, 182 insertions(+), 296 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b32c778f7..fb5419278 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ - [#3777](https://github.com/clojure-emacs/cider/issues/3777): Inspector no longer displays parsed Javadoc for Java classes and members. - [#3784](https://github.com/clojure-emacs/cider/issues/3784): Inspector: make point less erratic when navigating between inspector screens. - [#3790](https://github.com/clojure-emacs/cider/issues/3790): Stacktrace: show messages and data for all exception causes by default. +- [#3789](https://github.com/clojure-emacs/cider/issues/3789): Refactor and simplify exception handling. ## 1.17.1 (2025-02-25) diff --git a/cider-eval.el b/cider-eval.el index 51bb0ca2d..15790f70c 100644 --- a/cider-eval.el +++ b/cider-eval.el @@ -245,17 +245,18 @@ currently selected buffer." '(t always only-in-repl) '(t always except-in-repl))))) -(defun cider-new-error-buffer (&optional mode error-types) +(defun cider-new-error-buffer (&optional mode error-types dont-show) "Return an empty error buffer using MODE. When deciding whether to display the buffer, takes into account not only the value of `cider-show-error-buffer' and the currently selected buffer but also the ERROR-TYPES of the error, which is checked against the -`cider-stacktrace-suppressed-errors' set. +`cider-stacktrace-suppressed-errors' set, and the value of DONT-SHOW. When deciding whether to select the buffer, takes into account the value of `cider-auto-select-error-buffer'." (if (and (cider--show-error-buffer-p) + (not dont-show) (not (cider-stacktrace-some-suppressed-errors-p error-types))) (cider-popup-buffer cider-error-buffer cider-auto-select-error-buffer mode 'ancillary) (cider-make-popup-buffer cider-error-buffer mode 'ancillary))) @@ -294,13 +295,16 @@ When clojure.stracktrace is not present." (cider-nrepl-sync-request:eval "(println (ex-data *e))"))) -(defun cider--render-stacktrace-causes (causes &optional error-types) +(defun cider--render-stacktrace-causes (causes &optional error-types is-compilation) "If CAUSES is non-nil, render its contents into a new error buffer. Optional argument ERROR-TYPES contains a list which should determine the -op/situation that originated this error." +op/situation that originated this error. +If IS-COMPILATION is true, render the stacktrace into the error buffer but +don't bring it forward." (when causes - (let ((error-buffer (cider-new-error-buffer #'cider-stacktrace-mode error-types))) - (cider-stacktrace-render error-buffer (reverse causes) error-types)))) + (let ((error-buffer (cider-new-error-buffer #'cider-stacktrace-mode + error-types is-compilation))) + (cider-stacktrace-render error-buffer causes error-types)))) (defconst cider-clojure-compilation-error-phases-default-value '("read-source" @@ -336,40 +340,79 @@ https://clojure.org/reference/repl_and_main#_at_repl" cider-clojure-compilation-error-phases-default-value cider-clojure-compilation-error-phases)) -(defun cider--handle-stacktrace-response (response causes ex-phase) - "Handle stacktrace RESPONSE, aggregate the result into CAUSES, honor EX-PHASE. -If RESPONSE contains a cause, cons it onto CAUSES and return that. If -RESPONSE is the final message (i.e. it contains a status), render CAUSES -into a new error buffer." - (nrepl-dbind-response response (class msg status type) - (cond ((and (member "notification" status) causes) - (nrepl-notify msg type)) - (class (cons response causes)) - (status - (unless (member ex-phase (cider-clojure-compilation-error-phases)) - (cider--render-stacktrace-causes causes)))))) - -(defun cider-default-err-op-handler () - "Display the last exception, with middleware support." +(defun cider--display-error-unobtrusively (buffer err) + "Display ERR as a minibuffer message and/or as a temporary overlay in BUFFER." + (let ((cider-result-use-clojure-font-lock nil) + (trimmed-err (funcall cider-inline-error-message-function err))) + (with-current-buffer buffer + (cider--display-interactive-eval-result trimmed-err + 'error + (save-excursion (end-of-line) (point)) + 'cider-error-overlay-face)))) + +(defun cider--handle-stacktrace-response (causes ex-phase source-buffer) + "Handle stacktrace response provided as aggregated CAUSES. +For EX-PHASE that represents compilation errors, don't show *cider-error* +buffer but render an error overlay instead in the SOURCE-BUFFER. +For others, pop up *cider-error* buffer." + ;; Handle special "notification" server messages. + (dolist (cause causes) + (nrepl-dbind-response cause (msg status type) + (when (member "notification" status) + (nrepl-notify msg type)))) + ;; Render stacktrace in *cider-error* buffer if it is a runtime error. + (cider--render-stacktrace-causes + causes nil (member ex-phase (cider-clojure-compilation-error-phases))) + ;; If the error is a compilation error (which we normally don't show + ;; *cider-error* buffer for), or the error buffer is disabled, compensate for + ;; the lack of info with a overlay error. Verify that the provided buffer is + ;; not a REPL buffer but either visits a Clojure source file or is + ;; e.g. cider-scratch. + (when (and source-buffer + (with-current-buffer source-buffer + (or (cider-clojure-major-mode-p) + (cider-clojurec-major-mode-p) + (cider-clojurescript-major-mode-p))) + (or (member ex-phase (cider-clojure-compilation-error-phases)) + (not (cider--show-error-buffer-p)) + (not (cider-connection-has-capability-p 'jvm-compilation-errors)))) + ;; Search if any of the received causes contains a "triage" field. Append it + ;; to the inline error message if found. + (let* ((triage (seq-some (lambda (cause) (nrepl-dict-get cause "triage")) causes)) + (err-message (mapconcat (lambda (cause) (nrepl-dict-get cause "message")) + causes "\n")) + (err-message (if triage + (concat err-message "\n" triage) + err-message))) + (cider--display-error-unobtrusively source-buffer err-message)))) + +(defun cider--analyze-last-stacktrace (callback) + "Send `analyze-last-stacktrace' to server and invoke CALLBACK on the result. +Accumulates a list of causes and then calls CALLBACK on causes and phase." ;; Causes are returned as a series of messages, which we aggregate in `causes' (let (causes ex-phase) (cider-nrepl-send-request - `("op" "analyze-last-stacktrace" - ,@(cider--nrepl-print-request-plist fill-column)) + `("op" "analyze-last-stacktrace") (lambda (response) - (nrepl-dbind-response response (phase) - (when phase - (setq ex-phase phase))) - ;; While the return value of `cider--handle-stacktrace-response' is not - ;; meaningful for the last message, we do not need the value of `causes' - ;; after it has been handled, so it's fine to set it unconditionally here - (setq causes (cider--handle-stacktrace-response response causes ex-phase)))))) - -(defun cider-default-err-handler () + (nrepl-dbind-response response (status phase) + (if (member "done" status) + (funcall callback causes ex-phase) + (when phase + (setq ex-phase phase)) + (setq causes (append causes (list response))))))))) + +(defun cider-default-err-op-handler (buffer) + "Display the last exception, with middleware support. +Show error overlay in BUFFER if needed." + (cider--analyze-last-stacktrace + (lambda (causes phase) (cider--handle-stacktrace-response causes phase buffer)))) + +(defun cider-default-err-handler (&optional buffer) "This function determines how the error buffer is shown. -It delegates the actual error content to the eval or op handler." +It delegates the actual error content to the eval or op handler. +Show error overlay in BUFFER if needed." (cond ((cider-nrepl-op-supported-p "analyze-last-stacktrace") - (cider-default-err-op-handler)) + (cider-default-err-op-handler buffer)) ((cider-library-present-p "clojure.stacktrace") (cider-default-err-eval-handler)) (t (cider-default-err-eval-print-handler)))) @@ -410,8 +453,6 @@ It delegates the actual error content to the eval or op handler." " - ") "Regexp matching various non-error messages, e.g. reflection warnings.") -;; Please keep this in sync with `cider-clojure-compilation-error-regexp', -;; which is a subset of these regexes. (defconst cider-clojure-compilation-regexp (rx-to-string `(seq bol (or ,cider--clojure-warning @@ -422,17 +463,6 @@ It delegates the actual error content to the eval or op handler." \"Syntax error compiling at (src/workspace_service.clj:227:3).\" \"Unexpected error (ClassCastException) macroexpanding defmulti at (src/haystack/parser.cljc:21:1).\"") -(defconst cider-clojure-compilation-error-regexp - (rx-to-string - `(seq bol ,cider--clojure-1.10-error) - 'nogroup) - "Like `cider-clojure-compilation-regexp', -but excluding warnings such as reflection warnings. - -A few example values that will match: -\"Syntax error compiling at (src/workspace_service.clj:227:3).\" -\"Unexpected error (ClassCastException) macroexpanding defmulti at (src/haystack/parser.cljc:21:1).\"") - (defconst cider--clojure-execution-error `(sequence (or "Error reading eval result " ; phase = :read-eval-result @@ -448,18 +478,6 @@ A few example values that will match: " " ,cider--clojure-1.10-location)) -(defconst cider-clojure-runtime-error-regexp - (rx-to-string - `(seq bol (or ,cider--clojure-execution-error - ,cider--clojure-spec-execution-error)) - 'nogroup) - "Matches runtime errors, as oppsed to compile-time/macroexpansion-time errors. - -A few example values that will match: - -\"Execution error (ArithmeticException) at foo/foo (src/haystack/parser.cljc:4).\" -\"Execution error - invalid arguments to foo/bar at (src/haystack/parser.cljc:4).\"") - (defconst cider-module-info-regexp (rx " (" (minimal-match (one-or-more anything)) @@ -526,45 +544,47 @@ until we find a delimiters that's not inside a string." (nth 3 (syntax-ppss))) (backward-char)))) -(defun cider--find-last-error-location (message) - "Return the location (begin end buffer) from the Clojure error MESSAGE. +(defun cider--find-last-error-location (error-info) + "Return the location (begin end buffer) from the parsed ERROR-INFO. If location could not be found, return nil." (save-excursion - (let ((info (cider-extract-error-info cider-compilation-regexp message))) - (when info - (let ((file (nth 0 info)) - (line (nth 1 info)) - (col (nth 2 info))) - (unless (or (not (stringp file)) - (cider--tooling-file-p file)) - (when-let* ((buffer (cider-find-file file))) - (with-current-buffer buffer - (save-excursion - (save-restriction - (widen) - (goto-char (point-min)) - (forward-line (1- line)) - (move-to-column (or col 0)) - ;; if this condition is false, it means that `col` was a spuriously large value, - ;; therefore the whole calculation should be discarded: - (when (or (not col) ;; if there's no col info, we cannot judge if it's spurious/not - ;; (current-column) never goes past the last column in the actual line, - ;; so if it's <, then the message had spurious info: - (>= (1+ (current-column)) - col)) - (let ((begin (progn (if col (cider--goto-expression-start) (back-to-indentation)) - (point))) - (end (progn (if col (forward-list) (move-end-of-line nil)) - (point)))) - (list begin end buffer))))))))))))) + (when error-info + (let ((file (nth 0 error-info)) + (line (nth 1 error-info)) + (col (nth 2 error-info))) + (unless (or (not (stringp file)) + (cider--tooling-file-p file)) + (when-let* ((buffer (cider-find-file file))) + (with-current-buffer buffer + (save-excursion + (save-restriction + (widen) + (goto-char (point-min)) + (forward-line (1- line)) + (move-to-column (or col 0)) + ;; if this condition is false, it means that `col` was a spuriously large value, + ;; therefore the whole calculation should be discarded: + (when (or (not col) ;; if there's no col info, we cannot judge if it's spurious/not + ;; (current-column) never goes past the last column in the actual line, + ;; so if it's <, then the message had spurious info: + (>= (1+ (current-column)) + col)) + (let ((begin (progn (if col (cider--goto-expression-start) (back-to-indentation)) + (point))) + (end (progn (if col (forward-list) (move-end-of-line nil)) + (point)))) + (list begin end buffer)))))))))))) (defun cider-handle-compilation-errors (message eval-buffer &optional no-jump) - "Highlight and jump to compilation error extracted from MESSAGE, honor NO-JUMP. -EVAL-BUFFER is the buffer that was current during user's interactive -evaluation command. Honor `cider-auto-jump-to-error'." - (when-let* ((loc (cider--find-last-error-location message)) - (overlay (make-overlay (nth 0 loc) (nth 1 loc) (nth 2 loc))) - (info (cider-extract-error-info cider-compilation-regexp message))) + "Parse a possible compiler error MESSAGE and highlight it in EVAL-BUFFER. +If MESSAGE is an error or warning from the compiler, parse the location +data from the message and put an overlay on the given location in the code +buffer. +If `cider-auto-jump-to-error' is enabled and not NO-JUMP, jump to the +parsed location." + (when-let* ((info (cider-extract-error-info cider-compilation-regexp message)) + (loc (cider--find-last-error-location info)) + (overlay (make-overlay (nth 0 loc) (nth 1 loc) (nth 2 loc)))) (let* ((face (nth 3 info)) (note (nth 4 info)) (auto-jump (unless no-jump @@ -593,17 +613,16 @@ evaluation command. Honor `cider-auto-jump-to-error'." ;;; Interactive evaluation handlers -(defun cider-insert-eval-handler (&optional buffer bounds source-buffer on-success-callback) +(defun cider-insert-eval-handler (&optional buffer _bounds source-buffer on-success-callback) "Make an nREPL evaluation handler for the BUFFER, -BOUNDS representing the buffer bounds of the evaled input, +_BOUNDS representing the buffer bounds of the evaled input, SOURCE-BUFFER the original buffer, and ON-SUCCESS-CALLBACK an optional callback. The handler simply inserts the result value in BUFFER." (let ((eval-buffer (current-buffer)) (res "") - (failed nil) - (error-phase-requested nil)) ;; avoid requesting the phase more than once - can happen if there are errors during the phase nrepl sync request. + (failed nil)) (nrepl-make-response-handler (or buffer eval-buffer) ;; value handler: (lambda (_buffer value) @@ -616,27 +635,20 @@ The handler simply inserts the result value in BUFFER." (cider-repl-emit-interactive-stdout out)) ;; stderr handler: (lambda (_buffer err) - (setq failed t) - (when (and source-buffer - (listp bounds)) ;; if it's a list, it represents bounds, otherwise it's a string (code) and we can't display the overlay - (with-current-buffer source-buffer - (let* ((phase (if error-phase-requested - nil - (setq error-phase-requested t) - (cider--error-phase-of-last-exception buffer))) - (end (or (car-safe (cdr-safe bounds)) bounds)) - (end (when end - (copy-marker end)))) - (cider--maybe-display-error-as-overlay phase err end)))) - - (cider-handle-compilation-errors err eval-buffer)) + (cider-repl-emit-interactive-stderr err) + ;; Don't jump + (cider-handle-compilation-errors err eval-buffer t)) ;; done handler: (lambda (_buffer) (when cider-eval-register (set-register cider-eval-register res)) (when (and (not failed) on-success-callback) - (funcall on-success-callback)))))) + (funcall on-success-callback))) + ;; eval-error handler + (lambda (_buffer) + (setq failed t) + (funcall nrepl-err-handler source-buffer))))) (defun cider--emit-interactive-eval-output (output repl-emit-function) "Emit output resulting from interactive code evaluation. @@ -681,21 +693,6 @@ REPL buffer. This is controlled via (cider--make-fringe-overlay (point))) (scan-error nil))))) -(defun cider--error-phase-of-last-exception (buffer) - "Returns the :phase of the latest exception associated to BUFFER, if any." - (when (cider-clojure-compilation-error-phases) - (when-let ((conn (with-current-buffer buffer - (cider-current-repl)))) - (when (cider-nrepl-op-supported-p "analyze-last-stacktrace" conn) - (let ((nrepl-sync-request-timeout 4)) ;; ensure that this feature cannot possibly create an overly laggy UX - (when-let* ((result (nrepl-send-sync-request - `("op" "analyze-last-stacktrace" - ,@(cider--nrepl-print-request-plist fill-column)) - conn - 'abort-on-input ;; favor responsiveness over this feature, in case something went wrong. - ))) - (nrepl-dict-get result "phase"))))))) - (defcustom cider-inline-error-message-function #'cider--shorten-error-message "A function that will shorten a given error message, as shown in overlays / the minibuffer (per `cider-use-overlays'). @@ -716,30 +713,6 @@ and the suffix matched by `cider-module-info-regexp'." "") (string-trim))) -(defun cider--maybe-display-error-as-overlay (phase err end) - "Possibly display ERR as an overlay honoring END, -depending on the PHASE." - (when (and (or - ;; if we won't show *cider-error*, because of configuration, the overlay is adequate because it compensates for the lack of info in a compact manner: - (not cider-show-error-buffer) - (not (cider-connection-has-capability-p 'jvm-compilation-errors)) - ;; if we won't show *cider-error*, because of an ignored phase, the overlay is adequate: - (and cider-show-error-buffer - (member phase (cider-clojure-compilation-error-phases)))) - ;; Only show overlays for things that do look like an exception (#3587): - ;; Note: only applicable to JVM Clojure error messages (#3687) - (if (cider-runtime-clojure-p) - (or (string-match-p cider-clojure-runtime-error-regexp err) - (string-match-p cider-clojure-compilation-error-regexp err)) - t)) - ;; Display errors as temporary overlays - (let ((cider-result-use-clojure-font-lock nil) - (trimmed-err (funcall cider-inline-error-message-function err))) - (cider--display-interactive-eval-result trimmed-err - 'error - end - 'cider-error-overlay-face)))) - (declare-function cider-inspect-last-result "cider-inspector") (defun cider-interactive-eval-handler (&optional buffer place) "Make an interactive eval handler for BUFFER. @@ -755,58 +728,48 @@ when `cider-auto-inspect-after-eval' is non-nil." (beg (when beg (copy-marker beg))) (end (when end (copy-marker end))) (fringed nil) - (res "") - (error-phase-requested nil)) ;; avoid requesting the phase more than once - can happen if there are errors during the phase nrepl sync request. - (nrepl-make-response-handler (or buffer eval-buffer) - ;; value handler: - (lambda (_buffer value) - (setq res (concat res value)) - (cider--display-interactive-eval-result res 'value end)) - ;; stdout handler: - (lambda (_buffer out) - (cider-emit-interactive-eval-output out)) - ;; stderr handler: - (lambda (buffer err) - (cider-emit-interactive-eval-err-output err) - - (let ((phase (if error-phase-requested - nil - (setq error-phase-requested t) - (cider--error-phase-of-last-exception buffer)))) - - (cider--maybe-display-error-as-overlay phase err end) - - (cider-handle-compilation-errors err - eval-buffer - ;; we prevent jumping behavior on compilation errors, - ;; because lines tend to be spurious (e.g. 0:0) - ;; and because on compilation errors, normally - ;; the error is 'right there' in the current line - ;; and needs no jumping: - phase))) - ;; done handler: - (lambda (buffer) - (if beg - (unless fringed - (cider--make-fringe-overlays-for-region beg end) - (setq fringed t)) - (cider--make-fringe-overlay end)) - (when (and cider-auto-inspect-after-eval - (boundp 'cider-inspector-buffer) - (windowp (get-buffer-window cider-inspector-buffer 'visible))) - (cider-inspect-last-result) - (select-window (get-buffer-window buffer))) - (when cider-eval-register - (set-register cider-eval-register res)))))) + (res "")) + (nrepl-make-response-handler + (or buffer eval-buffer) + ;; value handler: + (lambda (_buffer value) + (setq res (concat res value)) + (cider--display-interactive-eval-result res 'value end)) + ;; stdout handler: + (lambda (_buffer out) + (cider-emit-interactive-eval-output out)) + ;; stderr handler: + (lambda (_buffer err) + (cider-emit-interactive-eval-err-output err) + (cider-handle-compilation-errors + err eval-buffer + ;; Disable jumping behavior when compiling a single form because + ;; lines tend to be spurious (e.g. 0:0) and the jump brings us to + ;; the beginning of the same form anyway. + t)) + ;; done handler: + (lambda (buffer) + (if beg + (unless fringed + (cider--make-fringe-overlays-for-region beg end) + (setq fringed t)) + (cider--make-fringe-overlay end)) + (when (and cider-auto-inspect-after-eval + (boundp 'cider-inspector-buffer) + (windowp (get-buffer-window cider-inspector-buffer 'visible))) + (cider-inspect-last-result) + (select-window (get-buffer-window buffer))) + (when cider-eval-register + (set-register cider-eval-register res)))))) (defun cider-load-file-handler (&optional buffer done-handler) "Make a load file handler for BUFFER. Optional argument DONE-HANDLER lambda will be run once load is complete." (let ((eval-buffer (current-buffer)) - (res "") - (error-phase-requested nil)) ;; avoid requesting the phase more than once - can happen if there are errors during the phase nrepl sync request. + (res "")) (nrepl-make-response-handler (or buffer eval-buffer) + ;; value (lambda (buffer value) (cider--display-interactive-eval-result value 'value) (when cider-eval-register @@ -815,31 +778,19 @@ Optional argument DONE-HANDLER lambda will be run once load is complete." (with-current-buffer buffer (cider--make-fringe-overlays-for-region (point-min) (point-max)) (run-hooks 'cider-file-loaded-hook)))) + ;; stdout (lambda (_buffer value) (cider-emit-interactive-eval-output value)) + ;; stderr (lambda (_buffer err) (cider-emit-interactive-eval-err-output err) - ;; 1.- Jump to the error line: - (cider-handle-compilation-errors err eval-buffer) - (with-current-buffer eval-buffer - (let* ((phase (if error-phase-requested - nil - (setq error-phase-requested t) - (cider--error-phase-of-last-exception buffer))) - ;; 2.- Calculate the overlay position, which is the point (per the previous jump), - ;; and then end-of-line (for ensuring the overlay will be rendered properly): - (end (save-excursion - (when (equal cider-result-overlay-position 'at-eol) - (end-of-line)) - (point)))) - (cider--maybe-display-error-as-overlay phase err end)))) + (cider-handle-compilation-errors err eval-buffer)) + ;; done (lambda (buffer) (when cider-eval-register (set-register cider-eval-register res)) (when done-handler - (funcall done-handler buffer))) - (lambda () - (funcall nrepl-err-handler))))) + (funcall done-handler buffer)))))) (defun cider-eval-print-handler (&optional buffer) "Make a handler for evaluating and printing result in BUFFER." @@ -926,16 +877,15 @@ COMMENT-POSTFIX is the text to output after the last line." (lambda (_buffer warning) (setq res (concat res warning)))))) -(defun cider-popup-eval-handler (&optional buffer bounds source-buffer) +(defun cider-popup-eval-handler (&optional buffer _bounds _source-buffer) "Make a handler for printing evaluation results in popup BUFFER, -BOUNDS representing the buffer bounds of the evaled input, -and SOURCE-BUFFER the original buffer +_BOUNDS representing the buffer bounds of the evaled input, +and _SOURCE-BUFFER the original buffer This is used by pretty-printing commands." ;; NOTE: cider-eval-register behavior is not implemented here for performance reasons. ;; See https://github.com/clojure-emacs/cider/pull/3162 - (let ((chosen-buffer (or buffer (current-buffer))) - (error-phase-requested nil)) ;; avoid requesting the phase more than once - can happen if there are errors during the phase nrepl sync request. + (let ((chosen-buffer (or buffer (current-buffer)))) (nrepl-make-response-handler chosen-buffer ;; value handler: @@ -945,23 +895,12 @@ This is used by pretty-printing commands." (lambda (_buffer out) (cider-emit-interactive-eval-output out)) ;; stderr handler: - (lambda (buffer err) - (cider-emit-interactive-eval-err-output err) - (when (and source-buffer - (listp bounds)) ;; if it's a list, it represents bounds, otherwise it's a string (code) and we can't display the overlay - (with-current-buffer source-buffer - (let* ((phase (if error-phase-requested - nil - (setq error-phase-requested t) - (cider--error-phase-of-last-exception buffer))) - (end (or (car-safe (cdr-safe bounds)) bounds)) - (end (when end - (copy-marker end)))) - (cider--maybe-display-error-as-overlay phase err end))))) + (lambda (_buffer err) + (cider-emit-interactive-eval-err-output err)) ;; done handler: nil ;; eval-error handler: - (lambda () + (lambda (buffer) (when (and (buffer-live-p chosen-buffer) (member (buffer-name chosen-buffer) cider-ancillary-buffers)) @@ -969,7 +908,7 @@ This is used by pretty-printing commands." (cider-popup-buffer-quit-function t))) ;; also call the default nrepl-err-handler, so that our custom behavior doesn't void the base behavior: (when nrepl-err-handler - (funcall nrepl-err-handler))) + (funcall nrepl-err-handler buffer))) ;; content type handler: nil ;; truncated handler: diff --git a/cider-stacktrace.el b/cider-stacktrace.el index 644f9c38c..cd86bdfbe 100644 --- a/cider-stacktrace.el +++ b/cider-stacktrace.el @@ -829,7 +829,7 @@ the NAME. The whole group is prefixed by string INDENT." "Emit into BUFFER the CAUSE NUM, exception class, message, data, and NOTE, make INSPECT-INDEX actionable if present." (with-current-buffer buffer - (nrepl-dbind-response cause (class message data spec stacktrace) + (nrepl-dbind-response cause (class message data spec triage stacktrace) (let ((indent " ") (class-face 'cider-stacktrace-error-class-face) (message-face 'cider-stacktrace-error-message-face)) @@ -855,6 +855,11 @@ make INSPECT-INDEX actionable if present." (propertize (or message "(No message)") 'font-lock-face message-face) indent t)) + (when triage + (insert "\n") + (cider-stacktrace-emit-indented + (propertize (string-trim triage) 'font-lock-face message-face) + indent nil)) (when spec (insert "\n") (cider-stacktrace--emit-spec-problems spec (concat indent " "))) diff --git a/nrepl-client.el b/nrepl-client.el index d5a5a110d..b438cfe37 100644 --- a/nrepl-client.el +++ b/nrepl-client.el @@ -886,7 +886,7 @@ the corresponding type of response." (when (member "interrupted" status) (message "Evaluation interrupted.")) (when (member "eval-error" status) - (funcall (or eval-error-handler nrepl-err-handler))) + (funcall (or eval-error-handler nrepl-err-handler) buffer)) (when (member "namespace-not-found" status) (message "Namespace `%s' not found." ns)) (when (member "need-input" status) diff --git a/test/cider-error-parsing-tests.el b/test/cider-error-parsing-tests.el index 7400b6525..cc5e624a7 100644 --- a/test/cider-error-parsing-tests.el +++ b/test/cider-error-parsing-tests.el @@ -125,7 +125,7 @@ (match-string 1 clojure-compiler-warning)) :to-equal "warning"))) ;; FIXME: duplicate spec names - (dolist (regexp (list cider-clojure-compilation-regexp cider-clojure-compilation-error-regexp)) + (let ((regexp cider-clojure-compilation-regexp)) (it "Recognizes a clojure-1.10 error message" (let ((clojure-1.10-compiler-error "Syntax error compiling at (src/ardoq/service/workspace_service.clj:227:3).")) (expect clojure-1.10-compiler-error :to-match regexp) @@ -139,65 +139,6 @@ (match-string 2 clojure-1.10-compiler-error)) :to-equal "src/haystack/parser.cljc"))))) -(describe "cider-clojure-runtime-error-regexp" - (it "Recognizes a clojure-1.10 runtime error message" - - ;; Something like "(ArithmeticException)" will be absent for Exception and RuntimeException in particular - (let ((specimen "Execution error at foo/foo (src/haystack/parser.cljc:4).")) - (expect specimen :to-match cider-clojure-runtime-error-regexp) - (expect (progn - (string-match cider-clojure-runtime-error-regexp specimen) - (match-string 2 specimen)) - :to-equal "src/haystack/parser.cljc")) - - (let ((specimen "Execution error (ArithmeticException) at foo/foo (src/haystack/parser.cljc:4).")) - (expect specimen :to-match cider-clojure-runtime-error-regexp) - (expect (progn - (string-match cider-clojure-runtime-error-regexp specimen) - (match-string 2 specimen)) - :to-equal "src/haystack/parser.cljc")) - - ;; without exception class cause-type - (let ((specimen "Execution error at (src/haystack/parser.cljc:4).")) - (expect specimen :to-match cider-clojure-runtime-error-regexp) - (expect (progn - (string-match cider-clojure-runtime-error-regexp specimen) - (match-string 2 specimen)) - :to-equal "src/haystack/parser.cljc")) - - ;; without foo/foo symbol - (let ((specimen "Execution error (ArithmeticException) at (src/haystack/parser.cljc:4).")) - (expect specimen :to-match cider-clojure-runtime-error-regexp) - (expect (progn - (string-match cider-clojure-runtime-error-regexp specimen) - (match-string 2 specimen)) - :to-equal "src/haystack/parser.cljc"))) - - (it "Recognizes a clojure-1.10 runtime spec validation error message" - (let ((specimen "Execution error - invalid arguments to foo/bar at (src/haystack/parser.cljc:4).")) - (expect specimen :to-match cider-clojure-runtime-error-regexp) - (expect (progn - (string-match cider-clojure-runtime-error-regexp specimen) - (match-string 2 specimen)) - :to-equal "src/haystack/parser.cljc"))) - - ;; Java source locations may be negative (#3687) - (it "Recognizes an error thrown from a java source file" - (let ((specimen "Execution error (FileNotFoundException) at java.io.FileInputStream/open0 (FileInputStream.java:-2).")) - (expect specimen :to-match cider-clojure-runtime-error-regexp) - (expect (progn - (string-match cider-clojure-runtime-error-regexp specimen) - (match-string 2 specimen)) - :to-equal "FileInputStream.java"))) - - (it "Recognizes errors thrown during the result printing phase" - (let ((specimen "Error printing return value (ClassCastException) at clojure.core/file-seq$fn (core.clj:4997).")) - (expect specimen :to-match cider-clojure-runtime-error-regexp) - (expect (progn - (string-match cider-clojure-runtime-error-regexp specimen) - (match-string 2 specimen)) - :to-equal "core.clj")))) - (describe "cider-module-info-regexp" (it "Matches module info provided by Java" (expect " (java.lang.Long is in module java.base of loader 'bootstrap'; clojure.lang.IObj is in unnamed module of loader 'app')" From ee6ad0ed2af71d6564d255d897e73261548c7914 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Wed, 26 Mar 2025 15:20:02 +0200 Subject: [PATCH 097/149] Bump cider-nrepl to 0.53.1 --- CHANGELOG.md | 2 +- cider.el | 2 +- dev/docker-sample-project/project.clj | 2 +- dev/tramp-sample-project/project.clj | 2 +- .../ROOT/pages/basics/middleware_setup.adoc | 10 ++--- .../ROOT/pages/basics/up_and_running.adoc | 4 +- doc/modules/ROOT/pages/cljs/shadow-cljs.adoc | 2 +- .../ROOT/pages/cljs/up_and_running.adoc | 2 +- test/cider-tests.el | 44 +++++++++---------- 9 files changed, 35 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fb5419278..08dd68d98 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ ### Changes - [#3782](https://github.com/clojure-emacs/cider/issues/3782): **(Breaking)** Drop official support for Emacs 26. -- Bump the injected `cider-nrepl` to [0.53.0](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0530-2025-03-19). +- Bump the injected `cider-nrepl` to [0.53.1](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0531-2025-03-26). - Info: recognize printed Java classes/methods and munged Clojure functions in stacktrace outputs. - Inspector: add dedicated view for Exceptions. - Stop vendoring Haystack dependency. diff --git a/cider.el b/cider.el index 11c81e64d..1ad952ff5 100644 --- a/cider.el +++ b/cider.el @@ -573,7 +573,7 @@ the artifact.") Used when `cider-jack-in-auto-inject-clojure' is set to `latest'.") -(defconst cider-required-middleware-version "0.53.0" +(defconst cider-required-middleware-version "0.53.1" "The CIDER nREPL version that's known to work properly with CIDER.") (defcustom cider-injected-middleware-version cider-required-middleware-version diff --git a/dev/docker-sample-project/project.clj b/dev/docker-sample-project/project.clj index 15694e7e1..ba3b18322 100644 --- a/dev/docker-sample-project/project.clj +++ b/dev/docker-sample-project/project.clj @@ -2,4 +2,4 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.53.0"]]) + :plugins [[cider/cider-nrepl "0.53.1"]]) diff --git a/dev/tramp-sample-project/project.clj b/dev/tramp-sample-project/project.clj index 048c3682f..bc6f64775 100644 --- a/dev/tramp-sample-project/project.clj +++ b/dev/tramp-sample-project/project.clj @@ -2,5 +2,5 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.53.0"] + :plugins [[cider/cider-nrepl "0.53.1"] [refactor-nrepl "3.9.0"]]) diff --git a/doc/modules/ROOT/pages/basics/middleware_setup.adoc b/doc/modules/ROOT/pages/basics/middleware_setup.adoc index 81663a1e8..36202e26b 100644 --- a/doc/modules/ROOT/pages/basics/middleware_setup.adoc +++ b/doc/modules/ROOT/pages/basics/middleware_setup.adoc @@ -20,14 +20,14 @@ Use the convenient plugin for defaults, either in your project's [source,clojure] ---- -:plugins [[cider/cider-nrepl "0.53.0"]] +:plugins [[cider/cider-nrepl "0.53.1"]] ---- A minimal `profiles.clj` for CIDER would be: [source,clojure] ---- -{:repl {:plugins [[cider/cider-nrepl "0.53.0"]]}} +{:repl {:plugins [[cider/cider-nrepl "0.53.1"]]}} ---- WARNING: Be careful not to place this in the `:user` profile, as this way CIDER's @@ -43,11 +43,11 @@ run `cider-connect` or `cider-connect-cljs`. [source,clojure] ---- - :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.53.0"}} + :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.53.1"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware]"]} :cider-cljs {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.339"} - cider/cider-nrepl {:mvn/version "0.53.0"} + cider/cider-nrepl {:mvn/version "0.53.1"} cider/piggieback {:mvn/version "0.6.0"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware,cider.piggieback/wrap-cljs-repl]"]} @@ -66,7 +66,7 @@ NOTE: Make sure you're using https://github.com/clojurephant/clojurephant[Clojur ---- dependencies { devImplementation 'nrepl:nrepl:0.9.0' - devImplementation 'cider:cider-nrepl:0.53.0' + devImplementation 'cider:cider-nrepl:0.53.1' } tasks.named('clojureRepl') { diff --git a/doc/modules/ROOT/pages/basics/up_and_running.adoc b/doc/modules/ROOT/pages/basics/up_and_running.adoc index 0d9f3a362..16a82ec96 100644 --- a/doc/modules/ROOT/pages/basics/up_and_running.adoc +++ b/doc/modules/ROOT/pages/basics/up_and_running.adoc @@ -72,7 +72,7 @@ simple - CIDER passes the extra dependencies and nREPL configuration to your build tool in the command it runs to start the nREPL server. Here's how this looks for `tools.deps`: - $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.1"} cider/cider-nrepl {:mvn/version "0.53.0"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' + $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.1"} cider/cider-nrepl {:mvn/version "0.53.1"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' TIP: If you don't want `cider-jack-in` to inject dependencies automatically, set `cider-inject-dependencies-at-jack-in` to `nil`. Note that you'll have to setup @@ -332,7 +332,7 @@ It is also possible for plain `clj`, although the command is somewhat longer: [source,sh] ---- -$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.53.0"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" +$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.53.1"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" ---- Alternatively, you can start nREPL either manually or using the facilities diff --git a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc index 997f20030..6964ec809 100644 --- a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc +++ b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc @@ -62,7 +62,7 @@ And connect to it with `cider-connect`. ...For that to work, `shadow-cljs.edn` contents like the following are assumed: ```clj - :dependencies [[cider/cider-nrepl "0.53.0"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) + :dependencies [[cider/cider-nrepl "0.53.1"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) [refactor-nrepl/refactor-nrepl "3.9.0"]] ;; refactor-nrepl is optional :nrepl {:middleware [cider.nrepl/cider-middleware ;; it's advisable to explicitly add this middleware. It's automatically added by shadow-cljs (if available in the classpath), unless `:nrepl {:cider false}` diff --git a/doc/modules/ROOT/pages/cljs/up_and_running.adoc b/doc/modules/ROOT/pages/cljs/up_and_running.adoc index ab117cb34..2f7bc6f73 100644 --- a/doc/modules/ROOT/pages/cljs/up_and_running.adoc +++ b/doc/modules/ROOT/pages/cljs/up_and_running.adoc @@ -61,7 +61,7 @@ or in `build.gradle`: ---- dependencies { devImplementation 'nrepl:nrepl:1.3.1' - devImplementation 'cider:cider-nrepl:0.53.0' + devImplementation 'cider:cider-nrepl:0.53.1' devImplementation 'cider:cider-piggieback:0.5.3' } diff --git a/test/cider-tests.el b/test/cider-tests.el index 8d0961e4e..3e3f8301c 100644 --- a/test/cider-tests.el +++ b/test/cider-tests.el @@ -144,7 +144,7 @@ (describe "when there is a single dependency" (before-each (setq-local cider-injected-nrepl-version "0.9.0") - (setq-local cider-injected-middleware-version "0.53.0") + (setq-local cider-injected-middleware-version "0.53.1") (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t) @@ -155,7 +155,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.53.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.53.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -169,7 +169,7 @@ "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.53.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.53.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -182,7 +182,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure foo.bar/baz]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.53.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.53.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -196,7 +196,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.53.0") + (shell-quote-argument "cider/cider-nrepl:0.53.1") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -206,7 +206,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.53.0") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.53.1") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -223,7 +223,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.53.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.53.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -237,7 +237,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.53.0") + (shell-quote-argument "cider/cider-nrepl:0.53.1") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -259,7 +259,7 @@ :to-equal (concat "-o -U update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.53.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.53.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -271,7 +271,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.53.0") + (shell-quote-argument "cider/cider-nrepl:0.53.1") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -280,7 +280,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.53.0") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.53.1") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -295,14 +295,14 @@ (setq-local cider-jack-in-nrepl-middlewares '(("refactor-nrepl.middleware/wrap-refactor" :predicate middlewares-predicate) "cider.nrepl/cider-middleware" ("another/middleware")))) (it "includes plugins whose predicates return true" (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.53.0")))) + :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.53.1")))) (it "includes middlewares whose predicates return true" (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware" "another/middleware"))) (it "ignores plugins whose predicates return false" (spy-on 'plugins-predicate :and-return-value nil) (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("cider/cider-nrepl" "0.53.0"))) + :to-equal '(("cider/cider-nrepl" "0.53.1"))) (spy-on 'middlewares-predicate :and-return-value nil) (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("cider.nrepl/cider-middleware" "another/middleware"))) @@ -331,7 +331,7 @@ :and-return-value '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware")) (spy-on 'cider-jack-in-normalized-lein-plugins :and-return-value '(("refactor-nrepl" "2.0.0") - ("cider/cider-nrepl" "0.53.0") + ("cider/cider-nrepl" "0.53.1") ("mx.cider/lein-enrich-classpath" "1.19.3"))) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t)) @@ -342,7 +342,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.53.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.53.1\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -361,7 +361,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.53.0") + (shell-quote-argument "cider/cider-nrepl:0.53.1") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -456,7 +456,7 @@ (setq-local cider-jack-in-dependencies nil) (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.53.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.53.1\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) @@ -471,7 +471,7 @@ (it "allows specifying custom aliases with `cider-clojure-cli-aliases`" (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.53.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.53.1\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:dev:test:cider/nrepl") ""))) (setq-local cider-jack-in-dependencies nil) @@ -489,7 +489,7 @@ (it (format "should remove duplicates, yielding the same result (for %S command invocation)" command) ;; repeat the same test for PowerShell too (let ((expected (string-join `("-Sdeps " - ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.53.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" + ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.53.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" command) " -M:dev:test:cider/nrepl") ""))) @@ -499,7 +499,7 @@ :to-equal expected)))) (it "handles aliases correctly" (let ((expected (string-join `("-Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.53.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.53.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -527,7 +527,7 @@ :to-equal expected))))) (it "allows for global options" (let ((expected (string-join `("-J-Xverify:none -Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.53.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.53.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -538,7 +538,7 @@ (setq-local cider-jack-in-dependencies '(("org.clojure/tools.deps" (("git/sha" . "6ae2b6f71773de7549d7f22759e8b09fec27f0d9") ("git/url" . "https://github.com/clojure/tools.deps/"))))) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.53.0\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.53.1\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) From 2865e6652d16da2c5e00921a6cf7bbe80f8d24d2 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Thu, 20 Mar 2025 16:14:18 +0200 Subject: [PATCH 098/149] Remove features that relied on printed exception parsing --- CHANGELOG.md | 3 + cider-log.el | 48 ++--------- cider-stacktrace.el | 50 +++-------- doc/modules/ROOT/pages/debugging/logging.adoc | 21 ++--- .../ROOT/pages/usage/dealing_with_errors.adoc | 86 ------------------- test/cider-stacktrace-tests.el | 54 ------------ 6 files changed, 26 insertions(+), 236 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08dd68d98..f0b650c0c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ ### Changes - [#3782](https://github.com/clojure-emacs/cider/issues/3782): **(Breaking)** Drop official support for Emacs 26. +- [#3793](https://github.com/clojure-emacs/cider/issues/3793): **(Breaking)** Remove features that relied on printed exception parsing: + - `cider-stacktrace-analyze-string` and `cider-stacktrace-analyze-at-point` functions. + - Automatic stacktrace parsing in log viewer. - Bump the injected `cider-nrepl` to [0.53.1](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0531-2025-03-26). - Info: recognize printed Java classes/methods and munged Clojure functions in stacktrace outputs. - Inspector: add dedicated view for Exceptions. diff --git a/cider-log.el b/cider-log.el index fab84ea6d..af57952cb 100644 --- a/cider-log.el +++ b/cider-log.el @@ -215,15 +215,6 @@ It will not be used if the package hasn't been installed." "filters" ,(cider-log-consumer-filters consumer)) (cider-nrepl-send-request callback))) -(defun cider-request:log-analyze-stacktrace (framework appender event &optional callback) - "Analyze the EVENT stacktrace of the APPENDER of FRAMEWORK and call CALLBACK." - (cider-ensure-op-supported "cider/log-analyze-stacktrace") - (thread-first `("op" "cider/log-analyze-stacktrace" - "framework" ,(cider-log-framework-id framework) - "appender" ,(cider-log-appender-id appender) - "event" ,(cider-log-event-id event)) - (cider-nrepl-send-request callback))) - (defun cider-sync-request:log-update-consumer (framework appender consumer) "Add CONSUMER to the APPENDER of FRAMEWORK and call CALLBACK on log events." (cider-ensure-op-supported "cider/log-update-consumer") @@ -690,24 +681,6 @@ The KEYS are used to lookup the values and are joined by SEPARATOR." (seq-doseq (window windows) (set-window-point window (point-max)))))) -(defun cider-log-event--show-stacktrace (framework appender event) - "Show the stacktrace of the log EVENT of FRAMEWORK and APPENDER." - (when (and framework appender event (cider-log-event-exception event)) - (let ((auto-select-buffer cider-auto-select-error-buffer) - (causes nil)) - (cider-request:log-analyze-stacktrace - framework appender event - (lambda (response) - (nrepl-dbind-response response (class status) - (cond (class (setq causes (cons response causes))) - (status (when causes - (cider-stacktrace-render - (cider-popup-buffer cider-error-buffer - auto-select-buffer - #'cider-stacktrace-mode - 'ancillary) - (reverse causes))))))))))) - (defun cider-log-event-next-line (&optional n) "Move N lines forward." (interactive "p") @@ -719,8 +692,6 @@ The KEYS are used to lookup the values and are joined by SEPARATOR." (event (cider-log-event-at-point))) (let ((cider-auto-select-error-buffer nil)) (save-window-excursion - (when (get-buffer-window cider-error-buffer) - (cider-log-event--show-stacktrace framework appender event)) (when (get-buffer-window cider-inspector-buffer) (cider-log-event--inspect framework appender event)) (when (get-buffer-window cider-log-event-buffer) @@ -856,7 +827,6 @@ The KEYS are used to lookup the values and are joined by SEPARATOR." (define-key map (kbd "C-c M-l f") #'cider-log-framework) (define-key map (kbd "C-c M-l i") #'cider-log-info) (define-key map (kbd "C-c M-l l") #'cider-log) - (define-key map (kbd "E") 'cider-log-show-stacktrace) (define-key map (kbd "F") 'cider-log-print-event) (define-key map (kbd "I") 'cider-log-inspect-event) (define-key map (kbd "RET") 'cider-log-inspect-event) @@ -1173,16 +1143,12 @@ the CIDER Inspector and the CIDER stacktrace mode. (cider-log-appender-display-name appender))) ;; Event actions - -(transient-define-suffix cider-log-show-stacktrace (framework appender event) - "Show the stacktrace of the log EVENT of FRAMEWORK and APPENDER." - :description "Show log event stacktrace" - :if #'cider-log-event-at-point - :inapt-if-not (lambda () - (when-let (event (cider-log-event-at-point)) - (cider-log-event-exception event))) - (interactive (list (cider-log--framework) (cider-log--appender) (cider-log-event-at-point))) - (cider-log-event--show-stacktrace framework appender event)) +(defun cider-log-show-stacktrace (&rest _) + "Removed." + (interactive) + (message "This function has been removed. +You can jump to functions and methods directly from the printed stacktrace now.")) +(make-obsolete 'cider-log-show-stacktrace nil "1.18") (transient-define-suffix cider-log-print-event (framework appender event) "Format the log EVENT of FRAMEWORK and APPENDER." @@ -1439,7 +1405,6 @@ the CIDER Inspector and the CIDER stacktrace mode. (cider-log--threads-option)] ["Actions" ("c" cider-log-clear-event-buffer) - ("e" cider-log-show-stacktrace) ("i" cider-log-inspect-event) ("p" cider-log-print-event) ("s" cider-log--do-search-events)] @@ -1497,7 +1462,6 @@ based on `transient-mode'." ["Event Actions" ("eb" cider-log-switch-to-buffer) ("ec" cider-log-clear-event-buffer) - ("ee" cider-log-show-stacktrace) ("ei" cider-log-inspect-event) ("ep" cider-log-print-event) ("es" "Search log events" cider-log-event-search diff --git a/cider-stacktrace.el b/cider-stacktrace.el index cd86bdfbe..55636c8b3 100644 --- a/cider-stacktrace.el +++ b/cider-stacktrace.el @@ -930,47 +930,19 @@ through the `cider-stacktrace-suppressed-errors' variable." (cider-stacktrace-initialize causes) (font-lock-refresh-defaults))) -(defun cider-stacktrace--analyze-stacktrace-op (stacktrace) - "Return the Cider NREPL op to analyze STACKTRACE." - (list "op" "analyze-stacktrace" "stacktrace" stacktrace)) - -(defun cider-stacktrace--analyze-render (causes) - "Render the CAUSES of the stacktrace analysis result." - (let ((buffer (get-buffer-create cider-error-buffer))) - (with-current-buffer buffer - (cider-stacktrace-mode) - (cider-stacktrace-render buffer (reverse causes)) - (display-buffer buffer cider-jump-to-pop-to-buffer-actions)))) - -(defun cider-stacktrace-analyze-string (stacktrace) - "Analyze the STACKTRACE string and show the result." - (when (stringp stacktrace) - (set-text-properties 0 (length stacktrace) nil stacktrace)) - (let (causes) - (cider-nrepl-send-request - `("op" "analyze-stacktrace" - "stacktrace" ,stacktrace - ,@(cider--nrepl-print-request-plist fill-column)) - (lambda (response) - (setq causes (nrepl-dbind-response response (class status) - (cond (class (cons response causes)) - ((and (member "done" status) causes) - (cider-stacktrace--analyze-render causes))))))))) - (defun cider-stacktrace-analyze-at-point () - "Analyze the stacktrace at point." + "Removed." + (interactive) + (message "This function has been removed. +You can jump to functions and methods directly from the printed stacktrace now.")) +(make-obsolete 'cider-stacktrace-analyze-at-point nil "1.18") + +(defun cider-stacktrace-analyze-in-region (&rest _) + "Removed." (interactive) - (cond ((thing-at-point 'sentence) - (cider-stacktrace-analyze-string (thing-at-point 'sentence))) - ((thing-at-point 'paragraph) - (cider-stacktrace-analyze-string (thing-at-point 'paragraph))) - (t (cider-stacktrace-analyze-in-region (region-beginning) (region-end))))) - -(defun cider-stacktrace-analyze-in-region (beg end) - "Analyze the stacktrace in the region between BEG and END." - (interactive (list (region-beginning) (region-end))) - (let ((stacktrace (buffer-substring beg end))) - (cider-stacktrace-analyze-string stacktrace))) + (message "This function has been removed. +You can jump to functions and methods directly from the printed stacktrace now.")) +(make-obsolete 'cider-stacktrace-analyze-in-region nil "1.18") (provide 'cider-stacktrace) diff --git a/doc/modules/ROOT/pages/debugging/logging.adoc b/doc/modules/ROOT/pages/debugging/logging.adoc index 9aafa335a..1913b0ea0 100644 --- a/doc/modules/ROOT/pages/debugging/logging.adoc +++ b/doc/modules/ROOT/pages/debugging/logging.adoc @@ -4,19 +4,15 @@ CIDER Log Mode allows you to capture, debug, inspect and view log events emitted by Java logging frameworks. The captured log events can be searched, streamed to the client, pretty-printed, and are integrated -with the CIDER link:inspector.html[Inspector] and -link:../usage/dealing_with_errors.html[Stacktrace Mode]. Here is a +with the CIDER link:inspector.html[Inspector]. Here is a screenshot of CIDER Log Mode in action. image::cider-log.png[CIDER Log] -NOTE: The screenshot displays the list of log events in the -`+*cider-log*+` buffer on the left. To the right, a log event is -visible in the `+*cider-inspect*+` buffer, where the exception of the -event is also displayed in the CIDER Stacktrace Mode. From the -Stacktrace Mode buffer you can jump to the source of each frame. At -the bottom the CIDER log menu is shown from which you can perform -logging related actions. +NOTE: The screenshot displays the list of log events in the `+*cider-log*+` +buffer on the left. To the right, a log event is visible in the +`+*cider-inspect*+` buffer. At the bottom the CIDER log menu is shown from which +you can perform logging related actions. == Features @@ -24,7 +20,6 @@ logging related actions. - Search log events and show them in buffers. - link:../usage/pretty_printing.html[Pretty-print] log events. - Show log events in the CIDER link:inspector.html[Inspector]. -- Show log event exceptions in the CIDER link:../usage/dealing_with_errors.html[Stacktrace Mode]. - Integration with https://github.com/doublep/logview[logview]. == Dependencies @@ -278,7 +273,7 @@ The following keybindings can be used to interact with log consumers. == Log Event Log events can be searched, streamed to a client or viewed in CIDER's -Inspector and Stacktrace Mode. When searching log events the user can +Inspector Mode. When searching log events the user can specify a set of filters. Events that match the filters are shown in the `+*cider-log*+` buffer. Additionally a log consumer will be attached to the appender to receive log events matching the search @@ -301,10 +296,6 @@ The following keybindings can be used to interact with log events. | kbd:[C-c M-l e c] | Clear all events from the log event buffer. -| `cider-log-show-stacktrace` -| kbd:[C-c M-l e e] -| Show the stacktrace of the log event at point in the CIDER Stacktrace Mode. - | `cider-log-inspect-event` | kbd:[C-c M-l e i] | Show the log event in the CIDER Inspector. diff --git a/doc/modules/ROOT/pages/usage/dealing_with_errors.adoc b/doc/modules/ROOT/pages/usage/dealing_with_errors.adoc index bd44bef17..fa33c32a1 100644 --- a/doc/modules/ROOT/pages/usage/dealing_with_errors.adoc +++ b/doc/modules/ROOT/pages/usage/dealing_with_errors.adoc @@ -210,92 +210,6 @@ for instance: (setq cider-stacktrace-fill-column 80) ---- -=== Inspecting printed stacktraces - -Some of the errors you encounter as a Clojurists aren't necessarily -evaluation errors that happened in your REPL. Many times, you see -errors printed in a textual representation in other buffers as well, -like log files or the REPL for example. Cider can parse and analyze -some of those printed errors as well and show them in -`cider-stacktrace-mode` with the following commands: - -* The `cider-stacktrace-analyze-at-point` command uses the `thingatpt` - library to extract the current stacktrace at point. It sends the - extracted stacktrace to the middleware in order to parse and analyze - it, and then shows the result in Cider's `cider-stacktrace-mode`. - -* The `cider-stacktrace-analyze-in-region` command does the same as - `cider-stacktrace-analyze-at-point`, but uses the current region to - extract the stacktrace. - -==== Examples - -Here is an example of a stacktrace printed with the Java -`printStackTrace` method: - -[source,text] ----- -clojure.lang.ExceptionInfo: BOOM-1 {:boom "1"} - at java.base/java.lang.Thread.run(Thread.java:829) ----- - -To open this stacktrace in the Cider stacktrace inspector, move point -somewhere over the exception and run `M-x -cider-stacktrace-analyze-at-point`. - -This also works to some extent for exceptions that are buried inside a -string like the following exception: - -[source,text] ----- -"clojure.lang.ExceptionInfo: BOOM-1 {:boom \"1\"}\n at java.base/java.lang.Thread.run(Thread.java:829)" ----- - -Those exceptions are often hard to read. The Cider stacktrace -inspector can help you navigating exceptions even in those cases. - -==== Supported formats - -Cider recognizes stacktraces printed in the following formats: - -- `Aviso` - Exceptions printed with the - https://ioavisopretty.readthedocs.io/en/latest/exceptions.html[write-exception] - function of the https://github.com/AvisoNovate/pretty[Aviso] - library. - -- `clojure.repl` - Exceptions printed with the - https://clojure.github.io/clojure/branch-master/clojure.repl-api.html#clojure.repl/pst[clojure.repl/pst] - function. - -- `clojure.stacktrace` - Exceptions printed with the - https://clojure.github.io/clojure/branch-master/clojure.stacktrace-api.html#clojure.stacktrace/print-cause-trace[clojure.stacktrace/print-cause-trace] - function. - -- `Java` - Exceptions printed with the - https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html#printStackTrace--[Throwable/printStackTrace] - method. - -- `Tagged Literal` - Exceptions printed with the - https://clojure.github.io/clojure/clojure.core-api.html#clojure.core/pr[clojure.core/pr] - function. - -==== Limitations - -- Cider only recognizes stacktraces that have been printed in one of - the supported formats. - -- Stacktraces are analyzed with the classpath of the Cider session the - buffer is associated with. If the stacktrace contains references to - classes not on this classpath, some information might be missing - from the analysis. - -- The `cider-stacktrace-analyze-at-point` function might not detect - the stacktrace at point in every situation. The thing at point might - be different depending on which major mode is active in a - buffer. When `cider-stacktrace-analyze-at-point` fails to detect the - stacktrace, `cider-stacktrace-analyze-in-region` can be used to - select the stacktrace manually. - == Inspector integration Within `*cider-error*`, when clicking directly a top-level exception (any of them in the cause chain), diff --git a/test/cider-stacktrace-tests.el b/test/cider-stacktrace-tests.el index 7c0c9d8fc..34ba01416 100644 --- a/test/cider-stacktrace-tests.el +++ b/test/cider-stacktrace-tests.el @@ -257,57 +257,3 @@ :to-be-truthy) (expect (or both shown1 shown2) :to-be nil)))) - -(defun cider-stacktrace-tests--analyze-at-point (stacktrace pos) - "Test `cider-stacktrace-analyze-at-point' with STACKTRACE at POS." - (with-temp-buffer - (erase-buffer) - (insert stacktrace) - (goto-char pos) - (cider-stacktrace-analyze-at-point))) - -(describe "cider-stacktrace-analyze-at-point" - :var (cider-stacktrace-analyze-string) - (before-each (spy-on 'cider-stacktrace-analyze-string)) - - (it "should analyze the Aviso stacktrace with point at beginning" - (cider-stacktrace-tests--analyze-at-point cider-stacktrace-tests-boom-aviso 0) - (expect 'cider-stacktrace-analyze-string :to-have-been-called-with cider-stacktrace-tests-boom-aviso)) - - (it "should analyze the Clojure stacktrace with point at beginning" - (cider-stacktrace-tests--analyze-at-point cider-stacktrace-tests-boom-clojure 0) - (expect 'cider-stacktrace-analyze-string :to-have-been-called-with cider-stacktrace-tests-boom-clojure)) - - (it "should analyze the Java stacktrace with point at beginning" - (cider-stacktrace-tests--analyze-at-point cider-stacktrace-tests-boom-java 0) - (expect 'cider-stacktrace-analyze-string :to-have-been-called-with cider-stacktrace-tests-boom-java)) - - (it "should analyze the Clojure stacktrace with point inside" - (cider-stacktrace-tests--analyze-at-point cider-stacktrace-tests-boom-clojure 10) - (expect 'cider-stacktrace-analyze-string :to-have-been-called-with cider-stacktrace-tests-boom-clojure)) - - (it "should analyze the Java stacktrace with point inside" - (cider-stacktrace-tests--analyze-at-point cider-stacktrace-tests-boom-java 10) - (expect 'cider-stacktrace-analyze-string :to-have-been-called-with cider-stacktrace-tests-boom-java))) - -(defun cider-stacktrace-tests--analyze-in-region (stacktrace) - "Test `cider-stacktrace-analyze-in-region' with STACKTRACE." - (with-temp-buffer - (insert stacktrace) - (cider-stacktrace-analyze-in-region (point-min) (point-max)))) - -(describe "cider-stacktrace-analyze-in-region" - :var (cider-stacktrace-analyze-string) - (before-each (spy-on 'cider-stacktrace-analyze-string)) - - (it "should analyze the Aviso stacktrace in region" - (cider-stacktrace-tests--analyze-in-region cider-stacktrace-tests-boom-aviso) - (expect 'cider-stacktrace-analyze-string :to-have-been-called-with cider-stacktrace-tests-boom-aviso)) - - (it "should analyze the Clojure stacktrace in region" - (cider-stacktrace-tests--analyze-in-region cider-stacktrace-tests-boom-clojure) - (expect 'cider-stacktrace-analyze-string :to-have-been-called-with cider-stacktrace-tests-boom-clojure)) - - (it "should analyze the Java stacktrace in region" - (cider-stacktrace-tests--analyze-in-region cider-stacktrace-tests-boom-java) - (expect 'cider-stacktrace-analyze-string :to-have-been-called-with cider-stacktrace-tests-boom-java))) From 8276e8b19b540c704f818fc38feb7dabc4e43cd4 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Wed, 26 Mar 2025 17:44:40 +0200 Subject: [PATCH 099/149] Bump cider-nrepl to 0.53.2 --- CHANGELOG.md | 1 + cider.el | 2 +- dev/docker-sample-project/project.clj | 2 +- dev/tramp-sample-project/project.clj | 2 +- .../ROOT/pages/basics/middleware_setup.adoc | 10 ++--- .../ROOT/pages/basics/up_and_running.adoc | 4 +- doc/modules/ROOT/pages/cljs/shadow-cljs.adoc | 2 +- .../ROOT/pages/cljs/up_and_running.adoc | 2 +- test/cider-tests.el | 44 +++++++++---------- 9 files changed, 35 insertions(+), 34 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f0b650c0c..9660d3a2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ - `cider-stacktrace-analyze-string` and `cider-stacktrace-analyze-at-point` functions. - Automatic stacktrace parsing in log viewer. - Bump the injected `cider-nrepl` to [0.53.1](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0531-2025-03-26). +- Bump the injected `cider-nrepl` to [0.53.2](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0532-2025-03-26). - Info: recognize printed Java classes/methods and munged Clojure functions in stacktrace outputs. - Inspector: add dedicated view for Exceptions. - Stop vendoring Haystack dependency. diff --git a/cider.el b/cider.el index 1ad952ff5..30b5a97b2 100644 --- a/cider.el +++ b/cider.el @@ -573,7 +573,7 @@ the artifact.") Used when `cider-jack-in-auto-inject-clojure' is set to `latest'.") -(defconst cider-required-middleware-version "0.53.1" +(defconst cider-required-middleware-version "0.53.2" "The CIDER nREPL version that's known to work properly with CIDER.") (defcustom cider-injected-middleware-version cider-required-middleware-version diff --git a/dev/docker-sample-project/project.clj b/dev/docker-sample-project/project.clj index ba3b18322..b073e0db4 100644 --- a/dev/docker-sample-project/project.clj +++ b/dev/docker-sample-project/project.clj @@ -2,4 +2,4 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.53.1"]]) + :plugins [[cider/cider-nrepl "0.53.2"]]) diff --git a/dev/tramp-sample-project/project.clj b/dev/tramp-sample-project/project.clj index bc6f64775..d874cbe4e 100644 --- a/dev/tramp-sample-project/project.clj +++ b/dev/tramp-sample-project/project.clj @@ -2,5 +2,5 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.53.1"] + :plugins [[cider/cider-nrepl "0.53.2"] [refactor-nrepl "3.9.0"]]) diff --git a/doc/modules/ROOT/pages/basics/middleware_setup.adoc b/doc/modules/ROOT/pages/basics/middleware_setup.adoc index 36202e26b..c6075de99 100644 --- a/doc/modules/ROOT/pages/basics/middleware_setup.adoc +++ b/doc/modules/ROOT/pages/basics/middleware_setup.adoc @@ -20,14 +20,14 @@ Use the convenient plugin for defaults, either in your project's [source,clojure] ---- -:plugins [[cider/cider-nrepl "0.53.1"]] +:plugins [[cider/cider-nrepl "0.53.2"]] ---- A minimal `profiles.clj` for CIDER would be: [source,clojure] ---- -{:repl {:plugins [[cider/cider-nrepl "0.53.1"]]}} +{:repl {:plugins [[cider/cider-nrepl "0.53.2"]]}} ---- WARNING: Be careful not to place this in the `:user` profile, as this way CIDER's @@ -43,11 +43,11 @@ run `cider-connect` or `cider-connect-cljs`. [source,clojure] ---- - :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.53.1"}} + :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.53.2"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware]"]} :cider-cljs {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.339"} - cider/cider-nrepl {:mvn/version "0.53.1"} + cider/cider-nrepl {:mvn/version "0.53.2"} cider/piggieback {:mvn/version "0.6.0"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware,cider.piggieback/wrap-cljs-repl]"]} @@ -66,7 +66,7 @@ NOTE: Make sure you're using https://github.com/clojurephant/clojurephant[Clojur ---- dependencies { devImplementation 'nrepl:nrepl:0.9.0' - devImplementation 'cider:cider-nrepl:0.53.1' + devImplementation 'cider:cider-nrepl:0.53.2' } tasks.named('clojureRepl') { diff --git a/doc/modules/ROOT/pages/basics/up_and_running.adoc b/doc/modules/ROOT/pages/basics/up_and_running.adoc index 16a82ec96..d69a18fe4 100644 --- a/doc/modules/ROOT/pages/basics/up_and_running.adoc +++ b/doc/modules/ROOT/pages/basics/up_and_running.adoc @@ -72,7 +72,7 @@ simple - CIDER passes the extra dependencies and nREPL configuration to your build tool in the command it runs to start the nREPL server. Here's how this looks for `tools.deps`: - $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.1"} cider/cider-nrepl {:mvn/version "0.53.1"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' + $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.1"} cider/cider-nrepl {:mvn/version "0.53.2"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' TIP: If you don't want `cider-jack-in` to inject dependencies automatically, set `cider-inject-dependencies-at-jack-in` to `nil`. Note that you'll have to setup @@ -332,7 +332,7 @@ It is also possible for plain `clj`, although the command is somewhat longer: [source,sh] ---- -$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.53.1"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" +$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.53.2"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" ---- Alternatively, you can start nREPL either manually or using the facilities diff --git a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc index 6964ec809..6166d1502 100644 --- a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc +++ b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc @@ -62,7 +62,7 @@ And connect to it with `cider-connect`. ...For that to work, `shadow-cljs.edn` contents like the following are assumed: ```clj - :dependencies [[cider/cider-nrepl "0.53.1"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) + :dependencies [[cider/cider-nrepl "0.53.2"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) [refactor-nrepl/refactor-nrepl "3.9.0"]] ;; refactor-nrepl is optional :nrepl {:middleware [cider.nrepl/cider-middleware ;; it's advisable to explicitly add this middleware. It's automatically added by shadow-cljs (if available in the classpath), unless `:nrepl {:cider false}` diff --git a/doc/modules/ROOT/pages/cljs/up_and_running.adoc b/doc/modules/ROOT/pages/cljs/up_and_running.adoc index 2f7bc6f73..13d157879 100644 --- a/doc/modules/ROOT/pages/cljs/up_and_running.adoc +++ b/doc/modules/ROOT/pages/cljs/up_and_running.adoc @@ -61,7 +61,7 @@ or in `build.gradle`: ---- dependencies { devImplementation 'nrepl:nrepl:1.3.1' - devImplementation 'cider:cider-nrepl:0.53.1' + devImplementation 'cider:cider-nrepl:0.53.2' devImplementation 'cider:cider-piggieback:0.5.3' } diff --git a/test/cider-tests.el b/test/cider-tests.el index 3e3f8301c..69669f66c 100644 --- a/test/cider-tests.el +++ b/test/cider-tests.el @@ -144,7 +144,7 @@ (describe "when there is a single dependency" (before-each (setq-local cider-injected-nrepl-version "0.9.0") - (setq-local cider-injected-middleware-version "0.53.1") + (setq-local cider-injected-middleware-version "0.53.2") (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t) @@ -155,7 +155,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.53.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.53.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -169,7 +169,7 @@ "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.53.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.53.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -182,7 +182,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure foo.bar/baz]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.53.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.53.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -196,7 +196,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.53.1") + (shell-quote-argument "cider/cider-nrepl:0.53.2") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -206,7 +206,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.53.1") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.53.2") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -223,7 +223,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.53.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.53.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -237,7 +237,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.53.1") + (shell-quote-argument "cider/cider-nrepl:0.53.2") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -259,7 +259,7 @@ :to-equal (concat "-o -U update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.53.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.53.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -271,7 +271,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.53.1") + (shell-quote-argument "cider/cider-nrepl:0.53.2") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -280,7 +280,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.53.1") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.53.2") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -295,14 +295,14 @@ (setq-local cider-jack-in-nrepl-middlewares '(("refactor-nrepl.middleware/wrap-refactor" :predicate middlewares-predicate) "cider.nrepl/cider-middleware" ("another/middleware")))) (it "includes plugins whose predicates return true" (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.53.1")))) + :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.53.2")))) (it "includes middlewares whose predicates return true" (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware" "another/middleware"))) (it "ignores plugins whose predicates return false" (spy-on 'plugins-predicate :and-return-value nil) (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("cider/cider-nrepl" "0.53.1"))) + :to-equal '(("cider/cider-nrepl" "0.53.2"))) (spy-on 'middlewares-predicate :and-return-value nil) (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("cider.nrepl/cider-middleware" "another/middleware"))) @@ -331,7 +331,7 @@ :and-return-value '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware")) (spy-on 'cider-jack-in-normalized-lein-plugins :and-return-value '(("refactor-nrepl" "2.0.0") - ("cider/cider-nrepl" "0.53.1") + ("cider/cider-nrepl" "0.53.2") ("mx.cider/lein-enrich-classpath" "1.19.3"))) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t)) @@ -342,7 +342,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.53.1\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.53.2\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -361,7 +361,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.53.1") + (shell-quote-argument "cider/cider-nrepl:0.53.2") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -456,7 +456,7 @@ (setq-local cider-jack-in-dependencies nil) (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.53.1\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.53.2\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) @@ -471,7 +471,7 @@ (it "allows specifying custom aliases with `cider-clojure-cli-aliases`" (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.53.1\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.53.2\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:dev:test:cider/nrepl") ""))) (setq-local cider-jack-in-dependencies nil) @@ -489,7 +489,7 @@ (it (format "should remove duplicates, yielding the same result (for %S command invocation)" command) ;; repeat the same test for PowerShell too (let ((expected (string-join `("-Sdeps " - ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.53.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" + ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.53.2\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" command) " -M:dev:test:cider/nrepl") ""))) @@ -499,7 +499,7 @@ :to-equal expected)))) (it "handles aliases correctly" (let ((expected (string-join `("-Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.53.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.53.2\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -527,7 +527,7 @@ :to-equal expected))))) (it "allows for global options" (let ((expected (string-join `("-J-Xverify:none -Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.53.1\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.53.2\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -538,7 +538,7 @@ (setq-local cider-jack-in-dependencies '(("org.clojure/tools.deps" (("git/sha" . "6ae2b6f71773de7549d7f22759e8b09fec27f0d9") ("git/url" . "https://github.com/clojure/tools.deps/"))))) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.53.1\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.53.2\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) From 65383b8d1ec0ccacea913176a9398a7abc68edb7 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Wed, 26 Mar 2025 17:44:48 +0200 Subject: [PATCH 100/149] [completion] Disable client-side sorting --- CHANGELOG.md | 1 + cider-client.el | 1 + cider-completion.el | 5 ++++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9660d3a2c..9fa7a0d9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ - [#3784](https://github.com/clojure-emacs/cider/issues/3784): Inspector: make point less erratic when navigating between inspector screens. - [#3790](https://github.com/clojure-emacs/cider/issues/3790): Stacktrace: show messages and data for all exception causes by default. - [#3789](https://github.com/clojure-emacs/cider/issues/3789): Refactor and simplify exception handling. +- [#3789](https://github.com/clojure-emacs/cider/issues/3796): Completion: disable client-side sorting (defer to backend-provided candidate order). ## 1.17.1 (2025-02-25) diff --git a/cider-client.el b/cider-client.el index d03bb3957..225a43dee 100644 --- a/cider-client.el +++ b/cider-client.el @@ -672,6 +672,7 @@ CONTEXT represents a completion context for compliment." "ns" ,(cider-current-ns) "prefix" ,prefix "context" ,context + "sort-order" "by-name" ,@(when cider-enhanced-cljs-completion-p '("enhanced-cljs-completion?" "t"))) (cider-nrepl-send-sync-request (cider-current-repl) 'abort-on-input)))) diff --git a/cider-completion.el b/cider-completion.el index 78e64fd10..325a3868a 100644 --- a/cider-completion.el +++ b/cider-completion.el @@ -211,7 +211,10 @@ performed by `cider-annotate-completion-function'." ;; ;; This api is better described in the section ;; '21.6.7 Programmed Completion' of the elisp manual. - (cond ((eq action 'metadata) `(metadata (category . cider))) ;; defines a completion category named 'cider, used later in our `completion-category-overrides` logic. + (cond ((eq action 'metadata) + `(metadata + (category . cider) ;; defines a completion category named 'cider, used later in our `completion-category-overrides` logic. + (display-sort-function . identity))) ;; don't override sorting done by backend ((eq (car-safe action) 'boundaries) nil) (t (with-current-buffer (current-buffer) (complete-with-action action (funcall complete) prefix pred))))) From dbc1a6fcc0003bab23b1b2b47e72cdfafce08bf4 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Thu, 27 Mar 2025 15:17:28 +0200 Subject: [PATCH 101/149] [completion] Enable cider-completion-style by default --- CHANGELOG.md | 1 + cider-completion.el | 42 ++++++++++++++++++++++-------------------- cider-mode.el | 1 + 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fa7a0d9f..0f2167d38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ - [#3790](https://github.com/clojure-emacs/cider/issues/3790): Stacktrace: show messages and data for all exception causes by default. - [#3789](https://github.com/clojure-emacs/cider/issues/3789): Refactor and simplify exception handling. - [#3789](https://github.com/clojure-emacs/cider/issues/3796): Completion: disable client-side sorting (defer to backend-provided candidate order). +- [#3797](https://github.com/clojure-emacs/cider/issues/3797): Completion: enable `cider-completion-style` by default (this enables richer completion suggestions where candidates don't have to strictly match the prefix). ## 1.17.1 (2025-02-25) diff --git a/cider-completion.el b/cider-completion.el index 325a3868a..e55216ee9 100644 --- a/cider-completion.el +++ b/cider-completion.el @@ -283,27 +283,31 @@ DEPRECATED: please use `cider-enable-cider-completion-style' instead." (interactive) (cider-enable-cider-completion-style)) -(defun cider-enable-cider-completion-style () - "Enables `cider' completion style for CIDER in all buffers. +(defun cider-enable-cider-completion-style (&optional arg) + "Enables or disables `cider' completion style for CIDER in all buffers. This style supports non-prefix completion candidates returned by the -completion backend. Only affects the `cider' completion category." +completion backend. Only affects the `cider' completion category. If ARG +is `1' or nil, enables the custom completion style; if `-1', disables it." (interactive) - (let* ((cider (assq 'cider completion-category-overrides)) - (found-styles (assq 'styles cider)) - (new-styles (if found-styles - (cons 'styles (cons 'cider (cdr found-styles))) - '(styles cider basic))) - (new-cider (if cider - (cons 'cider - (cons new-styles - (seq-remove (lambda (x) (equal 'styles (car x))) - (cdr cider)))) - (list 'cider new-styles))) - (new-overrides (cons new-cider - (seq-remove (lambda (x) (equal 'cider (car x))) - completion-category-overrides)))) - (setq completion-category-overrides new-overrides))) + (if (= arg -1) + (setq completion-category-overrides + (assq-delete-all 'cider completion-category-overrides)) + (let* ((cider (assq 'cider completion-category-overrides)) + (found-styles (assq 'styles cider)) + (new-styles (if found-styles + (cons 'styles (cons 'cider (cdr found-styles))) + '(styles cider basic))) + (new-cider (if cider + (cons 'cider + (cons new-styles + (seq-remove (lambda (x) (equal 'styles (car x))) + (cdr cider)))) + (list 'cider new-styles))) + (new-overrides (cons new-cider + (seq-remove (lambda (x) (equal 'cider (car x))) + completion-category-overrides)))) + (setq completion-category-overrides new-overrides)))) (make-obsolete 'cider-company-enable-fuzzy-completion 'cider-enable-cider-completion-style "1.17.0") @@ -312,8 +316,6 @@ completion backend. Only affects the `cider' completion category." Only affects the `cider' completion category.`" (interactive) - (when (< emacs-major-version 27) - (user-error "`cider-enable-flex-completion' requires Emacs 27 or later")) (let ((found-styles (when-let ((cider (assq 'cider completion-category-overrides))) (assq 'styles cider))) (found-cycle (when-let ((cider (assq 'cider completion-category-overrides))) diff --git a/cider-mode.el b/cider-mode.el index 64567b46a..8e5af6c2d 100644 --- a/cider-mode.el +++ b/cider-mode.el @@ -1098,6 +1098,7 @@ property." (setq-local clojure-expected-ns-function #'cider-expected-ns) (when cider-use-xref (add-hook 'xref-backend-functions #'cider--xref-backend cider-xref-fn-depth 'local)) + (cider-enable-cider-completion-style 1) (setq next-error-function #'cider-jump-to-compilation-error)) ;; Mode cleanup (mapc #'kill-local-variable '(next-error-function From 2d86379210e81d02db460aca59ca877668aca0b6 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Thu, 27 Mar 2025 15:42:42 +0200 Subject: [PATCH 102/149] [docs] Update user manual about completion --- .../ROOT/pages/usage/code_completion.adoc | 86 +++++++++---------- 1 file changed, 41 insertions(+), 45 deletions(-) diff --git a/doc/modules/ROOT/pages/usage/code_completion.adoc b/doc/modules/ROOT/pages/usage/code_completion.adoc index e354b587f..68d8379bd 100644 --- a/doc/modules/ROOT/pages/usage/code_completion.adoc +++ b/doc/modules/ROOT/pages/usage/code_completion.adoc @@ -35,32 +35,6 @@ Normally kbd:[TAB] only indents, but now it will also do completion if the code is already properly indented. ==== -== Completion styles - -CIDER defines a specialized completion category through the `cider-complete-at-point` function, -added to `completion-at-point-functions`, establishing a dedicated completion category named -`cider`. - -The CIDER completion at point function supports most completion styles, -including `partial-completion`, `orderless` and `flex`. It also supports a -custom completion style that is confusingly named `cider` too. Activating it -provides a richer set of completion candidates (see -xref:usage/code_completion.adoc#fuzzy-candidate-matching[fuzzy candidate -matching]). - -Sometimes the user may want to use a different completion style just for the CIDER -complete at point function. That can be achieved by setting -`completion-category-overrides`, overwriting the completion style of the CIDER -complete at point function. The following snippet accomplishes that: - -[source,lisp] ----- -(add-to-list 'completion-category-overrides '(cider (styles basic))) ----- - -This specifies that the `cider` completion category should employ the basic completion style by -default. - == Auto-completion While the standard Emacs tooling works just fine, we suggest that @@ -139,31 +113,30 @@ without needing to hit an extra key, please customize: (custom-set-variables '(company-auto-update-doc t)) ---- -=== Fuzzy candidate matching +=== Rich candidate matching + +Starting with version 1.18, CIDER by default enables a custom completion style +that provides richer and more useful candidate matching, for example: -By default, CIDER will use the completion styles defined in -`completion-styles`, the defaults being `(basic partial-completion -emacs22)` since Emacs 23. For a better description of how those -completion styles operates, refer to the official Emacs manual on -https://www.gnu.org/software/emacs/manual/html_node/emacs/Completion-Styles.html[how completion alternatives are chosen]. +- Long vars that contain dashes by first characters of individual parts, e.g. + `mi` or `mai` complete to `map-indexed`. +- Namespaces by first characters of parts, e.g. `cji` completes to + `clojure.java.io`. +- Not imported classnames by their short name prefixes, e.g. `BiFun` completes + to `java.util.function.BiFunction`. + +You can learn all completion scenarios and features +https://github.com/alexander-yakushev/compliment/wiki/Examples[here]. -CIDER provides a function to enable the `cider` completion style for CIDER-specific -completions. If you wish to enable that, you can add this to your config: +If you only want to receive standard prefix-restricted completions (where the +candidate must contain the prefix at the beginning verbatim), you can disable +this feature by adding this to your config: [source,lisp] ---- -(cider-enable-cider-completion-style) +(cider-enable-cider-completion-style -1) ---- -This adds the `cider` completion style for CIDER buffers. - -Now, `company-mode` (and other completion packages like `corfu`) will -accept certain fuzziness when matching candidates against the -prefix. For example, typing `mi` will show you `map-indexed` as one of -the possible completion candidates and `cji` will complete to -`clojure.java.io`. Different completion examples are shown -https://github.com/alexander-yakushev/compliment/wiki/Examples[here]. - === Completion annotations Completion candidates will be annotated by default with an abbreviation @@ -178,6 +151,29 @@ image::completion-annotations.png[Completion Annotations] TIP: Completion annotations can be disabled by setting `cider-annotate-completion-candidates` to `nil`. +=== Completion styles + +The CIDER completion at point function supports most completion styles, +including `partial-completion`, `orderless`, `flex`, and its own custom +completion style named `cider`. The latter is enabled by default. Sometimes the +user may want to use a different completion style for the CIDER complete at +point function. That can be achieved by setting `completion-category-overrides`, +overwriting the completion style of the CIDER complete at point function. The +following snippet accomplishes that: + +[source,lisp] +---- +(add-to-list 'completion-category-overrides '(cider (styles basic))) +---- + +For a better description of how those completion styles operates, refer to the +official Emacs manual on +https://www.gnu.org/software/emacs/manual/html_node/emacs/Completion-Styles.html[how +completion alternatives are chosen]. + +This specifies that the `cider` completion category should employ the basic completion style by +default. + === Notes on class disambiguation Sometimes, the completion user experience may be interrupted by a `completing-read` @@ -212,6 +208,6 @@ NOTE: You don't really need to know any of this if you're using only `cider-jack The bulk of the code completion logic resides in `cider-nrepl` https://github.com/clojure-emacs/cider-nrepl/blob/master/src/cider/nrepl/middleware/complete.clj[completion middleware]. Internally it delegates to `compliment` for the Clojure completion and `clj-suitable` for the ClojureScript completion. -Starting with nREPL 0.8, there's also a built-in `completions` nREPL op that CIDER will fallback to, in the absence of `cider-nrepl`. Its API is similar to that of the `complete` op in `cider-nrepl` and it can be configured to use different completion functions. The built-in op currently supports only Clojure. See the https://nrepl.org/nrepl/usage/misc.html#code-completion[nREPL docs] for more details. +nREPL also has a built-in `completions` op that CIDER will fallback to, in the absence of `cider-nrepl`. Its API is similar to that of the `complete` op in `cider-nrepl` and it can be configured to use different completion functions. The built-in op currently supports only Clojure. See the https://nrepl.org/nrepl/usage/misc.html#code-completion[nREPL docs] for more details. Basically, you'll get great code completion in the presence of `cider-nrepl` and basic completion otherwise. From d35611e9516a1ab705850ea376c196a9a2b26a63 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Mon, 31 Mar 2025 14:49:33 +0300 Subject: [PATCH 103/149] [completion] Fix cider-enable-cider-completion-style --- cider-completion.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cider-completion.el b/cider-completion.el index e55216ee9..4a1437bbc 100644 --- a/cider-completion.el +++ b/cider-completion.el @@ -290,7 +290,7 @@ This style supports non-prefix completion candidates returned by the completion backend. Only affects the `cider' completion category. If ARG is `1' or nil, enables the custom completion style; if `-1', disables it." (interactive) - (if (= arg -1) + (if (eq arg -1) (setq completion-category-overrides (assq-delete-all 'cider completion-category-overrides)) (let* ((cider (assq 'cider completion-category-overrides)) From fdfa7c22003abb255f01a0d6fce6c41fb01b79ff Mon Sep 17 00:00:00 2001 From: JenChieh Date: Mon, 31 Mar 2025 02:03:08 -0700 Subject: [PATCH 104/149] ci: Use only one setup-emacs --- .github/workflows/test.yml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d23cc4db7..c8e729f35 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -39,14 +39,7 @@ jobs: steps: - name: Set up Emacs - if: "!startsWith (matrix.os, 'windows')" - uses: purcell/setup-emacs@master - with: - version: ${{matrix.emacs_version}} - - - name: Set up Emacs on Windows - if: startsWith (matrix.os, 'windows') - uses: jcs090218/setup-emacs-windows@master + uses: jcs090218/setup-emacs@master with: version: ${{matrix.emacs_version}} From de548e3084f6f6b5802dd7f939fd9ddf36e62038 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Tue, 1 Apr 2025 22:12:56 +0300 Subject: [PATCH 105/149] Remove obsolete variables from before 1.0 --- cider-client.el | 3 --- cider-debug.el | 4 ---- cider-repl.el | 7 ------- cider-stacktrace.el | 6 ------ nrepl-client.el | 15 --------------- 5 files changed, 35 deletions(-) diff --git a/cider-client.el b/cider-client.el index 225a43dee..29d3c6716 100644 --- a/cider-client.el +++ b/cider-client.el @@ -321,9 +321,6 @@ Here's an example for `pprint': :group 'cider :package-version '(cider . "0.21.0")) -(make-obsolete-variable 'cider-pprint-fn 'cider-print-fn "0.21") -(make-obsolete-variable 'cider-pprint-options 'cider-print-options "0.21") - (defcustom cider-print-quota (* 1024 1024) "A hard limit on the number of bytes to return from any printing operation. Set to nil for no limit." diff --git a/cider-debug.el b/cider-debug.el index d7427b57a..ce24cb31b 100644 --- a/cider-debug.el +++ b/cider-debug.el @@ -97,10 +97,6 @@ configure `cider-debug-prompt' instead." (const :tag "Both" both)) :package-version '(cider . "0.9.1")) -(make-obsolete 'cider-debug-print-length 'cider-debug-print-options "0.20") -(make-obsolete 'cider-debug-print-level 'cider-debug-print-options "0.20") -(make-obsolete-variable 'cider-debug-print-options 'cider-print-options "0.21") - ;;; Implementation (declare-function cider-browse-ns--combined-vars-with-meta "cider-browse-ns") diff --git a/cider-repl.el b/cider-repl.el index d37bb3382..202845a37 100644 --- a/cider-repl.el +++ b/cider-repl.el @@ -95,8 +95,6 @@ focused. Otherwise the buffer is displayed and focused." "Controls whether the REPL buffer is displayed in the current window." :type 'boolean) -(make-obsolete-variable 'cider-repl-scroll-on-output 'scroll-conservatively "0.21") - (defcustom cider-repl-use-pretty-printing t "Control whether results in the REPL are pretty-printed or not. The REPL will use the printer specified in `cider-print-fn'. @@ -104,8 +102,6 @@ The `cider-toggle-pretty-printing' command can be used to interactively change the setting's value." :type 'boolean) -(make-obsolete-variable 'cider-repl-pretty-print-width 'cider-print-options "0.21") - (defcustom cider-repl-use-content-types nil "Control whether REPL results are presented using content-type information. The `cider-repl-toggle-content-types' command can be used to interactively @@ -149,9 +145,6 @@ you'd like to use the default Emacs behavior use `indent-for-tab-command'." :type 'symbol) -(make-obsolete-variable 'cider-repl-print-length 'cider-print-options "0.21") -(make-obsolete-variable 'cider-repl-print-level 'cider-print-options "0.21") - (defvar cider-repl-require-repl-utils-code '((clj . "(when-let [requires (resolve 'clojure.main/repl-requires)] (clojure.core/apply clojure.core/require @requires))") diff --git a/cider-stacktrace.el b/cider-stacktrace.el index 55636c8b3..5686dc5e6 100644 --- a/cider-stacktrace.el +++ b/cider-stacktrace.el @@ -62,10 +62,6 @@ Pick nil if you prefer the same window as *cider-error*." :type 'boolean :package-version '(cider . "1.8.0")) -(make-obsolete 'cider-stacktrace-print-length 'cider-stacktrace-print-options "0.20") -(make-obsolete 'cider-stacktrace-print-level 'cider-stacktrace-print-options "0.20") -(make-obsolete-variable 'cider-stacktrace-print-options 'cider-print-options "0.21") - (defvar cider-stacktrace-detail-max 2 "The maximum detail level for causes.") @@ -76,8 +72,6 @@ Pick nil if you prefer the same window as *cider-error*." (defconst cider-error-buffer "*cider-error*") -(make-obsolete 'cider-visit-error-buffer 'cider-selector "0.18") - (defcustom cider-stacktrace-suppressed-errors '() "Errors that won't make the stacktrace buffer 'pop-over' your active window. The error types are represented as strings." diff --git a/nrepl-client.el b/nrepl-client.el index b438cfe37..454fb2fe5 100644 --- a/nrepl-client.el +++ b/nrepl-client.el @@ -86,19 +86,6 @@ :prefix "nrepl-" :group 'applications) -;; (defcustom nrepl-buffer-name-separator " " -;; "Used in constructing the REPL buffer name. -;; The `nrepl-buffer-name-separator' separates cider-repl from the project name." -;; :type '(string) -;; :group 'nrepl) -(make-obsolete-variable 'nrepl-buffer-name-separator 'cider-session-name-template "0.18") - -;; (defcustom nrepl-buffer-name-show-port nil -;; "Show the connection port in the nrepl REPL buffer name, if set to t." -;; :type 'boolean -;; :group 'nrepl) -(make-obsolete-variable 'nrepl-buffer-name-show-port 'cider-session-name-template "0.18") - (defcustom nrepl-connected-hook nil "List of functions to call when connecting to the nREPL server." :type 'hook) @@ -1511,8 +1498,6 @@ The default buffer name is *nrepl-error*." (set-window-point win (point-max))) (setq buffer-read-only t))) -(make-obsolete 'nrepl-default-client-buffer-builder nil "0.18") - (provide 'nrepl-client) ;;; nrepl-client.el ends here From 2139682ba1234aa5d3cef5bb0f57802db8b2b8ad Mon Sep 17 00:00:00 2001 From: Roman Rudakov Date: Sat, 5 Apr 2025 18:47:11 +0200 Subject: [PATCH 106/149] Enable dynamic indentation for clojure-ts-mode --- CHANGELOG.md | 1 + cider-mode.el | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f2167d38..ee94a638e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ - [#3789](https://github.com/clojure-emacs/cider/issues/3789): Refactor and simplify exception handling. - [#3789](https://github.com/clojure-emacs/cider/issues/3796): Completion: disable client-side sorting (defer to backend-provided candidate order). - [#3797](https://github.com/clojure-emacs/cider/issues/3797): Completion: enable `cider-completion-style` by default (this enables richer completion suggestions where candidates don't have to strictly match the prefix). +- [#3803](https://github.com/clojure-emacs/cider/pull/3803): Enable dynamic indentation for `clojure-ts-mode`. ## 1.17.1 (2025-02-25) diff --git a/cider-mode.el b/cider-mode.el index 8e5af6c2d..3aee2d142 100644 --- a/cider-mode.el +++ b/cider-mode.el @@ -1094,7 +1094,10 @@ property." ;; `tooltip' has variable-width by default, which looks terrible. (set-face-attribute 'tooltip nil :inherit 'unspecified) (when cider-dynamic-indentation - (setq-local clojure-get-indent-function #'cider--get-symbol-indent)) + (setq-local clojure-get-indent-function #'cider--get-symbol-indent) + (with-suppressed-warnings ((free-vars clojure-ts-get-indent-function)) + (setq-local clojure-ts-get-indent-function + #'cider--get-symbol-indent))) (setq-local clojure-expected-ns-function #'cider-expected-ns) (when cider-use-xref (add-hook 'xref-backend-functions #'cider--xref-backend cider-xref-fn-depth 'local)) @@ -1104,7 +1107,8 @@ property." (mapc #'kill-local-variable '(next-error-function x-gtk-use-system-tooltips font-lock-fontify-region-function - clojure-get-indent-function)) + clojure-get-indent-function + clojure-ts-get-indent-function)) (remove-hook 'completion-at-point-functions #'cider-complete-at-point t) (when cider-use-xref (remove-hook 'xref-backend-functions #'cider--xref-backend 'local)) From 35cacc731f0d1e1c08bc0af57d78b7b0247b04a0 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Sat, 5 Apr 2025 17:02:46 +0300 Subject: [PATCH 107/149] Bump cider-nrepl to 0.54.0 --- CHANGELOG.md | 4 +- cider.el | 2 +- dev/docker-sample-project/project.clj | 2 +- dev/tramp-sample-project/project.clj | 2 +- .../ROOT/pages/basics/middleware_setup.adoc | 10 ++--- .../ROOT/pages/basics/up_and_running.adoc | 4 +- doc/modules/ROOT/pages/cljs/shadow-cljs.adoc | 2 +- .../ROOT/pages/cljs/up_and_running.adoc | 2 +- test/cider-tests.el | 44 +++++++++---------- 9 files changed, 36 insertions(+), 36 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee94a638e..886845a37 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,11 +8,11 @@ - [#3793](https://github.com/clojure-emacs/cider/issues/3793): **(Breaking)** Remove features that relied on printed exception parsing: - `cider-stacktrace-analyze-string` and `cider-stacktrace-analyze-at-point` functions. - Automatic stacktrace parsing in log viewer. -- Bump the injected `cider-nrepl` to [0.53.1](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0531-2025-03-26). -- Bump the injected `cider-nrepl` to [0.53.2](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0532-2025-03-26). +- Bump the injected `cider-nrepl` to [0.54.0](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0540-2025-04-05). - Info: recognize printed Java classes/methods and munged Clojure functions in stacktrace outputs. - Inspector: add dedicated view for Exceptions. - Stop vendoring Haystack dependency. + - Stop vendoring Puget dependency. You can still user `puget` pretty-printing for CIDER, but you need to depend on Puget explicitly. If Puget is not found on the classpath, CIDER will revert to `clojure.pprint/pprint` for pretty-printing. - [#3777](https://github.com/clojure-emacs/cider/issues/3777): Inspector no longer displays parsed Javadoc for Java classes and members. - [#3784](https://github.com/clojure-emacs/cider/issues/3784): Inspector: make point less erratic when navigating between inspector screens. - [#3790](https://github.com/clojure-emacs/cider/issues/3790): Stacktrace: show messages and data for all exception causes by default. diff --git a/cider.el b/cider.el index 30b5a97b2..c1d292fcf 100644 --- a/cider.el +++ b/cider.el @@ -573,7 +573,7 @@ the artifact.") Used when `cider-jack-in-auto-inject-clojure' is set to `latest'.") -(defconst cider-required-middleware-version "0.53.2" +(defconst cider-required-middleware-version "0.54.0" "The CIDER nREPL version that's known to work properly with CIDER.") (defcustom cider-injected-middleware-version cider-required-middleware-version diff --git a/dev/docker-sample-project/project.clj b/dev/docker-sample-project/project.clj index b073e0db4..550cf05dd 100644 --- a/dev/docker-sample-project/project.clj +++ b/dev/docker-sample-project/project.clj @@ -2,4 +2,4 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.53.2"]]) + :plugins [[cider/cider-nrepl "0.54.0"]]) diff --git a/dev/tramp-sample-project/project.clj b/dev/tramp-sample-project/project.clj index d874cbe4e..aa2a1c93c 100644 --- a/dev/tramp-sample-project/project.clj +++ b/dev/tramp-sample-project/project.clj @@ -2,5 +2,5 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.53.2"] + :plugins [[cider/cider-nrepl "0.54.0"] [refactor-nrepl "3.9.0"]]) diff --git a/doc/modules/ROOT/pages/basics/middleware_setup.adoc b/doc/modules/ROOT/pages/basics/middleware_setup.adoc index c6075de99..611f52759 100644 --- a/doc/modules/ROOT/pages/basics/middleware_setup.adoc +++ b/doc/modules/ROOT/pages/basics/middleware_setup.adoc @@ -20,14 +20,14 @@ Use the convenient plugin for defaults, either in your project's [source,clojure] ---- -:plugins [[cider/cider-nrepl "0.53.2"]] +:plugins [[cider/cider-nrepl "0.54.0"]] ---- A minimal `profiles.clj` for CIDER would be: [source,clojure] ---- -{:repl {:plugins [[cider/cider-nrepl "0.53.2"]]}} +{:repl {:plugins [[cider/cider-nrepl "0.54.0"]]}} ---- WARNING: Be careful not to place this in the `:user` profile, as this way CIDER's @@ -43,11 +43,11 @@ run `cider-connect` or `cider-connect-cljs`. [source,clojure] ---- - :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.53.2"}} + :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.54.0"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware]"]} :cider-cljs {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.339"} - cider/cider-nrepl {:mvn/version "0.53.2"} + cider/cider-nrepl {:mvn/version "0.54.0"} cider/piggieback {:mvn/version "0.6.0"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware,cider.piggieback/wrap-cljs-repl]"]} @@ -66,7 +66,7 @@ NOTE: Make sure you're using https://github.com/clojurephant/clojurephant[Clojur ---- dependencies { devImplementation 'nrepl:nrepl:0.9.0' - devImplementation 'cider:cider-nrepl:0.53.2' + devImplementation 'cider:cider-nrepl:0.54.0' } tasks.named('clojureRepl') { diff --git a/doc/modules/ROOT/pages/basics/up_and_running.adoc b/doc/modules/ROOT/pages/basics/up_and_running.adoc index d69a18fe4..b4bbfaf22 100644 --- a/doc/modules/ROOT/pages/basics/up_and_running.adoc +++ b/doc/modules/ROOT/pages/basics/up_and_running.adoc @@ -72,7 +72,7 @@ simple - CIDER passes the extra dependencies and nREPL configuration to your build tool in the command it runs to start the nREPL server. Here's how this looks for `tools.deps`: - $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.1"} cider/cider-nrepl {:mvn/version "0.53.2"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' + $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.1"} cider/cider-nrepl {:mvn/version "0.54.0"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' TIP: If you don't want `cider-jack-in` to inject dependencies automatically, set `cider-inject-dependencies-at-jack-in` to `nil`. Note that you'll have to setup @@ -332,7 +332,7 @@ It is also possible for plain `clj`, although the command is somewhat longer: [source,sh] ---- -$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.53.2"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" +$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.54.0"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" ---- Alternatively, you can start nREPL either manually or using the facilities diff --git a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc index 6166d1502..eb7ea99d7 100644 --- a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc +++ b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc @@ -62,7 +62,7 @@ And connect to it with `cider-connect`. ...For that to work, `shadow-cljs.edn` contents like the following are assumed: ```clj - :dependencies [[cider/cider-nrepl "0.53.2"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) + :dependencies [[cider/cider-nrepl "0.54.0"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) [refactor-nrepl/refactor-nrepl "3.9.0"]] ;; refactor-nrepl is optional :nrepl {:middleware [cider.nrepl/cider-middleware ;; it's advisable to explicitly add this middleware. It's automatically added by shadow-cljs (if available in the classpath), unless `:nrepl {:cider false}` diff --git a/doc/modules/ROOT/pages/cljs/up_and_running.adoc b/doc/modules/ROOT/pages/cljs/up_and_running.adoc index 13d157879..c52916a5f 100644 --- a/doc/modules/ROOT/pages/cljs/up_and_running.adoc +++ b/doc/modules/ROOT/pages/cljs/up_and_running.adoc @@ -61,7 +61,7 @@ or in `build.gradle`: ---- dependencies { devImplementation 'nrepl:nrepl:1.3.1' - devImplementation 'cider:cider-nrepl:0.53.2' + devImplementation 'cider:cider-nrepl:0.54.0' devImplementation 'cider:cider-piggieback:0.5.3' } diff --git a/test/cider-tests.el b/test/cider-tests.el index 69669f66c..e2e48e9c0 100644 --- a/test/cider-tests.el +++ b/test/cider-tests.el @@ -144,7 +144,7 @@ (describe "when there is a single dependency" (before-each (setq-local cider-injected-nrepl-version "0.9.0") - (setq-local cider-injected-middleware-version "0.53.2") + (setq-local cider-injected-middleware-version "0.54.0") (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t) @@ -155,7 +155,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.53.2\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.54.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -169,7 +169,7 @@ "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.53.2\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.54.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -182,7 +182,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure foo.bar/baz]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.53.2\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.54.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -196,7 +196,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.53.2") + (shell-quote-argument "cider/cider-nrepl:0.54.0") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -206,7 +206,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.53.2") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.54.0") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -223,7 +223,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.53.2\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.54.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -237,7 +237,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.53.2") + (shell-quote-argument "cider/cider-nrepl:0.54.0") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -259,7 +259,7 @@ :to-equal (concat "-o -U update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.53.2\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.54.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -271,7 +271,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.53.2") + (shell-quote-argument "cider/cider-nrepl:0.54.0") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -280,7 +280,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.53.2") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.54.0") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -295,14 +295,14 @@ (setq-local cider-jack-in-nrepl-middlewares '(("refactor-nrepl.middleware/wrap-refactor" :predicate middlewares-predicate) "cider.nrepl/cider-middleware" ("another/middleware")))) (it "includes plugins whose predicates return true" (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.53.2")))) + :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.54.0")))) (it "includes middlewares whose predicates return true" (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware" "another/middleware"))) (it "ignores plugins whose predicates return false" (spy-on 'plugins-predicate :and-return-value nil) (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("cider/cider-nrepl" "0.53.2"))) + :to-equal '(("cider/cider-nrepl" "0.54.0"))) (spy-on 'middlewares-predicate :and-return-value nil) (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("cider.nrepl/cider-middleware" "another/middleware"))) @@ -331,7 +331,7 @@ :and-return-value '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware")) (spy-on 'cider-jack-in-normalized-lein-plugins :and-return-value '(("refactor-nrepl" "2.0.0") - ("cider/cider-nrepl" "0.53.2") + ("cider/cider-nrepl" "0.54.0") ("mx.cider/lein-enrich-classpath" "1.19.3"))) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t)) @@ -342,7 +342,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.53.2\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.54.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -361,7 +361,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.53.2") + (shell-quote-argument "cider/cider-nrepl:0.54.0") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -456,7 +456,7 @@ (setq-local cider-jack-in-dependencies nil) (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.53.2\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.54.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) @@ -471,7 +471,7 @@ (it "allows specifying custom aliases with `cider-clojure-cli-aliases`" (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.53.2\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.54.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:dev:test:cider/nrepl") ""))) (setq-local cider-jack-in-dependencies nil) @@ -489,7 +489,7 @@ (it (format "should remove duplicates, yielding the same result (for %S command invocation)" command) ;; repeat the same test for PowerShell too (let ((expected (string-join `("-Sdeps " - ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.53.2\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" + ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.54.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" command) " -M:dev:test:cider/nrepl") ""))) @@ -499,7 +499,7 @@ :to-equal expected)))) (it "handles aliases correctly" (let ((expected (string-join `("-Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.53.2\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.54.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -527,7 +527,7 @@ :to-equal expected))))) (it "allows for global options" (let ((expected (string-join `("-J-Xverify:none -Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.53.2\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.54.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -538,7 +538,7 @@ (setq-local cider-jack-in-dependencies '(("org.clojure/tools.deps" (("git/sha" . "6ae2b6f71773de7549d7f22759e8b09fec27f0d9") ("git/url" . "https://github.com/clojure/tools.deps/"))))) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.53.2\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.54.0\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) From 4bfde698e4a367a77eda240c27b29ca97a136bf8 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Sat, 5 Apr 2025 17:03:02 +0300 Subject: [PATCH 108/149] [inspector] Introduce analytics feature --- cider-inspector.el | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/cider-inspector.el b/cider-inspector.el index 5621f6d9f..365bede3c 100644 --- a/cider-inspector.el +++ b/cider-inspector.el @@ -91,6 +91,12 @@ by clicking or navigating to them by other means." :type 'boolean :package-version '(cider . "0.27.0")) +(defcustom cider-inspector-display-analytics-hint t + "When true, display hint about analytics feature for eligible objects. +Can be turned to nil once the user sees and acknowledges the feature." + :type 'boolean + :package-version '(cider . "1.18.0")) + (defvar cider-inspector-uninteresting-regexp (concat "nil" ; nils are not interesting "\\|:" clojure--sym-regexp ; nor keywords @@ -125,6 +131,7 @@ by clicking or navigating to them by other means." (define-key map "c" #'cider-inspector-set-max-coll-size) (define-key map "C" #'cider-inspector-set-max-nested-depth) (define-key map "v" #'cider-inspector-toggle-view-mode) + (define-key map "y" #'cider-inspector-display-analytics) (define-key map "d" #'cider-inspector-def-current-val) (define-key map "t" #'cider-inspector-tap-current-val) (define-key map "1" #'cider-inspector-tap-at-point) @@ -325,6 +332,17 @@ MAX-NESTED-DEPTH is the new value." (interactive (list (read-number "Max nested depth: " cider-inspector-max-nested-depth))) (cider-inspector--refresh-with-opts "max-nested-depth" max-nested-depth)) +(defun cider-inspector-display-analytics () + "Toggle the display of analytics for the inspected object." + (interactive) + ;; Disable hint about analytics feature so that it is never displayed again. + (when cider-inspector-display-analytics-hint + (customize-set-variable 'cider-inspector-display-analytics-hint nil)) + (let ((result (cider-nrepl-send-sync-request `("op" "inspect-display-analytics") + (cider-current-repl)))) + (when (nrepl-dict-get result "value") + (cider-inspector--render-value result :next-inspectable)))) + (defun cider-inspector-toggle-view-mode () "Toggle the view mode of the inspector between normal and object view mode." (interactive) @@ -490,7 +508,9 @@ MAX-COLL-SIZE if non nil." ,@(when cider-inspector-max-coll-size `("max-coll-size" ,cider-inspector-max-coll-size)) ,@(when cider-inspector-max-nested-depth - `("max-nested-depth" ,cider-inspector-max-nested-depth)))) + `("max-nested-depth" ,cider-inspector-max-nested-depth)) + ,@(when cider-inspector-display-analytics-hint + `("display-analytics-hint" "true")))) (cider-nrepl-send-sync-request (cider-current-repl)))) (declare-function cider-set-buffer-ns "cider-mode") From 4b175e63877b2976bcf2ddd7c92f114900de9df5 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Sat, 5 Apr 2025 17:08:37 +0300 Subject: [PATCH 109/149] [docs] Update inspector docs --- CHANGELOG.md | 15 ++++++++++++--- doc/modules/ROOT/pages/debugging/inspector.adoc | 13 +++++++------ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 886845a37..e0c646c17 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## master (unreleased) +### New features + +- [#3802](https://github.com/clojure-emacs/cider/issues/3802): Inspector analytics. +- [#3802](https://github.com/clojure-emacs/cider/issues/3802): Inspector table view-mode. +- [orchard#320](https://github.com/clojure-emacs/orchard/pull/320): Info: recognize printed Java classes/methods and munged Clojure functions in stacktrace outputs. + ### Changes - [#3782](https://github.com/clojure-emacs/cider/issues/3782): **(Breaking)** Drop official support for Emacs 26. @@ -9,18 +15,21 @@ - `cider-stacktrace-analyze-string` and `cider-stacktrace-analyze-at-point` functions. - Automatic stacktrace parsing in log viewer. - Bump the injected `cider-nrepl` to [0.54.0](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0540-2025-04-05). - - Info: recognize printed Java classes/methods and munged Clojure functions in stacktrace outputs. + - [compliment#122](https://github.com/alexander-yakushev/compliment/pull/122): Completion: sort candidates by priority. - Inspector: add dedicated view for Exceptions. - Stop vendoring Haystack dependency. - - Stop vendoring Puget dependency. You can still user `puget` pretty-printing for CIDER, but you need to depend on Puget explicitly. If Puget is not found on the classpath, CIDER will revert to `clojure.pprint/pprint` for pretty-printing. + - Stop vendoring Puget dependency. You can still use `puget` pretty-printer in CIDER, but you need to depend on Puget explicitly. If Puget is not found on the classpath, CIDER will revert to `clojure.pprint/pprint` for pretty-printing. - [#3777](https://github.com/clojure-emacs/cider/issues/3777): Inspector no longer displays parsed Javadoc for Java classes and members. -- [#3784](https://github.com/clojure-emacs/cider/issues/3784): Inspector: make point less erratic when navigating between inspector screens. - [#3790](https://github.com/clojure-emacs/cider/issues/3790): Stacktrace: show messages and data for all exception causes by default. - [#3789](https://github.com/clojure-emacs/cider/issues/3789): Refactor and simplify exception handling. - [#3789](https://github.com/clojure-emacs/cider/issues/3796): Completion: disable client-side sorting (defer to backend-provided candidate order). - [#3797](https://github.com/clojure-emacs/cider/issues/3797): Completion: enable `cider-completion-style` by default (this enables richer completion suggestions where candidates don't have to strictly match the prefix). - [#3803](https://github.com/clojure-emacs/cider/pull/3803): Enable dynamic indentation for `clojure-ts-mode`. +### Bugs fixed + +- [#3784](https://github.com/clojure-emacs/cider/issues/3784): Inspector: make point less erratic when navigating between inspector screens. + ## 1.17.1 (2025-02-25) ### Changes diff --git a/doc/modules/ROOT/pages/debugging/inspector.adoc b/doc/modules/ROOT/pages/debugging/inspector.adoc index 2076d598d..f6b129886 100644 --- a/doc/modules/ROOT/pages/debugging/inspector.adoc +++ b/doc/modules/ROOT/pages/debugging/inspector.adoc @@ -36,10 +36,6 @@ You'll have access to additional keybindings in the inspector buffer | `cider-inspector-next-inspectable-object` | Navigate inspectable sub-objects -| kbd:[f] and kbd:[b] -| `forward-char`, `backward-char` -| Navigate across characters on a line - | kbd:[Return] | `cider-inspector-operate-on-point` | Inspect sub-objects @@ -52,7 +48,7 @@ You'll have access to additional keybindings in the inspector buffer | `cider-inspector-refresh` | Refresh the inspector (e.g. if viewing an atom/ref/agent) -| kbd:[SPC] or kbd:[Next] +| kbd:[SPC] or kbd:[Next] | `cider-inspector-next-page` | Jump to next page in paginated view @@ -60,6 +56,10 @@ You'll have access to additional keybindings in the inspector buffer | `cider-inspector-prev-page` | Jump to previous page in paginated view +| kbd:[y] +| `cider-inspector-display-analytics` +| Calculate and display analytics for the inspected object. Analytics is supported for lists of numbers, strings, tuples, maps; for large key-value maps. + | kbd:[s] | `cider-inspector-set-page-size` | Set a new page size in paginated view @@ -78,7 +78,8 @@ You'll have access to additional keybindings in the inspector buffer | kbd:[v] | `cider-inspector-toggle-view-mode` -| Switch the rendering of the current value between `:normal` and `:object` view mode. In `:object` mode, any value is rendered as a plain Java object (by displaying its fields) instead of custom rendering rules that the Inspector applies in `:normal` mode. +| Switch the rendering of the current value between `:normal`, `:table`, and + `:object` view modes. In `:table` mode, render the value as a table (only supported for sequences of maps or tuples). In `:object` mode, any value is rendered as a plain Java object (by displaying its fields) instead of custom rendering rules that the Inspector applies in `:normal` mode. | kbd:[d] | `cider-inspector-def-current-val` From 2b2492beeef176e7bff0c92a257849b32842d1c3 Mon Sep 17 00:00:00 2001 From: Roman Rudakov Date: Thu, 27 Feb 2025 17:52:55 +0100 Subject: [PATCH 110/149] Fix cider-find-keyword for clojure-ts-mode --- CHANGELOG.md | 4 + cider-find.el | 2 +- cider-util.el | 16 ++++ test/clojure-ts-mode/cider-find-ts-tests.el | 88 +++++++++++++++++++++ test/clojure-ts-mode/cider-util-ts-tests.el | 34 ++++++++ 5 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 test/clojure-ts-mode/cider-find-ts-tests.el diff --git a/CHANGELOG.md b/CHANGELOG.md index e0c646c17..24a45f924 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,10 @@ - [#3784](https://github.com/clojure-emacs/cider/issues/3784): Inspector: make point less erratic when navigating between inspector screens. +### Bugs fixed + +- `cider-find-keyword` doesn't work with `clojure-ts-mode`. + ## 1.17.1 (2025-02-25) ### Changes diff --git a/cider-find.el b/cider-find.el index baabf8bf1..7e6550e09 100644 --- a/cider-find.el +++ b/cider-find.el @@ -206,7 +206,7 @@ are disregarded." (current-point (point))) (while continue (setq found (and (search-forward-regexp kw nil 'noerror) - (member 'clojure-keyword-face (text-properties-at (1- (point)))))) + (cider-keyword-at-point-p (1- (point))))) (setq continue (and (not found) ;; if we haven't moved, there's nothing left to search: (not (equal current-point (point))))) diff --git a/cider-util.el b/cider-util.el index 4cd424439..0f2e360c8 100644 --- a/cider-util.el +++ b/cider-util.el @@ -69,6 +69,10 @@ Setting this to nil removes the fontification restriction." "Return non-nil if current buffer is managed by a ClojureC major mode." (derived-mode-p 'clojurec-mode 'clojure-ts-clojurec-mode)) +(defun cider-clojure-ts-mode-p () + "Return non-nil if current buffer is managed by a Clojure[TS] major mode." + (derived-mode-p 'clojure-ts-mode)) + (defun cider-util--clojure-buffers () "Return a list of all existing `clojure-mode' buffers." (seq-filter @@ -107,6 +111,18 @@ If BUFFER is provided act on that buffer instead." (with-current-buffer (or buffer (current-buffer)) (or (cider-clojurec-major-mode-p)))) +(defun cider-keyword-at-point-p (&optional point) + "Return non-nil if POINT is in a Clojure keyword. + +Take into consideration current major mode." + (let ((pos (or point (point)))) + (if (and (cider-clojure-ts-mode-p) + (fboundp 'clojure-ts--keyword-node-p) + (fboundp 'treesit-node-parent) + (fboundp 'treesit-node-at)) + (clojure-ts--keyword-node-p (treesit-node-parent (treesit-node-at pos))) + (member 'clojure-keyword-face (text-properties-at pos))))) + ;;; Thing at point diff --git a/test/clojure-ts-mode/cider-find-ts-tests.el b/test/clojure-ts-mode/cider-find-ts-tests.el new file mode 100644 index 000000000..d3db256f3 --- /dev/null +++ b/test/clojure-ts-mode/cider-find-ts-tests.el @@ -0,0 +1,88 @@ +;;; cider-find-ts-tests.el --- -*- lexical-binding: t; -*- + +;; Copyright (C) 2025 Roman Rudakov + +;; Author: Roman Rudakov + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; This is part of CIDER + +;;; Code: + +(require 'buttercup) +(require 'cider-find) + +(describe "cider--find-keyword-loc (TreeSitter)" + (it "finds the given keyword, discarding false positives" + (with-clojure-ts-buffer "(ns some.ns) +;; ::foo +\"::foo\" +#_::foo +::foobar +\" +::foo +\" +::foo +more +stuff" + (let* ((sample-buffer (current-buffer))) + (spy-on 'cider-ensure-connected :and-return-value t) + (spy-on 'cider-sync-request:ns-path :and-call-fake (lambda (kw-ns _) + kw-ns)) + (spy-on 'cider-resolve-alias :and-call-fake (lambda (_ns ns-qualifier) + ns-qualifier)) + (spy-on 'cider-find-file :and-call-fake (lambda (kw-ns) + (when (equal kw-ns "some.ns") + sample-buffer))) + + (nrepl-dbind-response (cider--find-keyword-loc "::some.ns/foo") (dest dest-point) + (expect dest-point :to-equal 63) + (with-current-buffer dest + (goto-char dest-point) + ;; important - ensure that we're looking at ::foo and not ::foobar: + (expect (cider-symbol-at-point 'look-back) :to-equal "::foo"))) + + (nrepl-dbind-response (cider--find-keyword-loc "::foo") (dest dest-point) + (expect dest-point :to-equal 63) + (with-current-buffer dest + (goto-char dest-point) + ;; important - ensure that we're looking at ::foo and not ::foobar: + (expect (cider-symbol-at-point 'look-back) :to-equal "::foo"))) + + (nrepl-dbind-response (cider--find-keyword-loc ":some.ns/foo") (dest dest-point) + (expect dest-point :to-equal 63) + (with-current-buffer dest + (goto-char dest-point) + ;; important - ensure that we're looking at ::foo and not ::foobar: + (expect (cider-symbol-at-point 'look-back) :to-equal "::foo"))) + + (nrepl-dbind-response (cider--find-keyword-loc "::some.ns/bar") (dest dest-point) + (expect dest-point :to-equal nil)) + + (nrepl-dbind-response (cider--find-keyword-loc ":some.ns/bar") (dest dest-point) + (expect dest-point :to-equal nil)) + + (expect (cider--find-keyword-loc ":foo") :to-throw 'user-error) + + (nrepl-dbind-response (cider--find-keyword-loc ":unrelated/foo") (dest dest-point) + (expect dest-point :to-equal nil)) + + (nrepl-dbind-response (cider--find-keyword-loc "::unrelated/foo") (dest dest-point) + (expect dest-point :to-equal nil)))))) + +(provide 'cider-find-ts-tests) +;;; cider-find-ts-tests.el ends here diff --git a/test/clojure-ts-mode/cider-util-ts-tests.el b/test/clojure-ts-mode/cider-util-ts-tests.el index 186eb6aaa..3eeede016 100644 --- a/test/clojure-ts-mode/cider-util-ts-tests.el +++ b/test/clojure-ts-mode/cider-util-ts-tests.el @@ -32,6 +32,24 @@ (require 'clojure-ts-mode) (require 'cider-util) +(defun with-clojure-ts-buffer--go-to-point () + (when (search-forward "|" nil 'noerror) + (delete-char -1))) + +(defmacro with-clojure-ts-buffer (contents &rest body) + "Execute BODY in a clojure-ts-mode buffer with CONTENTS + +CONTENTS is a string containing an optional character `|' indicating the +cursor position. If not present, the cursor is placed at the end of the +buffer." + (declare (indent 1)) + `(with-temp-buffer + (delay-mode-hooks (clojure-ts-mode)) + (insert ,contents) + (goto-char (point-min)) + (with-clojure-ts-buffer--go-to-point) + ,@body)) + (describe "clojure-ts-mode activation" (it "test suite installs the tree-sitter-clojure grammar" (with-temp-buffer @@ -56,4 +74,20 @@ (expect (cider-clojurescript-major-mode-p) :not :to-be-truthy) (expect (cider-clojurec-major-mode-p) :to-be-truthy)))) +(describe "cider-keyword-at-p" + (it "returns `t' if in keyword" + (with-clojure-ts-buffer ":he|llo" + (expect (cider-keyword-at-point-p) :to-be-truthy) + (expect (cider-keyword-at-point-p (point)) :to-be-truthy)) + (with-clojure-ts-buffer "::he|llo" + (expect (cider-keyword-at-point-p) :to-be-truthy) + (expect (cider-keyword-at-point-p (point)) :to-be-truthy)) + (with-clojure-ts-buffer ":some.names|pace/hello" + (expect (cider-keyword-at-point-p) :to-be-truthy) + (expect (cider-keyword-at-point-p (point)) :to-be-truthy))) + (it "returns `nil' if not in keyword" + (with-clojure-ts-buffer ":hello \"|World\"" + (expect (cider-keyword-at-point-p) :not :to-be-truthy) + (expect (cider-keyword-at-point-p (point)) :not :to-be-truthy)))) + (provide 'cider-ts-util-tests) From 9a28cbb5eec157608a109ee50d815e4c75eb3842 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Thu, 10 Apr 2025 11:28:34 +0300 Subject: [PATCH 111/149] [test] Temporarily pause testing on Emacs snapshot/master --- .circleci/config.yml | 9 +++++---- .github/workflows/test.yml | 4 +++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d1e6dc55a..6c041601d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -150,10 +150,11 @@ workflows: requires: - test-lint - test-shellcheck - - test-ubuntu-emacs-master: - requires: - - test-lint - - test-shellcheck + # TODO: reenable once this issue is fixed https://app.circleci.com/pipelines/github/clojure-emacs/cider/2931/workflows/b7284759-c6d1-44dd-bbfc-e71709e3f62f/jobs/17699 + # - test-ubuntu-emacs-master: + # requires: + # - test-lint + # - test-shellcheck - test-windows-emacs-latest: requires: - test-lint diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c8e729f35..4009ac718 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -23,7 +23,9 @@ jobs: matrix: # Test all Emacs versions on Ubuntu. os: [ubuntu-latest] - emacs_version: ['27.2', '28.2', '29.3', '30.1', 'snapshot'] + # TODO: reenable snapshot once this is fixed https://app.circleci.com/pipelines/github/clojure-emacs/cider/2931/workflows/b7284759-c6d1-44dd-bbfc-e71709e3f62f/jobs/17699 + # emacs_version: ['27.2', '28.2', '29.3', '30.1', 'snapshot'] + emacs_version: ['27.2', '28.2', '29.3', '30.1'] java_version: ['21'] include: # For other OSes, test only the latest stable Emacs version. From 25792e699f9ce65e27cde2c44aa0f254d3d87dca Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Thu, 10 Apr 2025 10:53:47 +0300 Subject: [PATCH 112/149] Bump cider-nrepl to 0.55.0 --- CHANGELOG.md | 2 +- cider.el | 2 +- dev/docker-sample-project/project.clj | 2 +- dev/tramp-sample-project/project.clj | 2 +- .../ROOT/pages/basics/middleware_setup.adoc | 10 ++--- .../ROOT/pages/basics/up_and_running.adoc | 4 +- doc/modules/ROOT/pages/cljs/shadow-cljs.adoc | 2 +- .../ROOT/pages/cljs/up_and_running.adoc | 2 +- test/cider-tests.el | 44 +++++++++---------- 9 files changed, 35 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 24a45f924..12e062268 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ - [#3793](https://github.com/clojure-emacs/cider/issues/3793): **(Breaking)** Remove features that relied on printed exception parsing: - `cider-stacktrace-analyze-string` and `cider-stacktrace-analyze-at-point` functions. - Automatic stacktrace parsing in log viewer. -- Bump the injected `cider-nrepl` to [0.54.0](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0540-2025-04-05). +- Bump the injected `cider-nrepl` to [0.55.0](https://github.com/clojure-emacs/cider-nrepl/blob/master/CHANGELOG.md#0550-2025-04-10). - [compliment#122](https://github.com/alexander-yakushev/compliment/pull/122): Completion: sort candidates by priority. - Inspector: add dedicated view for Exceptions. - Stop vendoring Haystack dependency. diff --git a/cider.el b/cider.el index c1d292fcf..c82d92593 100644 --- a/cider.el +++ b/cider.el @@ -573,7 +573,7 @@ the artifact.") Used when `cider-jack-in-auto-inject-clojure' is set to `latest'.") -(defconst cider-required-middleware-version "0.54.0" +(defconst cider-required-middleware-version "0.55.0" "The CIDER nREPL version that's known to work properly with CIDER.") (defcustom cider-injected-middleware-version cider-required-middleware-version diff --git a/dev/docker-sample-project/project.clj b/dev/docker-sample-project/project.clj index 550cf05dd..06ec5d038 100644 --- a/dev/docker-sample-project/project.clj +++ b/dev/docker-sample-project/project.clj @@ -2,4 +2,4 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.54.0"]]) + :plugins [[cider/cider-nrepl "0.55.0"]]) diff --git a/dev/tramp-sample-project/project.clj b/dev/tramp-sample-project/project.clj index aa2a1c93c..031157ff4 100644 --- a/dev/tramp-sample-project/project.clj +++ b/dev/tramp-sample-project/project.clj @@ -2,5 +2,5 @@ :dependencies [[org.clojure/clojure "1.11.1"] [clj-http "3.12.3"]] :source-paths ["src"] - :plugins [[cider/cider-nrepl "0.54.0"] + :plugins [[cider/cider-nrepl "0.55.0"] [refactor-nrepl "3.9.0"]]) diff --git a/doc/modules/ROOT/pages/basics/middleware_setup.adoc b/doc/modules/ROOT/pages/basics/middleware_setup.adoc index 611f52759..bef3bcf80 100644 --- a/doc/modules/ROOT/pages/basics/middleware_setup.adoc +++ b/doc/modules/ROOT/pages/basics/middleware_setup.adoc @@ -20,14 +20,14 @@ Use the convenient plugin for defaults, either in your project's [source,clojure] ---- -:plugins [[cider/cider-nrepl "0.54.0"]] +:plugins [[cider/cider-nrepl "0.55.0"]] ---- A minimal `profiles.clj` for CIDER would be: [source,clojure] ---- -{:repl {:plugins [[cider/cider-nrepl "0.54.0"]]}} +{:repl {:plugins [[cider/cider-nrepl "0.55.0"]]}} ---- WARNING: Be careful not to place this in the `:user` profile, as this way CIDER's @@ -43,11 +43,11 @@ run `cider-connect` or `cider-connect-cljs`. [source,clojure] ---- - :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.54.0"}} + :cider-clj {:extra-deps {cider/cider-nrepl {:mvn/version "0.55.0"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware]"]} :cider-cljs {:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.339"} - cider/cider-nrepl {:mvn/version "0.54.0"} + cider/cider-nrepl {:mvn/version "0.55.0"} cider/piggieback {:mvn/version "0.6.0"}} :main-opts ["-m" "nrepl.cmdline" "--middleware" "[cider.nrepl/cider-middleware,cider.piggieback/wrap-cljs-repl]"]} @@ -66,7 +66,7 @@ NOTE: Make sure you're using https://github.com/clojurephant/clojurephant[Clojur ---- dependencies { devImplementation 'nrepl:nrepl:0.9.0' - devImplementation 'cider:cider-nrepl:0.54.0' + devImplementation 'cider:cider-nrepl:0.55.0' } tasks.named('clojureRepl') { diff --git a/doc/modules/ROOT/pages/basics/up_and_running.adoc b/doc/modules/ROOT/pages/basics/up_and_running.adoc index b4bbfaf22..86ba80086 100644 --- a/doc/modules/ROOT/pages/basics/up_and_running.adoc +++ b/doc/modules/ROOT/pages/basics/up_and_running.adoc @@ -72,7 +72,7 @@ simple - CIDER passes the extra dependencies and nREPL configuration to your build tool in the command it runs to start the nREPL server. Here's how this looks for `tools.deps`: - $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.1"} cider/cider-nrepl {:mvn/version "0.54.0"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' + $ clojure -Sdeps '{:deps {nrepl {:mvn/version "1.3.1"} cider/cider-nrepl {:mvn/version "0.55.0"}}}' -m nrepl.cmdline --middleware '["cider.nrepl/cider-middleware"]' TIP: If you don't want `cider-jack-in` to inject dependencies automatically, set `cider-inject-dependencies-at-jack-in` to `nil`. Note that you'll have to setup @@ -332,7 +332,7 @@ It is also possible for plain `clj`, although the command is somewhat longer: [source,sh] ---- -$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.54.0"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" +$ clj -Sdeps '{:deps {cider/cider-nrepl {:mvn/version "0.55.0"}}}' -m nrepl.cmdline --middleware "[cider.nrepl/cider-middleware]" ---- Alternatively, you can start nREPL either manually or using the facilities diff --git a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc index eb7ea99d7..3b429ed97 100644 --- a/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc +++ b/doc/modules/ROOT/pages/cljs/shadow-cljs.adoc @@ -62,7 +62,7 @@ And connect to it with `cider-connect`. ...For that to work, `shadow-cljs.edn` contents like the following are assumed: ```clj - :dependencies [[cider/cider-nrepl "0.54.0"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) + :dependencies [[cider/cider-nrepl "0.55.0"] ;; mandatory (unless it's inherited from deps.edn or otherwise present in the classpath of shadow-cljs's JVM process) [refactor-nrepl/refactor-nrepl "3.9.0"]] ;; refactor-nrepl is optional :nrepl {:middleware [cider.nrepl/cider-middleware ;; it's advisable to explicitly add this middleware. It's automatically added by shadow-cljs (if available in the classpath), unless `:nrepl {:cider false}` diff --git a/doc/modules/ROOT/pages/cljs/up_and_running.adoc b/doc/modules/ROOT/pages/cljs/up_and_running.adoc index c52916a5f..5609a2dd7 100644 --- a/doc/modules/ROOT/pages/cljs/up_and_running.adoc +++ b/doc/modules/ROOT/pages/cljs/up_and_running.adoc @@ -61,7 +61,7 @@ or in `build.gradle`: ---- dependencies { devImplementation 'nrepl:nrepl:1.3.1' - devImplementation 'cider:cider-nrepl:0.54.0' + devImplementation 'cider:cider-nrepl:0.55.0' devImplementation 'cider:cider-piggieback:0.5.3' } diff --git a/test/cider-tests.el b/test/cider-tests.el index e2e48e9c0..eb9fcbcef 100644 --- a/test/cider-tests.el +++ b/test/cider-tests.el @@ -144,7 +144,7 @@ (describe "when there is a single dependency" (before-each (setq-local cider-injected-nrepl-version "0.9.0") - (setq-local cider-injected-middleware-version "0.54.0") + (setq-local cider-injected-middleware-version "0.55.0") (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t) @@ -155,7 +155,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.54.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.55.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -169,7 +169,7 @@ "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.54.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.55.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -182,7 +182,7 @@ :to-equal (concat "update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\" :exclusions [org.clojure/clojure foo.bar/baz]]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.54.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.55.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -196,7 +196,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.54.0") + (shell-quote-argument "cider/cider-nrepl:0.55.0") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -206,7 +206,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.54.0") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.55.0") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -223,7 +223,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.54.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.55.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -237,7 +237,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.54.0") + (shell-quote-argument "cider/cider-nrepl:0.55.0") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -259,7 +259,7 @@ :to-equal (concat "-o -U update-in :dependencies conj " (shell-quote-argument "[nrepl/nrepl \"0.9.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.54.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.55.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -271,7 +271,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.54.0") + (shell-quote-argument "cider/cider-nrepl:0.55.0") " cider.tasks/add-middleware" " -m " (shell-quote-argument "cider.nrepl/cider-middleware") @@ -280,7 +280,7 @@ (expect (cider-inject-jack-in-dependencies "--no-daemon" ":clojureRepl" 'gradle) :to-equal (concat "--no-daemon " "-Pjdk.attach.allowAttachSelf " - (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.54.0") + (shell-quote-argument "-Pdev.clojurephant.jack-in.nrepl=nrepl:nrepl:0.9.0,cider:cider-nrepl:0.55.0") " :clojureRepl " (shell-quote-argument "--middleware=cider.nrepl/cider-middleware"))))) @@ -295,14 +295,14 @@ (setq-local cider-jack-in-nrepl-middlewares '(("refactor-nrepl.middleware/wrap-refactor" :predicate middlewares-predicate) "cider.nrepl/cider-middleware" ("another/middleware")))) (it "includes plugins whose predicates return true" (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.54.0")))) + :to-equal '(("refactor-nrepl" "2.0.0") ("cider/cider-nrepl" "0.55.0")))) (it "includes middlewares whose predicates return true" (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware" "another/middleware"))) (it "ignores plugins whose predicates return false" (spy-on 'plugins-predicate :and-return-value nil) (expect (cider-jack-in-normalized-lein-plugins) - :to-equal '(("cider/cider-nrepl" "0.54.0"))) + :to-equal '(("cider/cider-nrepl" "0.55.0"))) (spy-on 'middlewares-predicate :and-return-value nil) (expect (cider-jack-in-normalized-nrepl-middlewares) :to-equal '("cider.nrepl/cider-middleware" "another/middleware"))) @@ -331,7 +331,7 @@ :and-return-value '("refactor-nrepl.middleware/wrap-refactor" "cider.nrepl/cider-middleware")) (spy-on 'cider-jack-in-normalized-lein-plugins :and-return-value '(("refactor-nrepl" "2.0.0") - ("cider/cider-nrepl" "0.54.0") + ("cider/cider-nrepl" "0.55.0") ("mx.cider/lein-enrich-classpath" "1.19.3"))) (setq-local cider-jack-in-dependencies-exclusions '()) (setq-local cider-enrich-classpath t)) @@ -342,7 +342,7 @@ " -- update-in :plugins conj " (shell-quote-argument "[refactor-nrepl \"2.0.0\"]") " -- update-in :plugins conj " - (shell-quote-argument "[cider/cider-nrepl \"0.54.0\"]") + (shell-quote-argument "[cider/cider-nrepl \"0.55.0\"]") " -- update-in :plugins conj " (shell-quote-argument "[mx.cider/lein-enrich-classpath \"1.19.3\"]") " -- update-in :jvm-opts conj '\"-Djdk.attach.allowAttachSelf\"'" @@ -361,7 +361,7 @@ " -d " (shell-quote-argument "nrepl/nrepl:0.9.0") " -d " - (shell-quote-argument "cider/cider-nrepl:0.54.0") + (shell-quote-argument "cider/cider-nrepl:0.55.0") " -d " (shell-quote-argument "refactor-nrepl:2.0.0") " cider.tasks/add-middleware" @@ -456,7 +456,7 @@ (setq-local cider-jack-in-dependencies nil) (setq-local cider-jack-in-nrepl-middlewares '("cider.nrepl/cider-middleware")) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.54.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.55.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) @@ -471,7 +471,7 @@ (it "allows specifying custom aliases with `cider-clojure-cli-aliases`" (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.54.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.55.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:dev:test:cider/nrepl") ""))) (setq-local cider-jack-in-dependencies nil) @@ -489,7 +489,7 @@ (it (format "should remove duplicates, yielding the same result (for %S command invocation)" command) ;; repeat the same test for PowerShell too (let ((expected (string-join `("-Sdeps " - ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.54.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" + ,(cider--shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.55.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}" command) " -M:dev:test:cider/nrepl") ""))) @@ -499,7 +499,7 @@ :to-equal expected)))) (it "handles aliases correctly" (let ((expected (string-join `("-Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.54.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.55.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -527,7 +527,7 @@ :to-equal expected))))) (it "allows for global options" (let ((expected (string-join `("-J-Xverify:none -Sdeps " - ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.54.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {cider/cider-nrepl {:mvn/version \"0.55.0\"} nrepl/nrepl {:mvn/version \"0.9.0\"}} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:test:cider/nrepl") "")) (deps '(("nrepl/nrepl" "0.9.0")))) @@ -538,7 +538,7 @@ (setq-local cider-jack-in-dependencies '(("org.clojure/tools.deps" (("git/sha" . "6ae2b6f71773de7549d7f22759e8b09fec27f0d9") ("git/url" . "https://github.com/clojure/tools.deps/"))))) (let ((expected (string-join `("clojure -Sdeps " - ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.54.0\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") + ,(shell-quote-argument "{:deps {nrepl/nrepl {:mvn/version \"0.9.0\"} cider/cider-nrepl {:mvn/version \"0.55.0\"} org.clojure/tools.deps { :git/sha \"6ae2b6f71773de7549d7f22759e8b09fec27f0d9\" :git/url \"https://github.com/clojure/tools.deps/\" }} :aliases {:cider/nrepl {:jvm-opts [\"-Djdk.attach.allowAttachSelf\"], :main-opts [\"-m\" \"nrepl.cmdline\" \"--middleware\" \"[cider.nrepl/cider-middleware]\"]}}}") " -M:cider/nrepl") ""))) (setq-local cider-allow-jack-in-without-project t) From 1f090980079bbf4a0f3c12ec5d0453a2f7d9b792 Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Wed, 9 Apr 2025 20:02:38 +0300 Subject: [PATCH 113/149] [stacktrace] Allow inspecting ex-data directly --- CHANGELOG.md | 1 + cider-inspector.el | 20 +++--- cider-stacktrace.el | 58 +++++++++++++----- .../images/cider-stacktrace-inspect.gif | Bin 0 -> 1462061 bytes .../ROOT/pages/usage/dealing_with_errors.adoc | 15 +++-- 5 files changed, 62 insertions(+), 32 deletions(-) create mode 100644 doc/modules/ROOT/assets/images/cider-stacktrace-inspect.gif diff --git a/CHANGELOG.md b/CHANGELOG.md index 12e062268..084029458 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ - Stop vendoring Puget dependency. You can still use `puget` pretty-printer in CIDER, but you need to depend on Puget explicitly. If Puget is not found on the classpath, CIDER will revert to `clojure.pprint/pprint` for pretty-printing. - [#3777](https://github.com/clojure-emacs/cider/issues/3777): Inspector no longer displays parsed Javadoc for Java classes and members. - [#3790](https://github.com/clojure-emacs/cider/issues/3790): Stacktrace: show messages and data for all exception causes by default. +- [#3807](https://github.com/clojure-emacs/cider/issues/3807): Stacktrace: make exception data individually inspectable. - [#3789](https://github.com/clojure-emacs/cider/issues/3789): Refactor and simplify exception handling. - [#3789](https://github.com/clojure-emacs/cider/issues/3796): Completion: disable client-side sorting (defer to backend-provided candidate order). - [#3797](https://github.com/clojure-emacs/cider/issues/3797): Completion: enable `cider-completion-style` by default (this enables richer completion suggestions where candidates don't have to strictly match the prefix). diff --git a/cider-inspector.el b/cider-inspector.el index 365bede3c..705dd8ccb 100644 --- a/cider-inspector.el +++ b/cider-inspector.el @@ -252,11 +252,17 @@ See `cider-sync-request:inspect-push' and `cider-inspector--render-value'" (push (point) cider-inspector-location-stack) (cider-inspector--render-value result :next-inspectable)))) -(defun cider-inspector-inspect-last-exception (index) - "Inspects the exception in the cause stack identified by INDEX." +(defun cider-inspector-inspect-last-exception (index &optional ex-data) + "Inspects the exception in the cause stack identified by INDEX. +If EX-DATA is true, inspect ex-data of the exception instead." (interactive) (cl-assert (numberp index)) - (let ((result (cider-sync-request:inspect-last-exception index))) + (let ((result (cider-nrepl-send-sync-request + `("op" "inspect-last-exception" + "index" ,index + ,@(when ex-data + `("ex-data" "true"))) + (cider-current-repl)))) (when (nrepl-dict-get result "value") (setq cider-inspector-location-stack nil) (cider-inspector--render-value result :next-inspectable)))) @@ -423,14 +429,6 @@ current-namespace." (cider-nrepl-send-sync-request `("op" "inspect-previous-sibling") (cider-current-repl))) -;;;###autoload -(defun cider-sync-request:inspect-last-exception (index) - "Inspects the exception in the cause stack identified by INDEX." - (cl-assert (numberp index)) - (cider-nrepl-send-sync-request `("op" "inspect-last-exception" - "index" ,index) - (cider-current-repl))) - (defun cider-sync-request:inspect-next-sibling () "Inspect the next sibling value within a sequential parent." (cider-nrepl-send-sync-request `("op" "inspect-next-sibling") diff --git a/cider-stacktrace.el b/cider-stacktrace.el index 5686dc5e6..77ae4f938 100644 --- a/cider-stacktrace.el +++ b/cider-stacktrace.el @@ -796,27 +796,48 @@ the NAME. The whole group is prefixed by string INDENT." (declare-function cider-inspector-inspect-last-exception "cider-inspector") -(defun cider-stacktrace--inspect-class (event) - "Mouse handler for EVENT." +(defun cider-stacktrace--inspect-mouse (event &optional ex-data) + "Mouse handler for EVENT. +If EX-DATA is true, inspect ex-data of the exception instead." (interactive "e") (let* ((pos (posn-point (event-end event))) (window (posn-window (event-end event))) (buffer (window-buffer window)) (inspect-index (with-current-buffer buffer (get-text-property pos 'inspect-index)))) - (cider-inspector-inspect-last-exception inspect-index))) + (cider-inspector-inspect-last-exception inspect-index ex-data))) -(defun cider-stacktrace--inspect-class-kbd () - "Keyboard handler." +(defun cider-stacktrace--inspect-kbd (&optional ex-data) + "Keyboard handler. +If EX-DATA is true, inspect ex-data of the exception instead." (interactive) (when-let ((inspect-index (get-text-property (point) 'inspect-index))) - (cider-inspector-inspect-last-exception inspect-index))) + (cider-inspector-inspect-last-exception inspect-index ex-data))) + +(defun cider-stacktrace--inspect-ex-data-mouse (event) + "Mouse handler for EVENT." + (interactive "e") + (cider-stacktrace--inspect-mouse event t)) + +(defun cider-stacktrace--inspect-ex-data-kbd () + "Keyboard handler." + (interactive) + (cider-stacktrace--inspect-kbd t)) (defvar cider-stacktrace-exception-map (let ((map (make-sparse-keymap))) - (define-key map [mouse-1] #'cider-stacktrace--inspect-class) - (define-key map (kbd "p") #'cider-stacktrace--inspect-class-kbd) - (define-key map (kbd "i") #'cider-stacktrace--inspect-class-kbd) + (define-key map [mouse-1] #'cider-stacktrace--inspect-mouse) + (define-key map (kbd "p") #'cider-stacktrace--inspect-kbd) + (define-key map (kbd "i") #'cider-stacktrace--inspect-kbd) + (define-key map (kbd "RET") #'cider-stacktrace--inspect-kbd) + map)) + +(defvar cider-stacktrace-ex-data-map + (let ((map (make-sparse-keymap))) + (define-key map [mouse-1] #'cider-stacktrace--inspect-ex-data-mouse) + (define-key map (kbd "p") #'cider-stacktrace--inspect-ex-data-kbd) + (define-key map (kbd "i") #'cider-stacktrace--inspect-ex-data-kbd) + (define-key map (kbd "RET") #'cider-stacktrace--inspect-ex-data-kbd) map)) (defun cider-stacktrace-render-cause (buffer cause num note &optional inspect-index) @@ -839,10 +860,10 @@ make INSPECT-INDEX actionable if present." ,cider-stacktrace-exception-map) (insert (format "%d. " num) (propertize note 'font-lock-face 'font-lock-comment-face) " " - (propertize class 'font-lock-face class-face 'mouse-face 'highlight))) + (propertize class 'font-lock-face class-face 'mouse-face 'highlight) + "\n")) ;; Detail level 1: message + ex-data (cider-propertize-region '(detail 1) - (insert "\n") (if (equal class "clojure.lang.Compiler$CompilerException") (cider-stacktrace-render-compile-error buffer cause) (cider-stacktrace-emit-indented @@ -859,18 +880,25 @@ make INSPECT-INDEX actionable if present." (cider-stacktrace--emit-spec-problems spec (concat indent " "))) (when data (insert "\n") - (cider-stacktrace-emit-indented data indent nil t))) + (cider-propertize-region `(inspect-index + ,inspect-index + keymap + ,cider-stacktrace-ex-data-map + mouse-face + highlight) + (cider-stacktrace-emit-indented data indent nil t))) + (insert "\n")) ;; Detail level 2: stacktrace (cider-propertize-region '(detail 2) (let ((beg (point)) (bg `(:background ,cider-stacktrace-frames-background-color :extend t))) (dolist (frame stacktrace) - (insert "\n") - (cider-stacktrace-render-frame buffer frame)) + (cider-stacktrace-render-frame buffer frame) + (insert "\n")) (overlay-put (make-overlay beg (point)) 'font-lock-face bg))) ;; Add line break between causes, even when collapsed. (cider-propertize-region '(detail 0) - (insert "\n\n"))))))) + (insert "\n"))))))) (defun cider-stacktrace-initialize (causes) "Set and apply CAUSES initial visibility, filters, and cursor position." diff --git a/doc/modules/ROOT/assets/images/cider-stacktrace-inspect.gif b/doc/modules/ROOT/assets/images/cider-stacktrace-inspect.gif new file mode 100644 index 0000000000000000000000000000000000000000..9b1d355415fa59de7446bf5a707f9e7b177769a0 GIT binary patch literal 1462061 zcmeFX=Tj5h6ZcICNvHuVAT<=}C4ka<2LZ7oiiTbU4Mhk=3<)Hmhaz2wbP$myMGym_ zgdP>8$`z_~>Cz;Rzj^+J`^`Obf8Ly#^WvP{nf>lLv%3~n=9*g0Q07I(KXitFFfuVQ z0RYUbKvo_u-b;LZR}@7h#l=Y)673pl%E}rBdfIy71~+VsbPbIRjsIa{YHDg^W@c<| zX=Y{l|KpKj6`OeN+BI7n+uOJA+&EGCcgHFDgSdDhd^ac^TEwjs8b83SHESNxO!{#bA?DaZht__-I^;dn`USE-5S_ zDIwvFQKB*|(bhJpR5LjxAvq-}x!^7#J~k~i?Uj$utD5=@VqwNx>#W?|?4sw{<&Sgn zGI9#yaz2gZX13;54&`NKyoRaf=f5uaU{~lF41UHf(Q_vl3T=p<=$ z|LFTf@At{6AERSGzJHmVnwp~1r)S2de-nPrOwVj=&uo^`eooV7XtdS#SvU9j4wv~~ zBMS=)ON&eY$_H@1Fn z&ivk7`~Ca(7QJA%sb#m1yt}=-yS=wduim?JV{dzZ?;rHf`FX`*OH{ba?jP(ckssv(1zEgp;%1r*+b&M}JOF&Q4E{Pyg|E|Mc(i>EFM9zkL0B z^7rrQ+28*yf6vbT(%)7w&>6(&>~?0iZK`+LF@>?!p3mMAaGD=WK)d3t*&xjyq#4)%6)f2J7pO!40agTnt5^*?Rl z{tqbY|HP0YN8*nt6`lY2<1c|*o=OIYVw))sch^Q-wxQ)-KP zlc6SYLRNLfeQ7ecw1qMfZeIX$0AnT8ZAyl6H3L_tLu;i*3Jfu9!qyGtH)0fWpTnuX z4z^`>$=0u}Kde%6x`WJztO-wy-kaCTEwKG?zW>(iTcsk~t5TK6mx$(0<_Xo)jY08> zt?^Atw(Tfpb`hKAnprabocyD~=GysQg7CSvYYOtWTT_^?i?j_s{nK_7Q;UZBp;?i(E)$E!HT(W?r})x*JRNAuig-6i~Pi zt+x+|mC3U=zNY$^=bQvK9l`5p)Hgm?D6LXgch9~1y!S$irBua2s*U=}LYlp~>|*-u zyWWeh96Vy(@8wNzl2g`4(l?N1MqW$FnC?5m~EHjH>j`uQKx`YJC)y2rQy`S zSN4j??F8izinEM-RYFIfI{s9JLm>a5Nvx30#jsxC?pi5N+dhuTmF(A2^YK}L=c{nF z!f9tu_rkjLSFgi{=vE0rnVPO;FP{Ib0Exd%oUAD8L*)z#CtN96tfff3U9THdUt6!I zip1VgykBeHhe!Zh#9n`1GWRB+@L>R((<{!vcZmKQsnRK58rL>kw|eB?r~98V;)EKJ z;=RI|hdVgMJjymssNygjB;E&|1Ce=V;iSDtMtzU^u6#?# z8+wSwDh|Wyrav{pc6zG{bp!i^U#SKxiAJi+^(r(zjHA4WQ8nhcoaq71>uEfU0*X7> zhJobIj<-S7F0MeFboyyLMVQvtGAN2akHM1~In)k5SMatbh$Lu|H`@@sihrhq#uNo^ zN8C(}iy3~Ed?A~7Atmw7IH5912jw!N zSXEud6|Y)@%0tY>i-g&$0_8Km2K4i*hAFWL9iJIpD|lHmCoG+r-ozmumY(PLD-5+! zE|jmSwsI@OZlh(bOh}hqBAq1GUp@8stoL&Ms42Td9+A=d=tMCv?%=^=)t<}lah+fZ z1hvrOO~WDDlBAA107(!HnH9M_>h%5Rp6#93(ItCHK<%xldM)leOB41_VjYZHhk}Ys zxHnuEH)SK3L9wc}3eWi&M^Y*x&iDE1&74Ds%~YJ44~jA(DZD{ImMwfVU7swR&k zN1&vY>d(pJYRPiJ*3;mT79RSN$}D{rqvbQLr2D7H<(F>MThN#2>t5qoLWW;DovAJy zFCEO^7>eO69L(YAVE5&x8VOE`L(fZHbA`O3z=e1GkqCyLmv3(CZ~LV@DMLn|$TiX5 z9``vv`A^V

Mw2>D{xN6KLiOo%uI`f2T)V?p0M5{JH8xzc?o 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

ap59TjV@Co9^rmoD^L2=8|7!sZZ#kgA*y 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%0D|1lcQo<#nfl1XQXdK+L3A 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 z Ch#1dDQbK2dIwmBd1Ln6eY~^p=a!VBO$? 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
(R-TdarT)Y_s0}{ILE-J2>X$U5o64Yj$@e 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

Pj%D%K*GFL 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 z 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�XI@^M9a-fB!(kGdF>-g%h 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