[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/geiser-kawa 58ef04d 089/119: Add autodoc support for LangO
From: |
Philip Kaludercic |
Subject: |
[nongnu] elpa/geiser-kawa 58ef04d 089/119: Add autodoc support for LangObjType |
Date: |
Sun, 1 Aug 2021 18:30:44 -0400 (EDT) |
branch: elpa/geiser-kawa
commit 58ef04dc751965098e62dfd718350b26a44ef8de
Author: spellcard199 <spellcard199@protonmail.com>
Commit: spellcard199 <spellcard199@protonmail.com>
Add autodoc support for LangObjType
---
pom.xml | 2 +-
src/main/java/kawageiser/GeiserAutodoc.java | 115 ++++++++++++++++++------
src/test/java/kawageiser/GeiserAutodocTest.java | 20 +++++
3 files changed, 108 insertions(+), 29 deletions(-)
diff --git a/pom.xml b/pom.xml
index 31f0bea..8d93f9e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -71,7 +71,7 @@
<dependency>
<groupId>com.gitlab.spellcard199</groupId>
<artifactId>kawa-devutil</artifactId>
- <version>d2ff2608493eadc61c627bfe4ca57c293d2454f2</version>
+ <version>1fdfbc18591a068404e4cb86b4fb3c9b157dd44c</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.testng/testng -->
diff --git a/src/main/java/kawageiser/GeiserAutodoc.java
b/src/main/java/kawageiser/GeiserAutodoc.java
index f4821ca..0647a96 100644
--- a/src/main/java/kawageiser/GeiserAutodoc.java
+++ b/src/main/java/kawageiser/GeiserAutodoc.java
@@ -8,6 +8,7 @@ package kawageiser;
import gnu.expr.CompiledProc;
import gnu.expr.Language;
import gnu.kawa.functions.Format;
+import gnu.kawa.lispexpr.LangObjType;
import gnu.lists.LList;
import gnu.mapping.Environment;
import gnu.mapping.Procedure;
@@ -19,6 +20,7 @@ import kawadevutil.eval.EvalResult;
import kawadevutil.kawa.GnuMappingLocation;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Optional;
@@ -212,19 +214,42 @@ public class GeiserAutodoc {
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 if (operatorMaybe.isPresent() &&
operatorMaybe.get().getClass().equals(Class.class)) {
- Class clz = (Class) operatorMaybe.get();
- ProcDataGeneric procDataGeneric =
ProcDataGeneric.makeForConstructors(clz);
- 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();
+ if (operatorMaybe.isPresent()) {
+ Object operator = operatorMaybe.get();
+
+ if (Procedure.class.isAssignableFrom(operator.getClass()))
{
+ Procedure operatorProc
+ = (Procedure) operator;
+ ProcDataGeneric procDataGeneric
+ =
ProcDataGeneric.makeForProcedure(operatorProc);
+ operatorArgListMaybe
+ = Optional.of(new
OperatorArgListData(procDataGeneric));
+
+ } else if (operator.getClass().equals(Class.class)) {
+ Class operatorClass
+ = (Class) operatorMaybe.get();
+ ProcDataGeneric procDataGeneric
+ =
ProcDataGeneric.makeForConstructors(operatorClass);
+ operatorArgListMaybe
+ = Optional.of(new
OperatorArgListData(procDataGeneric));
+
+ } else if
(LangObjType.class.isAssignableFrom(operator.getClass())) {
+ LangObjType operatorLOT
+ = (LangObjType) operator;
+ Procedure constructorProc
+ = operatorLOT.getConstructor();
+ ProcDataGeneric procDataGeneric
+ =
ProcDataGeneric.makeForProcedure(constructorProc);
+ 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();
+ }
+
}
} catch (Throwable throwable) {
throwable.printStackTrace();
@@ -248,24 +273,58 @@ public class GeiserAutodoc {
// TODO: write a procedure that gets the module getMethods
// which a symbol comes getMethods using "the right way" (is
there one?)
- // TODO: When we find the correct way to do it, refactor
moduleValue inside
+ // TODO: When we find the correct way to do it, refactor
moduleLList inside
// ProcDataNonGeneric or a generic wrapper for Procedure data
- LList moduleValue = null;
- if (operatorMaybe.isPresent() && operatorMaybe.get().getClass() ==
CompiledProc.class) {
- CompiledProc compProc = (CompiledProc) operatorMaybe.get();
- moduleValue = LList.makeList(
- java.util.Arrays
- .asList(compProc
- .getModuleClass()
- .getName()
- .split("\\.")));
- } else {
+ LList moduleLList = null;
+ if (this.operatorMaybe.isPresent()) {
+
+ Object operator = this.operatorMaybe.get();
+
+ if (operator.getClass().equals(CompiledProc.class)) {
+ CompiledProc compProc = (CompiledProc) operator;
+ moduleLList = LList.makeList(
+ java.util.Arrays
+ .asList(compProc
+ .getModuleClass()
+ .getName()
+ .split("\\.")));
+
+ } else if (operator.getClass().equals(LangObjType.class)
+ && this.operatorArgListMaybe.isPresent()) {
+ Procedure constructorProc = ((LangObjType)
operator).getConstructor();
+ String constructorName = constructorProc.getName();
+ // constructorName examples:
+ // list: list
+ // filepath:
gnu.kawa.io.FilePath.makeFilePath(java.lang.Object)
+ String constructorNameNoSig = constructorName.contains("(")
+ ? constructorName
+ .substring(0, constructorName.indexOf("("))
+ : constructorName;
+ ArrayList<String> splitAtDot = new ArrayList<>(
+ Arrays.asList(constructorNameNoSig.split("\\."))
+ );
+ int procNameIndex = splitAtDot.size() - 1;
+ String procNameOnly = splitAtDot.get(procNameIndex);
+
+ Class moduleAsClass
+ =
this.operatorArgListMaybe.get().procDataGeneric.getModule();
+ ArrayList<String> moduleList = new ArrayList<>();
+ moduleList.addAll(
+ Arrays.asList(moduleAsClass.getName().split("\\."))
+ );
+ moduleList.add(":" + procNameOnly);
+ moduleLList = LList.makeList(moduleList);
+ }
+ }
+
+ // If none of the previous conditions matched, moduleLList is
still null.
+ if (moduleLList == null) {
try {
// If it's not a CompiledProc it does not have a
// `getModule' method: fallback to trying to figure
// out getMethods GnuMappingLocation in Environment.
// TODO: generalize to arbitrary environment
- moduleValue = (LList) kawa.lib.ports.read(
+ moduleLList = (LList) kawa.lib.ports.read(
new gnu.kawa.io.CharArrayInPort(
GnuMappingLocation.baseLocationToModuleName(
environment.lookup(symId).getBase()
@@ -275,7 +334,7 @@ public class GeiserAutodoc {
} catch (NullPointerException e) {
// If it is not even a sym in the environment, give up.
// TODO: should we consider all java classes as modules?
- moduleValue = LList.makeList(new ArrayList());
+ moduleLList = LList.makeList(new ArrayList());
}
}
@@ -290,10 +349,10 @@ public class GeiserAutodoc {
// so geiser ignores it.
String symIdAsStr = symId.toString();
LList res;
- if (moduleValue.size() > 0) {
+ if (moduleLList.size() > 0) {
ArrayList<Object> moduleList = new ArrayList<>();
moduleList.add("module");
- for (Object m : moduleValue) {
+ for (Object m : moduleLList) {
moduleList.add(Symbol.valueOf(m.toString()));
}
res = LList.list3(
diff --git a/src/test/java/kawageiser/GeiserAutodocTest.java
b/src/test/java/kawageiser/GeiserAutodocTest.java
index 564447b..c67244a 100644
--- a/src/test/java/kawageiser/GeiserAutodocTest.java
+++ b/src/test/java/kawageiser/GeiserAutodocTest.java
@@ -85,4 +85,24 @@ public class GeiserAutodocTest {
assertEquals("java.lang.String:format", llist.get(0));
}
}
+
+ @Test
+ public static void
+ testLangObjType() {
+ Scheme scheme = new Scheme();
+ Environment env = scheme.getEnvironment();
+ Symbol filepath = env.getSymbol("filepath");
+ GeiserAutodoc.AutodocDataForSymId autodocDataForFilepath
+ = new GeiserAutodoc.AutodocDataForSymId(filepath, env, scheme);
+ String filepathDataAsString =
autodocDataForFilepath.toLList().toString();
+ assertTrue(filepathDataAsString.startsWith("(filepath"));
+ assertTrue(filepathDataAsString.contains("module gnu kawa io
FilePath"));
+
+ Symbol list = env.getSymbol("list");
+ GeiserAutodoc.AutodocDataForSymId autodocDataForList
+ = new GeiserAutodoc.AutodocDataForSymId(list, env, scheme);
+ String listDataAsString = autodocDataForList.toLList().toString();
+ assertTrue(listDataAsString.startsWith("(list"));
+ assertTrue(listDataAsString.contains("module gnu kawa functions
MakeList"));
+ }
}
\ No newline at end of file
- [nongnu] elpa/geiser-kawa f1d6f8d 023/119: Add maven-wrapper, (continued)
- [nongnu] elpa/geiser-kawa f1d6f8d 023/119: Add maven-wrapper, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 0f5c744 016/119: Avoid issues with older Kawa versions when using quickstart.el, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 5651a3a 031/119: Add message if no completions found, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa cebaa28 042/119: Add test, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 6495077 064/119: Fix: replace lang.getEnvironment() with Environment.user() as default environment, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa b15c4bc 069/119: TODO.org: add todo, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 56b7524 076/119: Add more elisp tests, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 0fd7c30 086/119: README.org: update, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa f8cf352 096/119: Update kawa-devutil version + add Random_notes.org, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa df35e6b 099/119: Add unwind-protect in geiser-kawa-deps--run-kawa-unadviced, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 58ef04d 089/119: Add autodoc support for LangObjType,
Philip Kaludercic <=
- [nongnu] elpa/geiser-kawa d389ebd 092/119: Update README.org, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 4141232 103/119: melpa/melpa#6858 - Avoid "Unused lexical argument" warnings prepending "_" to parameter names, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa c4de6bb 117/119: pom.xml - update kawa-devutil version (adds support for Java 8), Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa f0f5441 002/119: README.org - Add mention about difference from geiser-kawa-scheme, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa a42e807 022/119: Fix warnings when running 'mvn package', Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 088654b 033/119: Fix function definition is void: word-at-point, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 6d4c6f5 004/119: Update .gitignore, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 274f990 024/119: Use mvnw (maven-wrapper) as default command to compile kawa-geiser, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa 55efc48 043/119: Fix non-passing Autodoc test, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-kawa a709cfc 027/119: Small reword in README, Philip Kaludercic, 2021/08/01