summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--cider-browse-spec.el27
-rw-r--r--cider-doc.el21
3 files changed, 28 insertions, 21 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c08359f4..1f2a78fa 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,7 @@
### Changes
+* [#2029](https://github.com/clojure-emacs/cider/pull/2154) Make cider-doc use cider-browse-spec functionality to print the spec part of the doc buffer
* [#2151](https://github.com/clojure-emacs/cider/pull/2151) Improve formatting of spec in `cider-doc` buffer.
## 0.16.0 (2017-12-28)
diff --git a/cider-browse-spec.el b/cider-browse-spec.el
index da4440b2..d7ad00c5 100644
--- a/cider-browse-spec.el
+++ b/cider-browse-spec.el
@@ -36,7 +36,6 @@
(require 'cider-client)
(require 'cider-compat)
-(require 'cider-interaction)
(require 'cider-util)
(require 'cl-lib)
(require 'nrepl-dict)
@@ -233,16 +232,31 @@ Display TITLE at the top and SPECS are indented underneath."
;; prettier (s/fspec )
((cider--spec-fn-p form-tag "fspec")
(thread-last (seq-partition (cl-rest form) 2)
+ (cl-remove-if (lambda (s) (and (stringp (cl-second s))
+ (string-empty-p (cl-second s)))))
(mapcar (lambda (s)
- (concat "\n" (cl-first s) " " (cider-browse-spec--pprint (cl-second s)))))
+ (format "\n%-11s: %s" (pcase (cl-first s)
+ (":args" "arguments")
+ (":ret" "returns")
+ (":fn" "invariants"))
+ (cider-browse-spec--pprint (cl-second s)))))
(cl-reduce #'concat)
- (format "(s/fspec \n %s)")))
+ (format "%s")))
;; every other with no special management
(t (format "(%s %s)"
(cider-browse-spec--pprint form-tag)
(string-join (mapcar #'cider-browse-spec--pprint (cl-rest form)) " "))))))
(t (format "%s" form))))
+(defun cider-browse-spec--pprint-indented (spec-form)
+ "Given a SPEC-FORM returns a string with it pretty printed, indented and clojure font locked."
+ (with-temp-buffer
+ (clojure-mode)
+ (insert (cider-browse-spec--pprint spec-form))
+ (indent-region (point-min) (point-max))
+ (cider--font-lock-ensure)
+ (buffer-string)))
+
(defun cider-browse-spec--draw-spec-buffer (buffer spec spec-form)
"Reset contents of BUFFER and draws everything needed to browse the SPEC-FORM.
Display SPEC as a title and uses `cider-browse-spec--pprint' to display
@@ -252,12 +266,7 @@ a more user friendly representation of SPEC-FORM."
(cider--help-setup-xref (list #'cider-browse-spec spec) nil buffer)
(goto-char (point-max))
(insert (cider-font-lock-as-clojure spec) "\n\n")
- (insert (with-temp-buffer
- (clojure-mode)
- (insert (cider-browse-spec--pprint spec-form))
- (indent-region (point-min) (point-max))
- (cider--font-lock-ensure)
- (buffer-string)))
+ (insert (cider-browse-spec--pprint-indented spec-form))
(cider--make-back-forward-xrefs)
(current-buffer))))
diff --git a/cider-doc.el b/cider-doc.el
index aadd0dd3..7f7c2e97 100644
--- a/cider-doc.el
+++ b/cider-doc.el
@@ -36,6 +36,7 @@
(require 'org-table)
(require 'button)
(require 'easymenu)
+(require 'cider-browse-spec)
;;; Variables
@@ -461,18 +462,14 @@ Tables are marked to be ignored by line wrap."
(insert ".\n"))
(insert "\n")
(when spec
- (emit "Spec: " 'font-lock-function-name-face)
- (dolist (part spec)
- (let ((role (car part))
- (desc (cadr part)))
- (insert (format "%-4s: " role))
- (thread-first desc
- cider-sync-request:format-code
- cider-font-lock-as-clojure
- (split-string "\n")
- insert-rectangle))
- (insert "\n"))
- (insert "\n"))
+ (emit "Spec:" 'font-lock-function-name-face)
+ (insert (cider-browse-spec--pprint-indented spec))
+ (insert "\n\n")
+ (insert-text-button "Browse spec"
+ 'follow-link t
+ 'action (lambda (_)
+ (cider-browse-spec (format "%s/%s" ns name))))
+ (insert "\n\n"))
(if cider-docview-file
(progn
(insert (propertize (if class java-name clj-name)