From 0893b9b0fed3661695d875432bb29ef5531e3d06 Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Fri, 19 May 2017 17:00:50 -0400 Subject: [PATCH] Add autocompletion support for polyglot kernel --- pom.xml | 1 + .../kernel/evaluator/ScijavaEvaluator.java | 27 ++++++++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 3874b0b..5b15ba6 100644 --- a/pom.xml +++ b/pom.xml @@ -84,6 +84,7 @@ Hadrien Mary apache20 3.5 + 2.63.0-SNAPSHOT diff --git a/src/main/java/org/scijava/jupyter/kernel/evaluator/ScijavaEvaluator.java b/src/main/java/org/scijava/jupyter/kernel/evaluator/ScijavaEvaluator.java index 8d3671f..7395fdf 100644 --- a/src/main/java/org/scijava/jupyter/kernel/evaluator/ScijavaEvaluator.java +++ b/src/main/java/org/scijava/jupyter/kernel/evaluator/ScijavaEvaluator.java @@ -38,6 +38,8 @@ import org.scijava.Context; import org.scijava.log.LogService; import org.scijava.plugin.Parameter; +import org.scijava.script.AutoCompleter; +import org.scijava.script.AutoCompletionResult; import org.scijava.script.ScriptLanguage; import org.scijava.script.ScriptService; import org.scijava.thread.ThreadService; @@ -64,6 +66,7 @@ public class ScijavaEvaluator implements Evaluator { private final Map scriptEngines; private final Map scriptLanguages; + private final Map completers; private String languageName; protected String shellId; @@ -77,6 +80,8 @@ public ScijavaEvaluator(Context context, String shellId, String sessionId) { this.scriptEngines = new HashMap<>(); this.scriptLanguages = new HashMap<>(); + + this.completers = new HashMap<>(); this.languageName = DEFAULT_LANGUAGE; } @@ -87,12 +92,19 @@ public void setShellOptions(KernelParameters kp) throws IOException { } @Override - public AutocompleteResult autocomplete(String code, int i) { - List matches = new ArrayList<>(); - matches.add("Autocompletion does not work yet."); - int startIndex = 0; - AutocompleteResult ac = new AutocompleteResult(matches, startIndex); - return ac; + public AutocompleteResult autocomplete(String code, int index) { + + // TODO: we need to find a way the language related to the current cell. + // For now, we are just using the last used language. + AutoCompleter completer = this.completers.get(this.languageName); + ScriptEngine scriptEngine = this.scriptEngines.get(this.languageName); + + AutoCompletionResult result = completer.autocomplete(code, index, scriptEngine); + + List matches = (List) result.getMatches(); + int startIndex = (int) result.getStartIndex(); + + return new AutocompleteResult(matches, startIndex); } @Override @@ -145,6 +157,9 @@ private void addLanguage(String langName) { ScriptEngine engine = this.scriptLanguages.get(langName).getScriptEngine(); this.scriptEngines.put(langName, engine); + + AutoCompleter completer = scriptLanguage.getAutoCompleter(); + this.completers.put(languageName, completer); // Not implemented yet //engine.setBindings(this.bindings, ScriptContext.ENGINE_SCOPE);