[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/inf-clojure d3c0d4f 187/313: Avoid throwing an error for f
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/inf-clojure d3c0d4f 187/313: Avoid throwing an error for frequent operations like completion |
Date: |
Wed, 11 Aug 2021 10:00:13 -0400 (EDT) |
branch: elpa/inf-clojure
commit d3c0d4f31d66e141f6a787902a45967081092cba
Author: Andrea Richiardi <a.richiardi.work@gmail.com>
Commit: Bozhidar Batsov <bozhidar.batsov@gmail.com>
Avoid throwing an error for frequent operations like completion
This patch introduces an argument to inf-clojure-proc so that client code
can
decide when to error out return the processs. This is necessary because
while
it is good to communicate an error on "eval" operations, it is not good to
have
it on "under the hood" and very frequent ones like completion and get
arglists.
---
CHANGELOG.md | 1 +
inf-clojure.el | 141 ++++++++++++++++++++++++++++++---------------------------
2 files changed, 75 insertions(+), 67 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d9c384c..9f63d38 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@
* [#117](https://github.com/clojure-emacs/inf-clojure/pull/117): Introduce
`tools.deps` project type and `inf-clojure-tools-deps-cmd`.
* [#122](https://github.com/clojure-emacs/inf-clojure/pull/122): Introduce
`inf-clojure-completions-fn` defcustom.
* [#128](https://github.com/clojure-emacs/inf-clojure/pull/128): Expose
`inf-clojure-apropos` as `C-c C-S-a` in `inf-clojure-mode` (the REPL).
+* [#125](https://github.com/clojure-emacs/inf-clojure/pull/125): Avoid
throwing an error for frequent operations like completion.
### Bugs Fixed
diff --git a/inf-clojure.el b/inf-clojure.el
index ee0eae8..2854761 100644
--- a/inf-clojure.el
+++ b/inf-clojure.el
@@ -363,11 +363,11 @@ Clojure to load that file."
:safe #'stringp
:package-version '(inf-clojure . "2.0.0"))
-(defun inf-clojure-load-form ()
- "Return the form to query inferior Clojure for a var's documentation.
+(defun inf-clojure-load-form (proc)
+ "Return the form to query the Inf-Clojure PROC for var's documentation.
If you are using REPL types, it will pickup the most appropriate
`inf-clojure-var-doc-form` variant."
- (pcase (inf-clojure--set-repl-type (inf-clojure-proc))
+ (pcase (inf-clojure--set-repl-type proc)
(`lumo inf-clojure-load-form-lumo)
(`planck inf-clojure-load-form-planck)
(_ inf-clojure-load-form)))
@@ -689,15 +689,15 @@ The prefix argument SWITCH-TO-REPL controls whether to
switch to
REPL after the file is loaded or not. If the argument FILE-NAME
is present it will be used instead of the current file."
(interactive "P")
- (let ((file-name (or file-name
+ (let ((proc (inf-clojure-proc))
+ (file-name (or file-name
(car (comint-get-source "Load Clojure file: "
inf-clojure-prev-l/c-dir/file
;; nil because doesn't need an
exact name
inf-clojure-source-modes
nil)))))
(comint-check-source file-name) ; Check to see if buffer needs saved.
(setq inf-clojure-prev-l/c-dir/file (cons (file-name-directory
file-name)
(file-name-nondirectory
file-name)))
- (inf-clojure--send-string (inf-clojure-proc)
- (format (inf-clojure-load-form) file-name))
+ (inf-clojure--send-string proc (format (inf-clojure-load-form proc)
file-name))
(when switch-to-repl
(inf-clojure-switch-to-repl t))))
@@ -736,12 +736,12 @@ is present it will be used instead of the current file."
:safe #'stringp
:package-version '(inf-clojure . "2.0.0"))
-(defun inf-clojure-var-doc-form ()
- "Return the form to query inferior Clojure for a var's documentation.
+(defun inf-clojure-var-doc-form (proc)
+ "Return the form to query the Inf-Clojure PROC for a var's documentation.
If you are using REPL types, it will pickup the most approapriate
`inf-clojure-var-doc-form` variant."
(inf-clojure--sanitize-command
- (pcase (inf-clojure--set-repl-type (inf-clojure-proc))
+ (pcase (inf-clojure--set-repl-type proc)
(`lumo inf-clojure-var-doc-form-lumo)
(`planck inf-clojure-var-doc-form-planck)
(_ inf-clojure-var-doc-form))))
@@ -767,12 +767,12 @@ If you are using REPL types, it will pickup the most
approapriate
:safe #'stringp
:package-version '(inf-clojure . "2.0.0"))
-(defun inf-clojure-var-source-form ()
- "Return the form to query inferior Clojure for a var's source.
+(defun inf-clojure-var-source-form (proc)
+ "Return the form to query the Inf-Clojure PROC for a var's source.
If you are using REPL types, it will pickup the most approapriate
`inf-clojure-var-source-form` variant."
(inf-clojure--sanitize-command
- (pcase (inf-clojure--set-repl-type (inf-clojure-proc))
+ (pcase (inf-clojure--set-repl-type proc)
(`lumo inf-clojure-var-source-form-lumo)
(`planck inf-clojure-var-source-form-planck)
(_ inf-clojure-var-source-form))))
@@ -810,12 +810,12 @@ If you are using REPL types, it will pickup the most
approapriate
:safe #'stringp
:package-version '(inf-clojure . "2.1.0"))
-(defun inf-clojure-arglists-form ()
- "Return the form to query inferior Clojure for arglists of a var.
+(defun inf-clojure-arglists-form (proc)
+ "Return the form to query the Inf-Clojure PROC for arglists of a var.
If you are using REPL types, it will pickup the most approapriate
`inf-clojure-arglists-form` variant."
(inf-clojure--sanitize-command
- (pcase (inf-clojure--set-repl-type (inf-clojure-proc))
+ (pcase (inf-clojure--set-repl-type proc)
(`lumo inf-clojure-arglists-form-lumo)
(`planck inf-clojure-arglists-form-planck)
(_ inf-clojure-arglists-form))))
@@ -846,12 +846,12 @@ If you are using REPL types, it will pickup the most
approapriate
:safe #'stringp
:package-version '(inf-clojure . "2.0.0"))
-(defun inf-clojure-completion-form ()
- "Return the form to query inferior Clojure for a var's documentation.
+(defun inf-clojure-completion-form (proc)
+ "Return the form to query the Inf-Clojure PROC for completions.
If you are using REPL types, it will pickup the most approapriate
`inf-clojure-completion-form` variant."
(inf-clojure--sanitize-command
- (pcase (inf-clojure--set-repl-type (inf-clojure-proc))
+ (pcase (inf-clojure--set-repl-type proc)
(`lumo inf-clojure-completion-form-lumo)
(`planck inf-clojure-completion-form-planck)
(_ inf-clojure-completion-form))))
@@ -877,12 +877,12 @@ If you are using REPL types, it will pickup the most
approapriate
:safe #'stringp
:package-version '(inf-clojure . "2.0.0"))
-(defun inf-clojure-ns-vars-form ()
- "Return the form to query inferior Clojure for public vars in a namespace.
+(defun inf-clojure-ns-vars-form (proc)
+ "Return the form to query the Inf-Clojure PROC for public vars in a
namespace.
If you are using REPL types, it will pickup the most approapriate
`inf-clojure-ns-vars-form` variant."
(inf-clojure--sanitize-command
- (pcase (inf-clojure--set-repl-type (inf-clojure-proc))
+ (pcase (inf-clojure--set-repl-type proc)
(`lumo inf-clojure-ns-vars-form-lumo)
(`planck inf-clojure-ns-vars-form-planck)
(_ inf-clojure-ns-vars-form))))
@@ -910,11 +910,11 @@ If you are using REPL types, it will pickup the most
approapriate
:safe #'stringp
:package-version '(inf-clojure . "2.0.0"))
-(defun inf-clojure-set-ns-form ()
- "Return the form to set the ns of the inferior Clojure process.
+(defun inf-clojure-set-ns-form (proc)
+ "Return the form to set the namespace of the Inf-Clojure PROC.
If you are using REPL types, it will pickup the most approapriate
`inf-clojure-set-ns-form` variant."
- (pcase (inf-clojure--set-repl-type (inf-clojure-proc))
+ (pcase (inf-clojure--set-repl-type proc)
(`planck inf-clojure-set-ns-form-planck)
(`lumo inf-clojure-set-ns-form-lumo)
(_ inf-clojure-set-ns-form)))
@@ -944,12 +944,12 @@ If you are using REPL types, it will pickup the most
approapriate
:safe #'stringp
:package-version '(inf-clojure . "2.0.0"))
-(defun inf-clojure-apropos-form ()
- "Return the form to query inferior Clojure for public vars in a namespace.
+(defun inf-clojure-apropos-form (proc)
+ "Return the form to query the Inf-Clojure PROC for a var's apropos.
If you are using REPL types, it will pickup the most approapriate
-`inf-clojure-ns-vars-form` variant."
+`inf-clojure-apropos-form` variant."
(inf-clojure--sanitize-command
- (pcase (inf-clojure--set-repl-type (inf-clojure-proc))
+ (pcase (inf-clojure--set-repl-type proc)
(`lumo inf-clojure-apropos-form-lumo)
(`planck inf-clojure-apropos-form-planck)
(_ inf-clojure-apropos-form))))
@@ -970,12 +970,12 @@ If you are using REPL types, it will pickup the most
approapriate
:safe #'stringp
:package-version '(inf-clojure . "2.0.0"))
-(defun inf-clojure-macroexpand-form ()
- "Return the form for macroexpansion in the inferior Clojure process.
+(defun inf-clojure-macroexpand-form (proc)
+ "Return the form for macroexpansion in the Inf-Clojure PROC.
If you are using REPL types, it will pickup the most approapriate
`inf-clojure-macroexpand-form` variant."
(inf-clojure--sanitize-command
- (pcase (inf-clojure--set-repl-type (inf-clojure-proc))
+ (pcase (inf-clojure--set-repl-type proc)
(`planck inf-clojure-macroexpand-form-planck)
(_ inf-clojure-macroexpand-form))))
@@ -995,12 +995,12 @@ If you are using REPL types, it will pickup the most
approapriate
:safe #'stringp
:package-version '(inf-clojure . "2.0.0"))
-(defun inf-clojure-macroexpand-1-form ()
- "Return the form for macroexpand-1 in the inferior Clojure process.
+(defun inf-clojure-macroexpand-1-form (proc)
+ "Return the form for macroexpand-1 in the Inf-Clojure PROC.
If you are using REPL types, it will pickup the most approapriate
`inf-clojure-macroexpand-1-form` variant."
(inf-clojure--sanitize-command
- (pcase (inf-clojure--set-repl-type (inf-clojure-proc))
+ (pcase (inf-clojure--set-repl-type proc)
(`planck inf-clojure-macroexpand-1-form-planck)
(_ inf-clojure-macroexpand-1-form))))
@@ -1047,20 +1047,22 @@ The value is nil if it can't find one."
See function `inf-clojure-var-doc-form'. When invoked with a
prefix argument PROMPT-FOR-SYMBOL, it prompts for a symbol name."
(interactive "P")
- (let ((var (if prompt-for-symbol
- (car (inf-clojure-symprompt "Var doc"
(inf-clojure-symbol-at-point)))
- (inf-clojure-symbol-at-point))))
- (inf-clojure--send-string (inf-clojure-proc) (format
(inf-clojure-var-doc-form) var))))
+ (let ((proc (inf-clojure-proc))
+ (var (if prompt-for-symbol
+ (car (inf-clojure-symprompt "Var doc"
(inf-clojure-symbol-at-point)))
+ (inf-clojure-symbol-at-point))))
+ (inf-clojure--send-string proc (format (inf-clojure-var-doc-form proc)
var))))
(defun inf-clojure-show-var-source (prompt-for-symbol)
"Send a command to the inferior Clojure to give source for VAR.
See variable `inf-clojure-var-source-form'. When invoked with a
prefix argument PROMPT-FOR-SYMBOL, it prompts for a symbol name."
(interactive "P")
- (let ((var (if prompt-for-symbol
+ (let ((proc (inf-clojure-proc))
+ (var (if prompt-for-symbol
(car (inf-clojure-symprompt "Var source"
(inf-clojure-symbol-at-point)))
(inf-clojure-symbol-at-point))))
- (inf-clojure--send-string (inf-clojure-proc) (format
(inf-clojure-var-source-form) var))))
+ (inf-clojure--send-string proc (format (inf-clojure-var-source-form proc)
var))))
;;;; Response parsing
;;;; ================
@@ -1190,10 +1192,11 @@ for evaluation, therefore FORM should not include it."
(defun inf-clojure-arglists (fn)
"Send a query to the inferior Clojure for the arglists for function FN.
See variable `inf-clojure-arglists-form'."
- (thread-first
- (format (inf-clojure-arglists-form) fn)
- (inf-clojure--process-response (inf-clojure-proc) "(" ")")
- (inf-clojure--some)))
+ (when-let ((proc (inf-clojure-proc 'no-error)))
+ (thread-first
+ (format (inf-clojure-arglists-form proc) fn)
+ (inf-clojure--process-response proc "(" ")")
+ (inf-clojure--some))))
(defun inf-clojure-show-arglists (prompt-for-symbol)
"Show the arglists for function FN in the mini-buffer.
@@ -1212,10 +1215,11 @@ prefix argument PROMPT-FOR-SYMBOL, it prompts for a
symbol name."
See variable `inf-clojure-ns-vars-form'. When invoked with a
prefix argument PROMPT-FOR-NS, it prompts for a namespace name."
(interactive "P")
- (let ((ns (if prompt-for-ns
- (car (inf-clojure-symprompt "Ns vars" (clojure-find-ns)))
- (clojure-find-ns))))
- (inf-clojure--send-string (inf-clojure-proc) (format
(inf-clojure-ns-vars-form) ns))))
+ (let ((proc (inf-clojure-proc))
+ (ns (if prompt-for-ns
+ (car (inf-clojure-symprompt "Ns vars" (clojure-find-ns)))
+ (clojure-find-ns))))
+ (inf-clojure--send-string proc (format (inf-clojure-ns-vars-form proc)
ns))))
(defun inf-clojure-set-ns (prompt-for-ns)
"Set the ns of the inferior Clojure process to NS.
@@ -1223,41 +1227,44 @@ See variable `inf-clojure-set-ns-form'. It defaults to
the ns of
the current buffer. When invoked with a prefix argument
PROMPT-FOR-NS, it prompts for a namespace name."
(interactive "P")
- (let ((ns (if prompt-for-ns
+ (let ((proc (inf-clojure-proc))
+ (ns (if prompt-for-ns
(car (inf-clojure-symprompt "Set ns to" (clojure-find-ns)))
(clojure-find-ns))))
(when (or (not ns) (equal ns ""))
(user-error "No namespace selected"))
- (inf-clojure--send-string (inf-clojure-proc) (format
(inf-clojure-set-ns-form) ns))))
+ (inf-clojure--send-string proc (format (inf-clojure-set-ns-form proc)
ns))))
(defun inf-clojure-apropos (expr)
"Send an expression to the inferior Clojure for apropos.
EXPR can be either a regular expression or a stringable
thing. See variable `inf-clojure-apropos-form'."
(interactive (inf-clojure-symprompt "Var apropos"
(inf-clojure-symbol-at-point)))
- (inf-clojure--send-string (inf-clojure-proc) (format
(inf-clojure-apropos-form) expr)))
+ (let ((proc (inf-clojure-proc)))
+ (inf-clojure--send-string proc (format (inf-clojure-apropos-form proc)
expr))))
(defun inf-clojure-macroexpand (&optional macro-1)
"Send a form to the inferior Clojure for macro expansion.
See variable `inf-clojure-macroexpand-form'.
With a prefix arg MACRO-1 uses function `inf-clojure-macroexpand-1-form'."
(interactive "P")
- (let ((last-sexp (buffer-substring-no-properties (save-excursion
(backward-sexp) (point)) (point))))
+ (let ((proc (inf-clojure-proc))
+ (last-sexp (buffer-substring-no-properties (save-excursion
(backward-sexp) (point)) (point))))
(inf-clojure--send-string
- (inf-clojure-proc)
+ proc
(format (if macro-1
- (inf-clojure-macroexpand-1-form)
- (inf-clojure-macroexpand-form))
+ (inf-clojure-macroexpand-1-form proc)
+ (inf-clojure-macroexpand-form proc))
last-sexp))))
-
-(defun inf-clojure-proc ()
+(defun inf-clojure-proc (&optional no-error)
"Return the current inferior Clojure process.
-See variable `inf-clojure-buffer'."
- (let ((proc (get-buffer-process (if (derived-mode-p 'inf-clojure-mode)
- (current-buffer)
- inf-clojure-buffer))))
- (or proc
+When NO-ERROR is non-nil, don't throw an error when no connection
+has been found. See also variable `inf-clojure-buffer'."
+ (or (get-buffer-process (if (derived-mode-p 'inf-clojure-mode)
+ (current-buffer)
+ inf-clojure-buffer))
+ (unless no-error
(error "No Clojure subprocess; see variable `inf-clojure-buffer'"))))
(defun inf-clojure--list-or-nil (data)
@@ -1280,11 +1287,11 @@ every other EXPR will be discarded and nil will be
returned."
Under the hood it calls the function
\\[inf-clojure-completions-fn] passing in the result of
evaluating \\[inf-clojure-completion-form] at the REPL."
- (when (not (string-blank-p expr))
- (let ((proc (inf-clojure-proc))
- (completion-form (format (inf-clojure-completion-form)
(substring-no-properties expr))))
- (funcall inf-clojure-completions-fn
- (inf-clojure--process-response completion-form proc "("
")")))))
+ (let ((proc (inf-clojure-proc 'no-error)))
+ (when (and proc (not (string-blank-p expr)))
+ (let ((completion-form (format (inf-clojure-completion-form proc)
(substring-no-properties expr))))
+ (funcall inf-clojure-completions-fn
+ (inf-clojure--process-response completion-form proc "("
")"))))))
(defcustom inf-clojure-completions-fn 'inf-clojure-list-completions
"The function that parses completion results.
- [nongnu] elpa/inf-clojure 9fa8f37 153/313: Disable pretty print when fetching lumo arglists, (continued)
- [nongnu] elpa/inf-clojure 9fa8f37 153/313: Disable pretty print when fetching lumo arglists, ELPA Syncer, 2021/08/11
- [nongnu] elpa/inf-clojure f666f60 154/313: [Fix #79] Disable coloring for the boot repl (#82), ELPA Syncer, 2021/08/11
- [nongnu] elpa/inf-clojure 1a71b5e 163/313: Rephrase process logging description a bit, ELPA Syncer, 2021/08/11
- [nongnu] elpa/inf-clojure ee38fc3 164/313: [Fix #96] Use inf-clojure--send-string instead of comint-proc-query, ELPA Syncer, 2021/08/11
- [nongnu] elpa/inf-clojure 7493ed8 166/313: Set inf-clojure-*-cmd :risky and :safe properties, ELPA Syncer, 2021/08/11
- [nongnu] elpa/inf-clojure b048358 173/313: Add expression break chars and prevent completions for numbers (#110), ELPA Syncer, 2021/08/11
- [nongnu] elpa/inf-clojure 8c27b06 177/313: Introduce the tools.deps project type, ELPA Syncer, 2021/08/11
- [nongnu] elpa/inf-clojure 5c8f590 179/313: [Fix #116] Set inf-clojure-buffer REPL type on detect, ELPA Syncer, 2021/08/11
- [nongnu] elpa/inf-clojure 7b2fcd7 184/313: Revive inf-clojure-apropos, ELPA Syncer, 2021/08/11
- [nongnu] elpa/inf-clojure 8baa7ad 185/313: Correct inf-clojure-apropos key binding, ELPA Syncer, 2021/08/11
- [nongnu] elpa/inf-clojure d3c0d4f 187/313: Avoid throwing an error for frequent operations like completion,
ELPA Syncer <=
- [nongnu] elpa/inf-clojure 630471b 194/313: Update CHANGELOG.md, ELPA Syncer, 2021/08/11
- [nongnu] elpa/inf-clojure c3217c3 200/313: Skip sanitation of comments, ELPA Syncer, 2021/08/11
- [nongnu] elpa/inf-clojure 9b77479 207/313: Set inf-clojure-tools-deps-cmd to "clojure" (#144), ELPA Syncer, 2021/08/11
- [nongnu] elpa/inf-clojure 58150d7 256/313: Improve some wording in the README, ELPA Syncer, 2021/08/11
- [nongnu] elpa/inf-clojure f63c609 252/313: Fix a typo, ELPA Syncer, 2021/08/11
- [nongnu] elpa/inf-clojure b5e915c 204/313: Travis test like in cider, ELPA Syncer, 2021/08/11
- [nongnu] elpa/inf-clojure b88de63 260/313: Tweak a docstring, ELPA Syncer, 2021/08/11
- [nongnu] elpa/inf-clojure e144b33 276/313: Improve the Makefile commands, ELPA Syncer, 2021/08/11
- [nongnu] elpa/inf-clojure 917ee77 268/313: Improve the README a bit, ELPA Syncer, 2021/08/11
- [nongnu] elpa/inf-clojure 91f4121 280/313: Bump the copyright years, ELPA Syncer, 2021/08/11