[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/geiser-kawa 266413b 038/119: Refactor: replace Kawa proced
From: |
Philip Kaludercic |
Subject: |
[nongnu] elpa/geiser-kawa 266413b 038/119: Refactor: replace Kawa procedures with primitive methods + update kawa-devutil dep |
Date: |
Sun, 1 Aug 2021 18:30:34 -0400 (EDT) |
branch: elpa/geiser-kawa
commit 266413bdfaf1eb574e18920ab108be0132fa72be
Author: spellcard199 <spellcard199@protonmail.com>
Commit: spellcard199 <spellcard199@protonmail.com>
Refactor: replace Kawa procedures with primitive methods + update
kawa-devutil dep
---
elisp/geiser-kawa.el | 4 +-
pom.xml | 2 +-
src/main/java/kawageiser/Geiser.java | 76 +++++++++++++---
src/main/java/kawageiser/GeiserAutodoc.java | 101 ++++++++++-----------
src/main/java/kawageiser/GeiserCompleteModule.java | 59 +++---------
src/main/java/kawageiser/GeiserCompleteSymbol.java | 44 +--------
src/main/java/kawageiser/GeiserEval.java | 29 +-----
src/main/java/kawageiser/GeiserLoadFile.java | 24 +----
src/main/java/kawageiser/GeiserMacroexpand.java | 24 ++---
src/main/java/kawageiser/GeiserNoValues.java | 11 +--
.../geiserDoc/ManualEpubUnzipToTmpDir.java | 26 ++----
.../java/kawageiser/java/GeiserCompleteJava.java | 48 +++-------
12 files changed, 165 insertions(+), 283 deletions(-)
diff --git a/elisp/geiser-kawa.el b/elisp/geiser-kawa.el
index cf55eb8..14b4f05 100644
--- a/elisp/geiser-kawa.el
+++ b/elisp/geiser-kawa.el
@@ -186,6 +186,7 @@
(format
"(geiser:eval (interaction-environment) %S)"
(cadr args))))
+ (setq moo send-this)
send-this))
((load-file compile-file)
@@ -248,9 +249,8 @@
;;;; Support for manual in .epub format
-;; FIXME: port old scheme logic to java
(cl-defun geiser-kawa--manual-epub-unzip-to-tmpdir
- (&optional (epub-path geiser-kawa--manual))
+ (&optional (epub-path geiser-kawa-manual-path))
"Unzip the .epub file with kawa/java, since:
- kawa is already a dependency
- kawa/java is more portable that using emacs' arc-mode, which relies
diff --git a/pom.xml b/pom.xml
index 37e1ed1..8efbdb8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,7 +63,7 @@
<dependency>
<groupId>com.gitlab.spellcard199</groupId>
<artifactId>kawa-devutil</artifactId>
- <version>833e0805034a5479496e454f4d9645a46d8f136b</version>
+ <version>5f6dd112820e2c56bb2456edb069d4e2c8c5bc64</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.testng/testng -->
diff --git a/src/main/java/kawageiser/Geiser.java
b/src/main/java/kawageiser/Geiser.java
index 4c57b92..4574c7d 100644
--- a/src/main/java/kawageiser/Geiser.java
+++ b/src/main/java/kawageiser/Geiser.java
@@ -6,27 +6,73 @@
package kawageiser;
import gnu.expr.Language;
-import kawageiser.geiserDoc.ManualEpubUnzipToTmpDir;
-import kawageiser.java.GeiserCompleteJava;
public class Geiser implements Runnable {
+
private static boolean prettyPrintResult = true;
- public static boolean isPrettyPrintResult() { return prettyPrintResult; }
- public static boolean isPrettyPrintOutput() { return
GeiserEval.evaluator.isPrettyPrintOutput(); }
- public static void setPrettyPrintResult(boolean v) { prettyPrintResult =
v; }
- public static void setPrettyPrintOutput(boolean v) {
GeiserEval.evaluator.setPrettyPrintOutput(v); }
+
+ public static boolean isPrettyPrintResult() {
+ return prettyPrintResult;
+ }
+
+ public static boolean isPrettyPrintOutput() {
+ return GeiserEval.evaluator.isPrettyPrintOutput();
+ }
+
+ public static void setPrettyPrintResult(boolean v) {
+ prettyPrintResult = v;
+ }
+
+ public static void setPrettyPrintOutput(boolean v) {
+ GeiserEval.evaluator.setPrettyPrintOutput(v);
+ }
@Override
public void run() {
+
Language lang = Language.getDefaultLanguage();
- lang.defineFunction(new GeiserEval("geiser:eval"));
- lang.defineFunction(new GeiserNoValues("geiser:no-values"));
- lang.defineFunction(new GeiserLoadFile("geiser:load-file"));
- lang.defineFunction(new GeiserCompleteSymbol("geiser:completions"));
- lang.defineFunction(new
GeiserCompleteModule("geiser:module-completions"));
- lang.defineFunction(new GeiserAutodoc("geiser:autodoc", lang));
- lang.defineFunction(new GeiserCompleteJava("geiser:complete-java"));
- lang.defineFunction(new
ManualEpubUnzipToTmpDir("geiser:manual-epub-unzip-to-tmp-dir"));
- lang.defineFunction(new GeiserMacroexpand("geiser:macroexpand"));
+
+ // In a previous version definitions were like this:
+ // lang.defineFunction(new GeiserEval("geiser:eval"));
+ // However, that meant you were forced to extend Procedure1,
Procedure2, ...
+ // which can only have arguments of type Object and must be instanced
to be used.
+ // This means that compared to static methods you don't have:
+ // - parameter names in autodoc: I couldn't find a way to get
parameter names for instance methods
+ // - parameter types in autodoc: because their types must be be Object
+ // - type warnings: for the same reason of the previous point
+ // Another advantage with this new approach is we don't have to add
all the boilerplate
+ // for checking argument types.
+ try {
+ lang.defineFunction(
+ "geiser:eval",
+ lang.eval("kawageiser.GeiserEval:evalStr"));
+ lang.defineFunction(
+ "geiser:autodoc",
+ lang.eval("kawageiser.GeiserAutodoc:autodoc"));
+ lang.defineFunction(
+ "geiser:module-completions",
+
lang.eval("kawageiser.GeiserCompleteModule:completeModule"));
+ lang.defineFunction(
+ "geiser:load-file",
+ lang.eval("kawageiser.GeiserLoadFile:loadFile"));
+ lang.defineFunction(
+ "geiser:completions",
+
lang.eval("kawageiser.GeiserCompleteSymbol:getCompletions"));
+ lang.defineFunction(
+ "geiser:no-values",
+ lang.eval("kawageiser.GeiserNoValues:noValues"));
+ lang.defineFunction(
+ "geiser:complete-java",
+
lang.eval("kawageiser.java.GeiserCompleteJava:completeJava"));
+ lang.defineFunction(
+ "geiser:manual-epub-unzip-to-tmp-dir",
+
lang.eval("kawageiser.geiserDoc.ManualEpubUnzipToTmpDir:unzipToTmpDir"));
+ lang.defineFunction(
+ "geiser:macroexpand",
+ lang.eval("kawageiser.GeiserMacroexpand:expand"));
+ } catch (Throwable throwable) {
+ throwable.printStackTrace();
+ }
}
+
}
diff --git a/src/main/java/kawageiser/GeiserAutodoc.java
b/src/main/java/kawageiser/GeiserAutodoc.java
index 5a49a46..f393cb4 100644
--- a/src/main/java/kawageiser/GeiserAutodoc.java
+++ b/src/main/java/kawageiser/GeiserAutodoc.java
@@ -11,43 +11,38 @@ import gnu.kawa.functions.Format;
import gnu.lists.LList;
import gnu.mapping.Environment;
import gnu.mapping.Procedure;
-import gnu.mapping.Procedure1or2;
import gnu.mapping.Symbol;
import kawadevutil.data.ParamData;
import kawadevutil.data.ProcDataGeneric;
import kawadevutil.data.ProcDataNonGeneric;
+import kawadevutil.eval.EvalResult;
import kawadevutil.kawa.GnuMappingLocation;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
-public class GeiserAutodoc extends Procedure1or2 {
+public class GeiserAutodoc {
public static boolean showTypes = true;
- Language lang;
- GeiserAutodoc(String name, Language lang) {
- super(name);
- this.lang = lang;
- }
-
- // TODO: find the "right" way to get modules for symbols.
- // TODO: support for procedures defined in java, like `append'
- // TODO: support for macros (possible?)
- // TODO: support for getting parameter names for java instance
+ // TODO: Find the "right" way to get modules for symbols.
+ // TODO: Support for macros (possible?)
+ // TODO: Support for getting parameter names for java instance
// methods getMethods bytecode with ClassType (not so simple)
- // TODO: support names with special characters, like |a[)|
+ // TODO: Support names with special characters, like |a[)|
+ // Problem is that resulting name is without the || around
+ // the name and since the name that emacs is different from
+ // the one we are given back autodoc is not accepted as valid
// Maybe we can:
// 1. keep a list of special chars
// 2. when `id' contains one: surround with || (e.g. |id|)
- // TODO: consider multiple ids:
+ // TODO: Consider multiple ids:
// - Examples: to get more add (message (format "(geiser:%s %s)" proc
form))
// in the t clause of the geiser-kawa--geiser-procedure:
// - (display [cursor] -> (geiser:autodoc ’(display))
// - (display (symbol? (string->symbol [cursor] -> (geiser:autodoc
’(string->symbol symbol? display))
-
// At the moment arguments are enclosed in double quotes. The
// reason is that geiser's output is `read' by elisp, but java types
// may contain characters that are not valid in elisp symbols
@@ -61,38 +56,32 @@ public class GeiserAutodoc extends Procedure1or2 {
// return (new SymToAutodoc()).apply2(symId, env);
// })
- // @Override
- public Object apply1(Object ids) {
- return apply2(ids, Language.getDefaultLanguage().getEnvironment());
+ public static String autodoc(LList ids) {
+ Language language = Language.getDefaultLanguage();
+ return autodoc(ids, language, language.getEnvironment());
}
- // @Override
- public Object apply2(Object ids, Object env) {
+ public static String autodoc(LList ids, Environment env) {
+ Language language = Language.getDefaultLanguage();
+ return autodoc(ids, language, env);
+ }
- if (!LList.class.isAssignableFrom(ids.getClass())) {
- throw new IllegalArgumentException(String.format(
- "GeiserAutodoc's 1st arg should be a gnu.lists.LList"));
- }
- if (!Environment.class.isAssignableFrom(env.getClass())) {
- throw new IllegalArgumentException(String.format(
- "GeiserAutodoc's 2nd arg should be a
gnu.mapping.Environment"));
- }
+ public static String autodoc(LList ids, Language lang, Environment env) {
+ String formattedAutodoc = null;
try {
ArrayList<Object> autodocList = new ArrayList<>();
for (Object symId : (LList) ids) {
AutodocDataForSymId autodocDataForSymId =
- new AutodocDataForSymId((Symbol) symId, (Environment)
env, this.lang);
+ new AutodocDataForSymId((Symbol) symId, env, lang);
autodocList.add(autodocDataForSymId.toLList());
}
- String formattedAutodoc =
- Format
- .format("~S", LList.makeList(autodocList))
- .toString();
- return formattedAutodoc;
+ formattedAutodoc = Format
+ .format("~S", LList.makeList(autodocList))
+ .toString();
} catch (Throwable throwable) {
throwable.printStackTrace();
- return throwable;
}
+ return formattedAutodoc;
}
public static class OperatorArgListData {
@@ -129,7 +118,7 @@ public class GeiserAutodoc extends Procedure1or2 {
} else if (!isOptionalParam && !showTypes) {
return formatParam(param, "~a");
} else {
- throw new Error("No worries, can't happen (2 booleans == 4
possibilities)." +
+ throw new Error("No worries, this clause can't happen (2
booleans == 4 possibilities)." +
"Just silencing the \"Missing return statement\"
error.");
}
}
@@ -195,7 +184,7 @@ public class GeiserAutodoc extends Procedure1or2 {
public static class AutodocDataForSymId {
private boolean symExists;
private Symbol symId;
- private Object operator;
+ private Optional<Object> operatorMaybe;
private Environment environment;
private Optional<OperatorArgListData> operatorArgListMaybe;
// TODO: fix type, write way to get it
@@ -206,33 +195,35 @@ public class GeiserAutodoc extends Procedure1or2 {
this.symId = symId;
this.environment = env;
+ Optional<Object> operatorMaybe = Optional.empty();
Optional<OperatorArgListData> operatorArgListMaybe =
Optional.empty();
- Object operator = null;
- boolean symExists = false;
try {
- // env.get(symId) works with the < procedure, while
lang.eval(symId.toString())
- // raises NullPointerException (maybe a bug?).
+ // env.get(symId) works with the < procedure, while
+ // lang.eval(symId.toString()) raises NullPointerException
(maybe a bug?).
// On the other hand, env.get(symId) does not work with
procedures defined
// from java with lang.defineFunction(), like the various
geiser:...
// Since kawadevutil's eval works for both we are using that
for now.
- operator = GeiserEval.evaluator.eval(lang, env,
symId).getResult();
- symExists = true; // If it didn't exist env.get(symId) would
have raised UnboundLocationException
- if (!Procedure.class.isAssignableFrom(operator.getClass())) {
+ EvalResult evalResult = GeiserEval.evaluator.eval(lang, env,
symId);
+ operatorMaybe = evalResult.getResult() != null
+ ? Optional.of(evalResult.getResult())
+ : Optional.empty();
+ if (operatorMaybe.isPresent() &&
Procedure.class.isAssignableFrom(operatorMaybe.get().getClass())) {
+ Procedure operator = (Procedure) operatorMaybe.get();
+ ProcDataGeneric procDataGeneric =
ProcDataGeneric.makeForProcedure(operator);
+ operatorArgListMaybe = Optional.of(new
OperatorArgListData(procDataGeneric));
+ } else {
// Not a procedure
// TODO : is it possible to implement autodoc for macros?
// If not: write a comment why.
operatorArgListMaybe = Optional.empty();
- } else {
- ProcDataGeneric procDataGeneric =
ProcDataGeneric.makeForProcedure((Procedure) operator);
- operatorArgListMaybe = Optional.of(new
OperatorArgListData(procDataGeneric));
}
} catch (Throwable throwable) {
throwable.printStackTrace();
}
this.operatorArgListMaybe = operatorArgListMaybe;
- this.operator = operator;
- this.symExists = symExists;
+ this.operatorMaybe = operatorMaybe;
+ this.symExists = operatorMaybe.isPresent();
}
public LList toLList() {
@@ -251,8 +242,8 @@ public class GeiserAutodoc extends Procedure1or2 {
// TODO: When we find the correct way to do it, refactor
moduleValue inside
// ProcDataNonGeneric or a generic wrapper for Procedure data
LList moduleValue = null;
- if (operator.getClass() == CompiledProc.class) {
- CompiledProc compProc = (CompiledProc) operator;
+ if (operatorMaybe.isPresent() && operatorMaybe.get().getClass() ==
CompiledProc.class) {
+ CompiledProc compProc = (CompiledProc) operatorMaybe.get();
moduleValue = LList.makeList(
java.util.Arrays
.asList(compProc
@@ -289,26 +280,26 @@ public class GeiserAutodoc extends Procedure1or2 {
// java.lang.String:format
// so geiser ignores it.
String symIdAsStr = symId.toString();
- LList returnMe;
+ LList res;
if (moduleValue.size() > 0) {
ArrayList<Object> moduleList = new ArrayList<>();
moduleList.add("module");
for (Object m : moduleValue) {
moduleList.add(Symbol.valueOf(m.toString()));
}
- returnMe = LList.list3(
+ res = LList.list3(
symIdAsStr,
operatorArgListAsLList,
LList.makeList(moduleList)
);
} else {
- returnMe = LList.list2(
+ res = LList.list2(
symIdAsStr,
operatorArgListAsLList
);
}
- return returnMe;
+ return res;
}
}
}
diff --git a/src/main/java/kawageiser/GeiserCompleteModule.java
b/src/main/java/kawageiser/GeiserCompleteModule.java
index fe00508..4a7d1f4 100644
--- a/src/main/java/kawageiser/GeiserCompleteModule.java
+++ b/src/main/java/kawageiser/GeiserCompleteModule.java
@@ -6,59 +6,31 @@
package kawageiser;
import gnu.expr.Language;
-import gnu.lists.IString;
import gnu.lists.LList;
import gnu.mapping.Environment;
-import gnu.mapping.Procedure1or2;
+import gnu.mapping.NamedLocation;
import kawadevutil.kawa.GnuMappingLocation;
import java.util.ArrayList;
+public class GeiserCompleteModule {
-public class GeiserCompleteModule extends Procedure1or2 {
-
- GeiserCompleteModule(String name) {
- super(name);
- }
-
- @Override
- public Object apply1(Object prefix) throws Throwable {
- return apply2(
- prefix,
- Language.getDefaultLanguage().getEnvironment());
+ public static String completeModule(String prefix) {
+ return completeModule(prefix,
Language.getDefaultLanguage().getEnvironment());
}
- @Override
- public Object apply2(Object prefix, Object env) throws Throwable {
-
- String prefixStr = null;
- if (prefix instanceof String) {
- prefixStr = (String) prefix;
- } else if (prefix instanceof IString) {
- prefixStr = prefix.toString();
- } else {
- throw new IllegalArgumentException(
- "`prefix' arg should be either a String or an IString");
- }
-
- Environment castedEnv;
- if (Environment.class.isAssignableFrom(env.getClass())) {
- castedEnv = (Environment) env;
- } else {
- throw new IllegalArgumentException(
- "`env' arg should be an gnu.mapping.Environment");
- }
-
- ArrayList<String> moduleCompletions = getCompletions(prefixStr,
castedEnv);
+ public static String completeModule(String prefix, Environment env) {
+ ArrayList<String> moduleCompletions = getCompletions(prefix, env);
// Geiser protocol wants modules in the result to be printed
// between double quotes
// ("(... ... ...)" "(... ...)")
// Kawa repl doesn't show returned strings with surrounding
// quotes, so we have to manually surround completions.
- return gnu.kawa.functions.Format.format("~S",
LList.makeList(moduleCompletions));
+ return gnu.kawa.functions.Format.format(
+ "~S", LList.makeList(moduleCompletions)).toString();
}
- private ArrayList<String> getCompletions(String prefix, Environment env) {
+ public static ArrayList<String> getCompletions(String prefix, Environment
env) {
ArrayList<String> moduleCompletions = new ArrayList<>();
@@ -68,14 +40,11 @@ public class GeiserCompleteModule extends Procedure1or2 {
// TODO: this is an hack. If it exists, find a way to list
// modules directly.
env.enumerateAllLocations().forEachRemaining(
- loc ->
- {
- String moduleStrRepr = GnuMappingLocation
- .baseLocationToModuleName(loc.getBase());
- if ((!moduleCompletions.contains(moduleStrRepr))
- && (!(moduleStrRepr.equals("")))
- && (moduleStrRepr.startsWith(prefix))
- ) {
+ (NamedLocation loc) -> {
+ String moduleStrRepr =
GnuMappingLocation.baseLocationToModuleName(loc.getBase());
+ if (!moduleCompletions.contains(moduleStrRepr)
+ && !moduleStrRepr.equals("")
+ && moduleStrRepr.startsWith(prefix)) {
moduleCompletions.add(moduleStrRepr);
}
}
diff --git a/src/main/java/kawageiser/GeiserCompleteSymbol.java
b/src/main/java/kawageiser/GeiserCompleteSymbol.java
index 5dda5c7..7c17397 100644
--- a/src/main/java/kawageiser/GeiserCompleteSymbol.java
+++ b/src/main/java/kawageiser/GeiserCompleteSymbol.java
@@ -5,56 +5,20 @@
package kawageiser;
-import gnu.expr.Language;
import gnu.lists.IString;
import gnu.lists.LList;
import gnu.mapping.Environment;
-import gnu.mapping.Procedure1or2;
import gnu.mapping.Symbol;
import java.util.ArrayList;
-public class GeiserCompleteSymbol extends Procedure1or2 {
+public class GeiserCompleteSymbol {
- GeiserCompleteSymbol(String name) {
- super(name);
+ public static LList getCompletions(IString prefix) {
+ return getCompletions(prefix, Environment.user());
}
- @Override
- public Object apply1(Object prefix) {
- return apply2(
- prefix,
- Language.getDefaultLanguage().getEnvironment());
- }
-
- @Override
- public Object apply2(Object prefix, Object module) {
-
- String prefixStr = null;
- if (prefix instanceof String) {
- prefixStr = (String) prefix;
- } else if (prefix instanceof IString) {
- prefixStr = prefix.toString();
- } else {
- throw new IllegalArgumentException(
- "prefix arg should be either String or IString");
- }
-
- Environment env = null;
- if (Environment.class.isAssignableFrom(module.getClass())) {
- // already an Environment
- env = (Environment) module;
- } else if (kawa.lib.lists.isList(module)) {
- env = kawa.lib.scheme.eval.environment$V(((LList) module));
- } else {
- throw new IllegalArgumentException(
- "module argument should be either a proper list or an
Environment.");
- }
-
- return getCompletions(prefixStr, env);
- }
-
- private LList getCompletions(String prefix, Environment env) {
+ public static LList getCompletions(IString prefix, Environment env) {
ArrayList<Symbol> resultArrList = new ArrayList<>();
env.enumerateAllLocations().forEachRemaining(
loc -> {
diff --git a/src/main/java/kawageiser/GeiserEval.java
b/src/main/java/kawageiser/GeiserEval.java
index 842d7b1..1d99542 100644
--- a/src/main/java/kawageiser/GeiserEval.java
+++ b/src/main/java/kawageiser/GeiserEval.java
@@ -10,13 +10,12 @@ import gnu.lists.IString;
import gnu.lists.LList;
import gnu.lists.Pair;
import gnu.mapping.Environment;
-import gnu.mapping.Procedure2;
import gnu.mapping.Symbol;
import kawadevutil.eval.EvalResult;
import kawadevutil.eval.EvalResultAndOutput;
import kawadevutil.redirect.RedirectedOutErr;
-public class GeiserEval extends Procedure2 {
+public class GeiserEval {
/*
* Actual evaluation happens in kawadevutil.eval.Eval.
* Here we are just sending arguments and converting our own
@@ -24,13 +23,8 @@ public class GeiserEval extends Procedure2 {
*/
public static kawadevutil.eval.Eval evaluator = new
kawadevutil.eval.Eval();
- GeiserEval(String procName) {
- super(procName);
- }
-
- @Override
- public String
- apply2(Object module, Object codeStr) {
+ public static String
+ evalStr(Environment module, IString codeIStr) {
// The reason this method takes a string instead of a quoted sexpr has
been solved
// on 2019-12-19 in Kawa's master branch:
//
https://gitlab.com/kashell/Kawa/-/commit/537e135c0101194702ebee53faf92b98a4ea8c6b
@@ -45,22 +39,7 @@ public class GeiserEval extends Procedure2 {
// (print send-this)
// send-this))
//
-
- String code;
- if (codeStr instanceof IString) {
- code = ((IString) codeStr).toString();
- } else if (codeStr instanceof String) {
- code = (String) codeStr;
- } else {
- throw new IllegalArgumentException(
- "`codeStr' arg should be either a String or an IString");
- }
- return evalStr((Environment) module, code);
- }
-
- public static String
- evalStr(Environment module, String codeStr) {
- EvalResultAndOutput resOutErr = evaluator.evalCatchingOutErr(module,
codeStr);
+ EvalResultAndOutput resOutErr = evaluator.evalCatchingOutErr(module,
codeIStr.toString());
return formatGeiserProtocol(evaluationDataToGeiserProtocol(resOutErr));
}
diff --git a/src/main/java/kawageiser/GeiserLoadFile.java
b/src/main/java/kawageiser/GeiserLoadFile.java
index 0ad10f1..6904c84 100644
--- a/src/main/java/kawageiser/GeiserLoadFile.java
+++ b/src/main/java/kawageiser/GeiserLoadFile.java
@@ -6,32 +6,12 @@
package kawageiser;
import gnu.expr.Language;
-import gnu.lists.IString;
import gnu.lists.LList;
-import gnu.mapping.Procedure1;
import kawa.standard.load;
-public class GeiserLoadFile extends Procedure1 {
+public class GeiserLoadFile {
- GeiserLoadFile(String name) {
- super(name);
- }
-
- @Override
- public Object apply1(Object o) throws Throwable {
- String filepath;
- if (o instanceof String) {
- filepath = (String) o;
- } else if (o instanceof IString) {
- filepath = ((IString) o).toString();
- } else {
- throw new IllegalArgumentException(
- "geiser:load should take a String or an IString as
argument");
- }
- return load(filepath);
- }
-
- public Object load(String filepath) {
+ public static String loadFile(String filepath) {
return GeiserEval.evalForm(
Language.getDefaultLanguage().getEnvironment(),
LList.list2(load.load, filepath));
diff --git a/src/main/java/kawageiser/GeiserMacroexpand.java
b/src/main/java/kawageiser/GeiserMacroexpand.java
index 32e982f..e0295b8 100644
--- a/src/main/java/kawageiser/GeiserMacroexpand.java
+++ b/src/main/java/kawageiser/GeiserMacroexpand.java
@@ -9,28 +9,20 @@ import gnu.expr.Language;
import gnu.kawa.functions.Format;
import gnu.kawa.slib.syntaxutils;
import gnu.mapping.Environment;
-import gnu.mapping.Procedure1or2;
-public class GeiserMacroexpand extends Procedure1or2 {
+public class GeiserMacroexpand {
- GeiserMacroexpand(String name) {
- super(name);
+ public static String expand(Object form) throws Throwable {
+ return expand(form, true);
}
- @Override
- public Object apply1(Object form) throws Throwable {
- return apply2(form, false);
- }
-
- @Override
- public Object apply2(Object form, Object all) throws Throwable {
- // I think Kawa macro expansion can only expand to the whole tree, so:
- // 1. There is no macroexpand-1
- // 2. The `all' argument that geiser passes is ignored
+ public static String expand(Object form, boolean all) throws Throwable {
+ // `all' is ignored: geiser passes #t or #f depending on whether it
needs
+ // expand-1 or expand-all, but Kawa's `expand' can only expand the
whole tree.
return expand(form, Language.getDefaultLanguage().getEnvironment());
}
- public Object expand(Object form, Environment env) throws Throwable {
+ public static String expand(Object form, Environment env) throws Throwable
{
// TODO: How do you invoke kawa procedures with keyword arguments from
java?
// - ignoring env and using apply1, for now
// - an alternative would be to port gnu.kawa.slib.syntaxutils.expand
from scheme to java (it's easy)
@@ -69,6 +61,6 @@ public class GeiserMacroexpand extends Procedure1or2 {
// Double formatting so that double quotes around strings are not lost.
return Format.format(
"~S",
- Format.format("~S", expanded));
+ Format.format("~S", expanded)).toString();
}
}
diff --git a/src/main/java/kawageiser/GeiserNoValues.java
b/src/main/java/kawageiser/GeiserNoValues.java
index b15b29c..dddade4 100644
--- a/src/main/java/kawageiser/GeiserNoValues.java
+++ b/src/main/java/kawageiser/GeiserNoValues.java
@@ -5,20 +5,15 @@
package kawageiser;
-import gnu.mapping.Procedure0;
import gnu.mapping.Values;
-public class GeiserNoValues extends Procedure0 {
+public class GeiserNoValues {
- GeiserNoValues(String name) {
- super(name);
- }
-
- @Override
- public Object apply0() throws Throwable {
+ public static Object noValues() {
gnu.kawa.io.InPort.inDefault().setLineNumber(
gnu.kawa.io.InPort.inDefault().getLineNumber() - 1);
// apply0 signature doesn't allow us to return void
return Values.FromArray.make();
}
+
}
diff --git a/src/main/java/kawageiser/geiserDoc/ManualEpubUnzipToTmpDir.java
b/src/main/java/kawageiser/geiserDoc/ManualEpubUnzipToTmpDir.java
index f24b035..170c2de 100644
--- a/src/main/java/kawageiser/geiserDoc/ManualEpubUnzipToTmpDir.java
+++ b/src/main/java/kawageiser/geiserDoc/ManualEpubUnzipToTmpDir.java
@@ -1,31 +1,17 @@
/*
- * Copyright (C) 2020 spellcard199 <spellcard199@protonmail.com>
+ * Copyright (C) 2020 spellcard199 <spellcard199@protonmail.com>
* This is free software; for terms and warranty disclaimer see ./COPYING.
*/
package kawageiser.geiserDoc;
-import gnu.lists.IString;
-import gnu.mapping.Procedure1;
-
import java.io.File;
+import java.io.IOException;
import java.nio.file.Path;
-import java.util.Arrays;
-import java.util.List;
-
-public class ManualEpubUnzipToTmpDir extends Procedure1 {
- public ManualEpubUnzipToTmpDir(String name) {
- super(name);
- }
+public class ManualEpubUnzipToTmpDir {
- @Override
- public Object apply1(Object kawaEpubManualPath) throws Throwable {
- if (! (kawaEpubManualPath.getClass() == String.class ||
- kawaEpubManualPath.getClass() == IString.class)) {
- throw new IllegalArgumentException(
- "`kawaEpubManualPath' arg must be either String or
IString");
- }
+ public static String unzipToTmpDir(String kawaEpubManualPath) throws
IOException {
String systemTmpDir = System.getProperty("java.io.tmpdir");
String manualUnzippedTmpDir = String.join(
File.separator,
@@ -33,10 +19,10 @@ public class ManualEpubUnzipToTmpDir extends Procedure1 {
"geiser-kawa",
"manual-epub-unzipped");
- File zipArchiveFile = new File(kawaEpubManualPath.toString());
+ File zipArchiveFile = new File(kawaEpubManualPath);
Path destDirPath = new File(manualUnzippedTmpDir).toPath();
kawadevutil.util.ZipExtractor.unzip(zipArchiveFile, destDirPath);
- return gnu.kawa.functions.Format.format("~S", manualUnzippedTmpDir);
+ return gnu.kawa.functions.Format.format("~S",
manualUnzippedTmpDir).toString();
}
}
diff --git a/src/main/java/kawageiser/java/GeiserCompleteJava.java
b/src/main/java/kawageiser/java/GeiserCompleteJava.java
index b9cb060..ec4d2b7 100644
--- a/src/main/java/kawageiser/java/GeiserCompleteJava.java
+++ b/src/main/java/kawageiser/java/GeiserCompleteJava.java
@@ -9,7 +9,6 @@ import gnu.expr.Language;
import gnu.lists.IString;
import gnu.lists.LList;
import gnu.mapping.Environment;
-import gnu.mapping.Procedure4;
import gnu.math.IntNum;
import kawadevutil.complete.*;
@@ -19,44 +18,24 @@ import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
-public class GeiserCompleteJava extends Procedure4 {
+public class GeiserCompleteJava {
- public static boolean showTypes = true;
-
- public GeiserCompleteJava(String name) {
- super(name);
- }
-
- @Override
- public Object
- apply4(Object codeStr, Object cursorIndex, Object lang, Object env) throws
Throwable {
-
- String codeStrChecked = null;
- if (codeStr.getClass().equals(IString.class) ||
codeStr.getClass().equals(String.class)) {
- codeStrChecked = codeStr.toString();
- } else {
- throw new IllegalArgumentException(
- "`codeStr` must be either String or IString: " +
codeStr.getClass().toString());
- }
-
- Integer cursorIndexChecked = null;
- if (cursorIndex.getClass().equals(Integer.class)) {
- cursorIndexChecked = (Integer) cursorIndex;
- } else if (cursorIndex.getClass().equals(IntNum.class)) {
- cursorIndexChecked = ((IntNum) cursorIndex).intValue();
- } else {
- throw new IllegalArgumentException(
- "`cursorIndex` must be either Integer or IntNum: "
- + cursorIndex.getClass().toString());
- }
+ public static String
+ completeJava(IString codeStr, IntNum cursorIndex, Language lang,
Environment env)
+ throws Throwable {
// Get Data
Optional<CompletionDataForJava> complDataMaybe =
kawadevutil.complete.Complete.complete(
- codeStrChecked, cursorIndexChecked, (Language) lang,
(Environment) env, (String name) -> true);
+ codeStr.toString(),
+ Integer.valueOf(cursorIndex.toString()),
+ lang,
+ env,
+ (String name) -> true);
// Wrap data of interest in Scheme's LList
+ String resAsStr;
if (!complDataMaybe.isPresent()) {
- return LList.Empty;
+ resAsStr = gnu.kawa.functions.Format.format("~A",
LList.Empty).toString();
} else {
CompletionDataForJava complData = complDataMaybe.get();
LList res = null;
@@ -69,8 +48,10 @@ public class GeiserCompleteJava extends Procedure4 {
throw new Error("[BUG SPOTTED] `complData's class is one not
expected: "
+ complData.getClass().toString());
}
- return gnu.kawa.functions.Format.format("~S", res);
+ resAsStr = gnu.kawa.functions.Format.format("~S", res).toString();
}
+
+ return resAsStr;
}
private static LList toLList(CompletionDataForJavaFOM complData) {
@@ -112,5 +93,4 @@ public class GeiserCompleteJava extends Procedure4 {
);
return res;
}
-
}
- [nongnu] branch elpa/geiser-kawa created (now 3d999a3), Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa eba6684 014/119: pom.xml - Update kawa-geiser commit SHA, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa f5a1697 026/119: README - small reword, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 2ec29bd 011/119: pom.xml - use specific commit instead of -SNAPSHOT for kawa-geiser dep, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 63e662d 012/119: README - reword quickstart instructions, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa fabe331 047/119: Use kawa-devutil's Kawa server wrapper instead of own solution, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 1b82b8f 056/119: Add tests for elisp, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 3c57d06 059/119: TODO.org: Add todos, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 1f6357f 009/119: README - Update, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 4ba3dc2 035/119: Add support for macroexpand, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 266413b 038/119: Refactor: replace Kawa procedures with primitive methods + update kawa-devutil dep,
Philip Kaludercic <=
- [nongnu] elpa/geiser-kawa 281d27c 028/119: Add COPYING, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 72dbb50 036/119: Refactor: rename classes, move static field between classes, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 91929a6 013/119: Small naming change, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 8451f3b 017/119: README.org - Small reword, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa ed8d954 055/119: Rename funcs, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa e4679f7 066/119: pom.xml update kawa-devutil dep + fix code accordingly, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 80ed3e7 068/119: Update geiser version + remove geiser workaround for Cask, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa f258b9a 073/119: TODO.org: add notes to self on how to make the melpa recipe, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa da47cd7 082/119: Fix broken name, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa e0fd1de 084/119: Refactor geiser-kawa-devutil-exprtree.el, Philip Kaludercic, 2021/08/01