branch: elpa/cider
commit 5964bd30d9a18144333e9c437879755aa029ce61
Author: Kato Muso <[email protected]>
Commit: GitHub <[email protected]>
Add an alternative way to display `cider-cheatsheet-select` (#3686)
Instead of having the multi-step selection process, which is the default
cider-cheatsheet-select behavior, we represent each candidate as a full path to
a var when cider-cheatsheet-select is called with a prefix argument. This can
be handy with fuzzy completion style and vertical candidates display.
---
CHANGELOG.md | 1 +
cider-cheatsheet.el | 40 +++++++++++++++++++++++++++++-----------
2 files changed, 30 insertions(+), 11 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1154d51786..97c8e10e4f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@
- [#3681](https://github.com/clojure-emacs/cider/pull/3681): Add an
alternative way to display cheatsheet in a buffer and make it the default.
- Current `cider-cheatsheet` command is renamed to `cider-cheatsheet-select`.
- New way to display cheatsheet in a buffer is available with
`cider-cheatsheet` command.
+- [#3686](https://github.com/clojure-emacs/cider/pull/3686): Add an
alternative way to display `cider-cheatsheet-select` when called with a prefix
argument.
- [#3632](https://github.com/clojure-emacs/cider/pull/3623): Add new
configuration variable `cider-clojure-cli-global-aliases`.
- [#3366](https://github.com/clojure-emacs/cider/pull/3366): Support display
of error overlays with `#dbg!` and `#break!` reader macros.
- [#3622](https://github.com/clojure-emacs/cider/pull/3461): Basic support for
using CIDER from
[clojure-ts-mode](https://github.com/clojure-emacs/clojure-ts-mode).
diff --git a/cider-cheatsheet.el b/cider-cheatsheet.el
index 86fc745b9c..6ab38fc60e 100644
--- a/cider-cheatsheet.el
+++ b/cider-cheatsheet.el
@@ -32,6 +32,7 @@
(require 'cl-lib)
(require 'map)
(require 'seq)
+(require 'subr-x)
(defconst cider-cheatsheet-hierarchy
'(("Documentation"
@@ -549,18 +550,35 @@ This list is supposed to have the following format:
(mapcar #'symbol-name vars)
(mapcar (lambda (var) (format "%s/%s" ns var)) vars))))
+(defun cider-cheatsheet--flatten-hierarchy (hierarchy &optional sections)
+ "Transform HIERARCHY to lists each representing a path with SECTIONS before
var."
+ (seq-mapcat (lambda (node)
+ (if (stringp (car node))
+ (cider-cheatsheet--flatten-hierarchy (cdr node) (cons (car
node) sections))
+ (mapcar (lambda (var) (reverse (cons var sections)))
+ (cider-cheatsheet--expand-vars node))))
+ hierarchy))
+
;;;###autoload
-(defun cider-cheatsheet-select ()
- "Navigate cheatsheet sections and show documentation for selected var."
- (interactive)
- (let ((hierarchy cider-cheatsheet-hierarchy))
- (while (stringp (caar hierarchy))
- (let* ((sections (mapcar #'car hierarchy))
- (section (completing-read "Select section: " sections)))
- (setq hierarchy (map-elt hierarchy section))))
- (let* ((vars (seq-mapcat #'cider-cheatsheet--expand-vars hierarchy))
- (var (completing-read "Select var: " vars)))
- (cider-doc-lookup var))))
+(defun cider-cheatsheet-select (&optional flat)
+ "Navigate cheatsheet sections and show documentation for selected var.
+
+With a prefix argument FLAT, represent each candidate as a full path to var."
+ (interactive "P")
+ (if flat
+ (let* ((hierarchy (cider-cheatsheet--flatten-hierarchy
cider-cheatsheet-hierarchy))
+ (paths (mapcar (lambda (sections) (string-join sections " > "))
hierarchy))
+ (path (completing-read "Select path: " paths))
+ (var (car (last (split-string path " > ")))))
+ (cider-doc-lookup var))
+ (let ((hierarchy cider-cheatsheet-hierarchy))
+ (while (stringp (caar hierarchy))
+ (let* ((sections (mapcar #'car hierarchy))
+ (section (completing-read "Select section: " sections)))
+ (setq hierarchy (map-elt hierarchy section))))
+ (let* ((vars (seq-mapcat #'cider-cheatsheet--expand-vars hierarchy))
+ (var (completing-read "Select var: " vars)))
+ (cider-doc-lookup var)))))
(cl-defun cider-cheatsheet--insert-hierarchy (hierarchy &optional (level 0))
"Insert HIERARCHY with visual indentation for LEVEL."