Skip to content

Commit 93878f9

Browse files
[complete] Use :by-name candidate sorting
1 parent 3e6576a commit 93878f9

File tree

5 files changed

+26
-1
lines changed

5 files changed

+26
-1
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
## master (unreleased)
44

5+
* [#923](https://github.com/clojure-emacs/cider-nrepl/pull/923): Complete: make sorting order customizable.
6+
57
## 0.53.1 (2025-03-26)
68

79
* Bump `compliment` to [0.7.0](https://github.com/alexander-yakushev/compliment/blob/master/CHANGELOG.md#070-2025-03-25).

doc/modules/ROOT/pages/nrepl-api/ops.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ Required parameters::
139139
Optional parameters::
140140
* `:context` Completion context for compliment.
141141
* `:extra-metadata` List of extra-metadata fields. Possible values: arglists, doc.
142+
* `:sort-order` Sorting order of candidates. Possible values: by-name, by-length.
142143

143144

144145
Returns::

src/cider/nrepl.clj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ Depending on the type of the return value of the evaluation this middleware may
196196
"prefix" "The prefix for completion candidates"
197197
"session" "The current session"}
198198
:optional {"context" "Completion context for compliment."
199+
"sort-order" "Sorting order of candidates. Possible values: by-name, by-length."
199200
"extra-metadata" "List of extra-metadata fields. Possible values: arglists, doc."}
200201
:returns {"completions" "A list of possible completions"}}
201202
"complete-doc"

src/cider/nrepl/middleware/complete.clj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,13 @@
4545
:compliment.sources.local-bindings/local-bindings])
4646

4747
(defn complete
48-
[{:keys [ns prefix symbol context extra-metadata enhanced-cljs-completion?] :as msg}]
48+
[{:keys [ns prefix symbol context extra-metadata enhanced-cljs-completion? sort-order]
49+
:as msg}]
4950
;; TODO: Drop legacy symbol param in version 1.0
5051
(let [prefix (str (or prefix symbol))
5152
completion-opts {:ns (misc/as-sym ns)
5253
:context context
54+
:sort-order (or (some-> sort-order keyword) :by-length)
5355
:extra-metadata (set (map keyword extra-metadata))}]
5456
(if-let [cljs-env (cljs/grab-cljs-env msg)]
5557
;; ClojureScript completion

test/clj/cider/nrepl/middleware/complete_test.clj

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,25 @@
4040
:prefix "assoc"
4141
:extra-metadata ["arglists" "doc"]})))))
4242

43+
(testing "default sorting"
44+
(is+ (matchers/prefix [{:candidate "map"}
45+
{:candidate "map?"}
46+
{:candidate "mapv"}
47+
{:candidate "mapcat"}])
48+
(:completions (session/message {:op "complete"
49+
:ns "user"
50+
:prefix "map"}))))
51+
52+
(testing "by-name sorting"
53+
(is+ (matchers/prefix [{:candidate "map"}
54+
{:candidate "map-entry?"}
55+
{:candidate "map-indexed"}
56+
{:candidate "map?"}])
57+
(:completions (session/message {:op "complete"
58+
:ns "user"
59+
:prefix "map"
60+
:sort-order "by-name"}))))
61+
4362
(testing "macro metadata"
4463
(is+ {:arglists ["[name & opts+sigs]"]
4564
:doc string?}

0 commit comments

Comments
 (0)