[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/geiser-kawa 1e15f01 091/119: Refactor 'geiser-kawa-util--e
From: |
Philip Kaludercic |
Subject: |
[nongnu] elpa/geiser-kawa 1e15f01 091/119: Refactor 'geiser-kawa-util--eval...' + related fixes |
Date: |
Sun, 1 Aug 2021 18:30:44 -0400 (EDT) |
branch: elpa/geiser-kawa
commit 1e15f014a955b91023b1e0a4b386b015e56e84d0
Author: spellcard199 <spellcard199@protonmail.com>
Commit: spellcard199 <spellcard199@protonmail.com>
Refactor 'geiser-kawa-util--eval...' + related fixes
---
elisp/geiser-kawa-devutil-complete.el | 3 +-
elisp/geiser-kawa-devutil-exprtree.el | 2 +-
elisp/geiser-kawa-util.el | 84 ++++++++++++++++++++++++++---------
3 files changed, 66 insertions(+), 23 deletions(-)
diff --git a/elisp/geiser-kawa-devutil-complete.el
b/elisp/geiser-kawa-devutil-complete.el
index cc0a773..c59de1f 100644
--- a/elisp/geiser-kawa-devutil-complete.el
+++ b/elisp/geiser-kawa-devutil-complete.el
@@ -196,7 +196,6 @@ members of package as returned by kawa-geiser."
`kawa-devutil' is a java dependency of `kawa-geiser', itself a java
dependency of `geiser-kawa'."
(interactive)
-
(let* ((code-and-point-data
(geiser-kawa-devutil-complete--code-point-from-toplevel))
(code-str (cdr (assoc "code-str"
@@ -233,7 +232,7 @@ Argument CODE-STR is a string containing the code where
completion
must happen. It must be syntactically correct Kawa scheme.
Argument CURSOR-INDEX is an integer representing where the cursor is
inside `CURSOR-STR'."
- (geiser-kawa-util--eval-to-res
+ (geiser-kawa-util--eval/result
`(geiser:kawa-devutil-complete-expr-tree
,code-str
,cursor-index)))
diff --git a/elisp/geiser-kawa-devutil-exprtree.el
b/elisp/geiser-kawa-devutil-exprtree.el
index 361f33b..9a95c43 100644
--- a/elisp/geiser-kawa-devutil-exprtree.el
+++ b/elisp/geiser-kawa-devutil-exprtree.el
@@ -35,7 +35,7 @@
(defun geiser-kawa-devutil-exprtree--for (code-str)
"Get the Expression tree for CODE-STR."
- (geiser-kawa-util--eval-to-res
+ (geiser-kawa-util--eval/result
`(geiser:kawa-devutil-expr-tree-formatted ,code-str)))
(defun geiser-kawa-devutil-exprtree--view-for (code-str)
diff --git a/elisp/geiser-kawa-util.el b/elisp/geiser-kawa-util.el
index 0df4200..1b5e14e 100644
--- a/elisp/geiser-kawa-util.el
+++ b/elisp/geiser-kawa-util.el
@@ -20,33 +20,77 @@
;;; Code:
-(defun geiser-kawa-util--eval-to-res (sexp)
- "Alternative to geiser-eval--send/eval with custom behavior.
-If a Throwable has been raised while running in Kawa an error is
-signalled.
-Argument SEXP is a sexp to evaluate in Kawa."
- (let* ((question
- (format "(geiser:eval (interaction-environment) %S)"
- (format "%S" sexp)))
- (answer (geiser-eval--send/wait question)))
- (if (assoc 'error answer)
- (signal 'peculiar-error
- (list (string-trim
- (car (split-string (geiser-eval--retort-output
- answer)
- "\t")))))
- ;; from: ((result "expr-tree") (output . ...))
- ;; to: "expr-tree"
- (cadr (car answer)))))
+(defun geiser-kawa-util--eval (sexp-or-str)
+ "Eval `sexp-or-str' in Kawa.
+1. `sexp-or-str' is wrapped by:
+ (geiser:eval ...)
+2. Resulting string is passed to `geiser-eval--send/wait' for
+ evaluation
+Argument SEXP-OR-STR is code to be evaluated by the `geiser:eval'
+procedure in Kawa. It can be either a `list' or a `string'."
+ ;; Check type of `sexp-or-str'. If type is not supported Kawa would
+ ;; receive `nil' as form to evaluate, which would raise a seemingly
+ ;; wierd error:
+ ;; unbound location: nil
+ ;; at gnu.mapping.DynamicLocation.get(DynamicLocation.java:36)
+ ;; ...
+ (let ((valid-types '(string cons))
+ (sexp-or-str-type (type-of sexp-or-str)))
+ (when (not (member sexp-or-str-type
+ valid-types))
+ (error
+ (concat "Wrong type argument: Type of `sexp-or-str' is "
+ (format "`%S'" sexp-or-str-type) ". "
+ "Valid types for `sexp-or-str' can only be: "
+ (format "%S" valid-types)))))
+
+ (let* ((code-as-str (cond ((equal (type-of sexp-or-str)
+ 'string)
+ sexp-or-str)
+ ((equal (type-of sexp-or-str)
+ 'cons)
+ (format "%S" sexp-or-str))))
+ (question (format
+ "(geiser:eval (interaction-environment) %S)"
+ code-as-str)))
+ (geiser-eval--send/wait question)))
(defun geiser-kawa-util--retort-result (ret)
- "Function that skips the reading `geiser-eval--retort-result' does.
+ "This function skips the reading `geiser-eval--retort-result' does.
Differently from `geiser-eval--retort-result', this function doesn't
have a variable binding depth limit. We use this when we need to read
strings longer than what `geiser-eval--retort-result' allows.
-Drawback is that `RET' must be valid elisp."
+Drawback is that `RET' must be valid elisp, while
+`geiser-eval--retort-result' uses an elisp implementation of a scheme
+reader."
(car (read-from-string (cadr (assoc 'result ret)))))
+(defun geiser-kawa-util--eval/result (sexp-or-str
+ &optional retort-result)
+ "Alternative to `geiser-eval--send/result' with custom behavior.
+- `sexp-or-str' is wrapped by:
+ (geiser:eval (interaction-environment) ...)
+- An error is signalled if a Throwable has been raised while running
+ in Kawa.
+Argument SEXP-OR-STR is code to be evaluated in Kawa. It can be either
+a `list' or a `string'.
+Optional argument RETORT-RESULT determines if Kawa's answer should be
+read as an elisp object by `geiser-kawa-util--retort-result'."
+ (let ((answer (geiser-kawa-util--eval sexp-or-str)))
+ (if (assoc 'error answer)
+ (signal 'peculiar-error
+ (list (string-trim
+ (car (split-string (geiser-eval--retort-output
+ answer)
+ "\t")))))
+ ;; from: ((result "<actual-result>") (output . ...))
+ ;; to either:
+ ;; - `retort-result' is non-nil: <actual-result>
+ ;; - `retort-result' is nil: "<actual-result>"
+ (if retort-result
+ (geiser-kawa-util--retort-result answer)
+ (cadr (car answer))))))
+
(defun geiser-kawa-util--repl-point-after-prompt ()
"If in a Kawa REPL buffer, get point after prompt."
(save-excursion
- [nongnu] elpa/geiser-kawa 0c311ae 051/119: Rename var to geiser-kawa-use-included-kawa, (continued)
- [nongnu] elpa/geiser-kawa 0c311ae 051/119: Rename var to geiser-kawa-use-included-kawa, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 5762c19 053/119: Cask file: add buttercup dep + copyright, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa bd3e31f 054/119: Update README.org after renamings, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa e440789 058/119: Add optional arg to function checking for jar file, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 45dc276 060/119: Fix and set pretty print default to true, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa f9149a7 074/119: Move elisp tests under the elisp directory, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa e349b4b 079/119: Refactor+Fix+Style: many changes in preparation for melpa submission., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa ca594ec 075/119: Refactor: rename some functions, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 32c0359 085/119: Update kawa-devutil version, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa c1f9e3f 087/119: Fix unsupported add to gnu.lists.EmptyList, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 1e15f01 091/119: Refactor 'geiser-kawa-util--eval...' + related fixes,
Philip Kaludercic <=
- [nongnu] elpa/geiser-kawa e864cf6 108/119: Fix docstring wording, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 46ab237 102/119: melpa/melpa#6858 - Replace license boilerplates with SPDX-License-Identifier, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 506bf81 095/119: Add section about embedding kawa-geiser in a java application, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 322a40f 093/119: README.org: add heading about manual lookup, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 6009d95 100/119: Rename test-geiser-kawa.el to geiser-kawa-test.el + fix flycheck issues, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa cd39deb 116/119: Update geiser version in Package-Requires, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 989485b 118/119: README.org - update instructions with new geiser-kawa's repo, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 3d999a3 119/119: README.org - update Geiser's repo url after new repo, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 02cd922 046/119: Add workaround to free port when a Kawa server is already using it through ssocket.close(), Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 0d86c7b 048/119: Add java package completion caching at module load time, Philip Kaludercic, 2021/08/01