Skip to content

Commit 3c72deb

Browse files
vemvbbatsov
authored andcommittedApr 5, 2021

File tree

7 files changed

+59
-39
lines changed

7 files changed

+59
-39
lines changed
 

‎.clj-kondo/config.edn

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
(cider.nrepl.middleware.util.instrument/instrument-special-form)
55
(cider.nrepl.middleware.util.instrument/instrument-coll)
66
(cider.nrepl.print-method/def-print-method)]}
7+
:unused-import {:level :off}
78
:unresolved-namespace {:exclude [clojure.main]}}
89
:output {:progress true
910
:exclude-files ["data_readers" "tasks"]}}

‎project.clj

+1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@
8787
:global-vars {*assert* true}}
8888

8989
:test {:source-paths ["test/src"]
90+
:jvm-opts ["-Dcider.internal.test.cljs-suitable-enabled=true"]
9091
:java-source-paths ["test/java"]
9192
:resource-paths ["test/resources"]
9293
:dependencies [[pjstadig/humane-test-output "0.10.0"]

‎src/cider/nrepl/middleware/complete.clj

+15-4
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,15 @@
1010
[orchard.misc :as misc]
1111
[suitable.compliment.sources.cljs :as suitable-sources]))
1212

13+
(def suitable-enabled? (System/getProperty "cider.internal.test.cljs-suitable-enabled"))
14+
15+
(when suitable-enabled?
16+
(require 'suitable.complete-for-nrepl))
17+
18+
(def suitable-complete-for-nrepl
19+
(when suitable-enabled?
20+
@(resolve 'suitable.complete-for-nrepl/complete-for-nrepl)))
21+
1322
(def clj-sources
1423
"Source keywords for Clojure completions."
1524
[:compliment.sources.special-forms/literals
@@ -27,15 +36,17 @@
2736
[::suitable-sources/cljs-source])
2837

2938
(defn complete
30-
[{:keys [ns prefix symbol context extra-metadata] :as msg}]
39+
[{:keys [ns prefix symbol context extra-metadata enhanced-cljs-completion?] :as msg}]
3140
;; TODO: Drop legacy symbol param in version 1.0
3241
(let [prefix (str (or prefix symbol))
33-
completion-opts {:ns (misc/as-sym ns)
34-
:context context
42+
completion-opts {:ns (misc/as-sym ns)
43+
:context context
3544
:extra-metadata (set (map keyword extra-metadata))}]
3645
(if-let [cljs-env (cljs/grab-cljs-env msg)]
3746
(binding [suitable-sources/*compiler-env* cljs-env]
38-
(complete/completions prefix (merge completion-opts {:sources cljs-sources})))
47+
(cond-> (complete/completions prefix (merge completion-opts {:sources cljs-sources}))
48+
(and suitable-enabled? enhanced-cljs-completion?)
49+
(concat (suitable-complete-for-nrepl (assoc msg :symbol prefix)))))
3950
(complete/completions prefix (merge completion-opts {:sources clj-sources})))))
4051

4152
(defn completion-doc

‎src/cider/nrepl/middleware/slurp.clj

+11-4
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
[nrepl.misc :refer [response-for]]
1212
[nrepl.transport :as transport])
1313
(:import
14-
(java.io ByteArrayOutputStream InputStream)
14+
(java.io ByteArrayOutputStream FileNotFoundException InputStream)
1515
(java.net MalformedURLException URL URLConnection)
1616
(java.nio.file Files Path Paths)
1717
(java.util Base64)))
@@ -83,7 +83,7 @@
8383
"Attempts to parse and then to slurp a URL, producing a content-typed response."
8484
[url-str]
8585
(when-let [^URL url (try (URL. url-str)
86-
(catch MalformedURLException _e nil))]
86+
(catch MalformedURLException _e nil))]
8787
(if (= (.getProtocol url) "file") ;; expected common case
8888
(let [^Path p (Paths/get (.toURI url))
8989
content-type (normalize-content-type (get-file-content-type p))
@@ -93,11 +93,18 @@
9393
;; It's not a file, so just try to open it on up
9494
(let [^URLConnection conn (.openConnection url)
9595
content-type (normalize-content-type
96-
(or (.getContentType conn)
96+
(or (try
97+
(.getContentType conn)
98+
(catch FileNotFoundException _))
9799
"application/octet-stream"))
98100
;; FIXME (arrdem 2018-04-03):
99101
;; There's gotta be a better way here
100-
^InputStream is (.getInputStream conn)
102+
^InputStream is (try
103+
(.getInputStream conn)
104+
(catch FileNotFoundException _
105+
(proxy [InputStream] []
106+
(read []
107+
-1))))
101108
os (ByteArrayOutputStream.)]
102109
(loop []
103110
(let [b (.read is)]

‎src/cider/nrepl/print_method.clj

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
(:require
77
[clojure.main :as main])
88
(:import
9-
[clojure.lang AFunction Atom MultiFn Namespace]))
9+
[clojure.lang AFunction Atom MultiFn Namespace]
10+
[java.io Writer]))
1011

1112
(def ^:dynamic *pretty-objects*
1213
"If true, cider prettifies some object descriptions.

‎test/clj/cider/nrepl/middleware/slurp_test.clj

+2-3
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,5 @@
3737
(t/deftest test-url-content-type
3838
;; When a url gives content type as nil, then default content-type should be taken.
3939
(let [resp (slurp-url-to-content+body "https://clojure.org/no-such-page")]
40-
(t/is (= ["application/octet-stream" {}]))
41-
(t/is (str/starts-with? (:body resp) "#binary[location="))
42-
(t/is (str/ends-with? (:body resp) ",size=0]"))))
40+
(t/is (= ["text/html" {}] (:content-type resp)))
41+
(t/is (= "" (:body resp)))))

‎test/cljs/cider/nrepl/middleware/cljs_complete_test.clj

+27-27
Original file line numberDiff line numberDiff line change
@@ -36,35 +36,35 @@
3636
(is (= '("[psym & doc+methods]") (:arglists candidate)))
3737
(is (string? (:doc candidate))))))
3838

39-
;; (deftest cljs-complete-with-suitable-test
40-
;; (testing "js global completion"
41-
;; (let [response (session/message {:op "complete"
42-
;; :ns "cljs.user"
43-
;; :prefix "js/Ob"
44-
;; :enhanced-cljs-completion? "t"})
45-
;; candidates (:completions response)]
46-
;; (is (= [{:candidate "js/Object", :ns "js", :type "function"}] candidates))))
39+
(deftest cljs-complete-with-suitable-test
40+
(testing "js global completion"
41+
(let [response (session/message {:op "complete"
42+
:ns "cljs.user"
43+
:prefix "js/Ob"
44+
:enhanced-cljs-completion? "t"})
45+
candidates (:completions response)]
46+
(is (= [{:candidate "js/Object", :ns "js", :type "function"}] candidates))))
4747

48-
;; (testing "manages context state"
49-
;; (session/message {:op "complete"
50-
;; :ns "cljs.user"
51-
;; :prefix ".xxxx"
52-
;; :context "(__prefix__ js/Object)"
53-
;; :enhanced-cljs-completion? "t"})
54-
;; (let [response (session/message {:op "complete"
55-
;; :ns "cljs.user"
56-
;; :prefix ".key"
57-
;; :context ":same"
58-
;; :enhanced-cljs-completion? "t"})
59-
;; candidates (:completions response)]
60-
;; (is (= [{:ns "js/Object", :candidate ".keys" :type "function"}] candidates))))
48+
(testing "manages context state"
49+
(session/message {:op "complete"
50+
:ns "cljs.user"
51+
:prefix ".xxxx"
52+
:context "(__prefix__ js/Object)"
53+
:enhanced-cljs-completion? "t"})
54+
(let [response (session/message {:op "complete"
55+
:ns "cljs.user"
56+
:prefix ".key"
57+
:context ":same"
58+
:enhanced-cljs-completion? "t"})
59+
candidates (:completions response)]
60+
(is (= [{:ns "js/Object", :candidate ".keys" :type "function"}] candidates))))
6161

62-
;; (testing "no suitable completions without enhanced-cljs-completion? flag"
63-
;; (let [response (session/message {:op "complete"
64-
;; :ns "cljs.user"
65-
;; :prefix "js/Ob"})
66-
;; candidates (:completions response)]
67-
;; (is (empty? candidates)))))
62+
(testing "no suitable completions without enhanced-cljs-completion? flag"
63+
(let [response (session/message {:op "complete"
64+
:ns "cljs.user"
65+
:prefix "js/Ob"})
66+
candidates (:completions response)]
67+
(is (empty? candidates)))))
6868

6969
(deftest cljs-complete-doc-test
7070
(testing "no suitable documentation can be found"

0 commit comments

Comments
 (0)
Please sign in to comment.