Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/arduino/Arduino.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartino Facchin <m.facchin@arduino.cc>2017-10-05 18:31:33 +0300
committerMartino Facchin <m.facchin@arduino.cc>2020-04-07 15:09:06 +0300
commitd8d06134c75979d6b90b48aa6e0fafb36cdd00ea (patch)
tree3904da854425bbfd14acb48d23e8fb4d367691df
parentad2b97fff89bf1f75218c7d1ce4f249a213e2fc8 (diff)
cache + sort for autocomplete
-rw-r--r--app/src/cc/arduino/autocomplete/ClangCompletionProvider.java38
-rw-r--r--app/src/processing/app/EditorTab.java4
2 files changed, 28 insertions, 14 deletions
diff --git a/app/src/cc/arduino/autocomplete/ClangCompletionProvider.java b/app/src/cc/arduino/autocomplete/ClangCompletionProvider.java
index cb13a99e4..259457020 100644
--- a/app/src/cc/arduino/autocomplete/ClangCompletionProvider.java
+++ b/app/src/cc/arduino/autocomplete/ClangCompletionProvider.java
@@ -36,8 +36,10 @@ import javax.swing.text.BadLocationException;
import javax.swing.text.JTextComponent;
import org.fife.ui.autocomplete.Completion;
+import org.fife.ui.autocomplete.CompletionProvider;
import org.fife.ui.autocomplete.DefaultCompletionProvider;
import org.fife.ui.autocomplete.FunctionCompletion;
+import org.fife.ui.autocomplete.LanguageAwareCompletionProvider;
import org.fife.ui.autocomplete.ParameterizedCompletion.Parameter;
import org.fife.ui.autocomplete.TemplateCompletion;
@@ -46,20 +48,17 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import processing.app.Editor;
import processing.app.EditorTab;
-public class ClangCompletionProvider extends DefaultCompletionProvider {
+public class ClangCompletionProvider extends LanguageAwareCompletionProvider {
private Editor editor;
+ private String completeCache;
+ private int completeCacheLine;
+ private int completeCacheColumn;
- public ClangCompletionProvider(Editor e) {
- super();
+ public ClangCompletionProvider(Editor e, DefaultCompletionProvider cp) {
+ super(cp);
editor = e;
- setParameterizedCompletionParams('(', ", ", ')');
- }
-
- @Override
- public List<Completion> getCompletionByInputText(String inputText) {
- System.out.println("INPUTTEXT: " + inputText);
- return super.getCompletionByInputText(inputText);
+ //setParameterizedCompletionParams('(', ", ", ')');
}
@Override
@@ -84,14 +83,21 @@ public class ClangCompletionProvider extends DefaultCompletionProvider {
try {
// Run codecompletion engine
- String out = editor.getSketchController()
+ String out = completeCache;
+ if (completeCacheLine != line || (completeCacheColumn != (col + 1)) && (completeCacheColumn != (col - 1))) {
+ out = editor.getSketchController()
.codeComplete(tab.getSketchFile(), line, col);
+ completeCache = out;
+ completeCacheLine = line;
+ }
+ completeCacheColumn = col;
// Parse engine output and build code completions
ObjectMapper mapper = new ObjectMapper();
ArduinoCompletionsList allCc;
allCc = mapper.readValue(out, ArduinoCompletionsList.class);
for (ArduinoCompletion cc : allCc) {
+
if (cc.type.equals("Macro")) {
// for now skip macro
continue;
@@ -108,6 +114,10 @@ public class ClangCompletionProvider extends DefaultCompletionProvider {
}
}
+ if (!cc.getCompletion().getTypedText().startsWith(getAlreadyEnteredText(textarea))) {
+ continue;
+ }
+
FunctionCompletion compl = new FunctionCompletion(this,
cc.getCompletion().getTypedText(),
cc.getCompletion().getResultType());
@@ -135,13 +145,15 @@ public class ClangCompletionProvider extends DefaultCompletionProvider {
template += "${" + spl[spl.length - 1] + "}";
}
if (chunk.info != null) {
- System.out.println("INFO: "+chunk.info);
+ //System.out.println("INFO: "+chunk.info);
}
}
template += "${cursor}";
- System.out.println("TEMPLATE: " + template);
+ //System.out.println("TEMPLATE: " + template);
+ if (typedText.startsWith(getAlreadyEnteredText(textarea))) {
res.add(new TemplateCompletion(this, typedText, typedText + returnType,
template));
+ }
}
return res;
} catch (Exception e) {
diff --git a/app/src/processing/app/EditorTab.java b/app/src/processing/app/EditorTab.java
index dee774e2d..3e2945306 100644
--- a/app/src/processing/app/EditorTab.java
+++ b/app/src/processing/app/EditorTab.java
@@ -59,6 +59,7 @@ import java.io.File;
import org.apache.commons.lang3.StringUtils;
import org.fife.ui.autocomplete.AutoCompletion;
+import org.fife.ui.autocomplete.DefaultCompletionProvider;
import org.fife.ui.rsyntaxtextarea.RSyntaxDocument;
import org.fife.ui.rsyntaxtextarea.RSyntaxTextAreaEditorKit;
import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities;
@@ -125,7 +126,8 @@ public class EditorTab extends JPanel implements SketchFile.TextStorage {
// SketchCompletionProvider completionProvider = new SketchCompletionProvider(
// editor.getSketch(), textarea, new ClangCompletionProvider(editor));
- AutoCompletion ac = new AutoCompletion(new ClangCompletionProvider(editor));
+ DefaultCompletionProvider cp = new DefaultCompletionProvider();
+ AutoCompletion ac = new AutoCompletion(new ClangCompletionProvider(editor, cp));
ac.setAutoActivationEnabled(true);
ac.setShowDescWindow(false);
ac.setAutoCompleteSingleChoices(true);