@@ -189,16 +189,20 @@ the current connection. Return the id of the sent message.
189189If TOOLING is truthy then the tooling session is used."
190190 (nrepl-send-request request callback (or connection (cider-current-repl 'any 'ensure )) tooling))
191191
192- (defun cider-nrepl-send-sync-request (request &optional connection abort-on-input )
192+ (defun cider-nrepl-send-sync-request (request &optional connection
193+ abort-on-input callback )
193194 " Send REQUEST to the nREPL server synchronously using CONNECTION.
194195Hold till final \" done\" message has arrived and join all response messages
195196of the same \" op\" that came along and return the accumulated response.
196197If ABORT-ON-INPUT is non-nil, the function will return nil
197198at the first sign of user input, so as not to hang the
198- interface."
199+ interface.
200+ if CALLBACK is non-nil, it will additionally be called on all received messages."
199201 (nrepl-send-sync-request request
200202 (or connection (cider-current-repl 'any 'ensure ))
201- abort-on-input))
203+ abort-on-input
204+ nil
205+ callback))
202206
203207(defun cider-nrepl-send-unhandled-request (request &optional connection )
204208 " Send REQUEST to the nREPL CONNECTION and ignore any responses.
@@ -342,6 +346,15 @@ The default value in nREPL is 1024."
342346 :group 'cider
343347 :package-version '(cider . " 0.25.0" ))
344348
349+ (defcustom cider-download-sources-jars nil
350+ " When enabled, CIDER will attempt to download sources artifact for 3rd-party
351+ dependencies from Maven if they are not found locally. This downloading
352+ will only happen once per artifact, and only during \" Jump to definiton\"
353+ and `cider-doc' user actions."
354+ :type 'boolean
355+ :group 'cider
356+ :package-version '(cider . " 1.17.0" ))
357+
345358(defun cider--print-fn ()
346359 " Return the value to send in the nrepl.middleware.print/print slot."
347360 (pcase cider-print-fn
@@ -681,13 +694,31 @@ CONTEXT represents a completion context for compliment."
681694
682695(defun cider-sync-request:info (symbol &optional class member context )
683696 " Send \" info\" op with parameters SYMBOL or CLASS and MEMBER, honor CONTEXT."
684- (let ((var-info (thread-first `(" op" " info"
685- " ns" ,(cider-current-ns)
686- ,@(when symbol `(" sym" , symbol ))
687- ,@(when class `(" class" , class ))
688- ,@(when member `(" member" , member ))
689- ,@(when context `(" context" , context )))
690- (cider-nrepl-send-sync-request (cider-current-repl)))))
697+ (let* ((report-jar-downloading
698+ (lambda (coords )
699+ (message " Local source not found, downloading Java sources for artifact %s /%s %s ... "
700+ (nrepl-dict-get coords " group" )
701+ (nrepl-dict-get coords " artifact" )
702+ (nrepl-dict-get coords " version" ))))
703+ (var-info (thread-first
704+ `(" op" " info"
705+ " ns" ,(cider-current-ns)
706+ ,@(when symbol `(" sym" , symbol ))
707+ ,@(when class `(" class" , class ))
708+ ,@(when member `(" member" , member ))
709+ ,@(when context `(" context" , context ))
710+ ,@(when cider-download-sources-jars
711+ `(" download-sources-jar" " 1"
712+ ; ; TODO
713+ " build-tool" " clojure" )))
714+ (cider-nrepl-send-sync-request
715+ (cider-current-repl)
716+ nil
717+ (lambda (resp )
718+ (let* ((status (nrepl-dict-get resp " status" )))
719+ (when (member " download-sources-jar" status)
720+ (funcall report-jar-downloading
721+ (nrepl-dict-get resp " coords" )))))))))
691722 (if (member " no-info" (nrepl-dict-get var-info " status" ))
692723 nil
693724 var-info)))
0 commit comments