Skip to content

Commit 5b39593

Browse files
committed
cache + sort for autocomplete
1 parent 2a67477 commit 5b39593

File tree

2 files changed

+28
-14
lines changed

2 files changed

+28
-14
lines changed

app/src/cc/arduino/autocomplete/ClangCompletionProvider.java

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,10 @@
3636
import javax.swing.text.JTextComponent;
3737

3838
import org.fife.ui.autocomplete.Completion;
39+
import org.fife.ui.autocomplete.CompletionProvider;
3940
import org.fife.ui.autocomplete.DefaultCompletionProvider;
4041
import org.fife.ui.autocomplete.FunctionCompletion;
42+
import org.fife.ui.autocomplete.LanguageAwareCompletionProvider;
4143
import org.fife.ui.autocomplete.ParameterizedCompletion.Parameter;
4244
import org.fife.ui.autocomplete.TemplateCompletion;
4345

@@ -46,20 +48,17 @@
4648
import processing.app.Editor;
4749
import processing.app.EditorTab;
4850

49-
public class ClangCompletionProvider extends DefaultCompletionProvider {
51+
public class ClangCompletionProvider extends LanguageAwareCompletionProvider {
5052

5153
private Editor editor;
54+
private String completeCache;
55+
private int completeCacheLine;
56+
private int completeCacheColumn;
5257

53-
public ClangCompletionProvider(Editor e) {
54-
super();
58+
public ClangCompletionProvider(Editor e, DefaultCompletionProvider cp) {
59+
super(cp);
5560
editor = e;
56-
setParameterizedCompletionParams('(', ", ", ')');
57-
}
58-
59-
@Override
60-
public List<Completion> getCompletionByInputText(String inputText) {
61-
System.out.println("INPUTTEXT: " + inputText);
62-
return super.getCompletionByInputText(inputText);
61+
//setParameterizedCompletionParams('(', ", ", ')');
6362
}
6463

6564
@Override
@@ -84,14 +83,21 @@ protected List<Completion> getCompletionsImpl(JTextComponent textarea) {
8483

8584
try {
8685
// Run codecompletion engine
87-
String out = editor.getSketchController()
86+
String out = completeCache;
87+
if (completeCacheLine != line || (completeCacheColumn != (col + 1)) && (completeCacheColumn != (col - 1))) {
88+
out = editor.getSketchController()
8889
.codeComplete(tab.getSketchFile(), line, col);
90+
completeCache = out;
91+
completeCacheLine = line;
92+
}
93+
completeCacheColumn = col;
8994

9095
// Parse engine output and build code completions
9196
ObjectMapper mapper = new ObjectMapper();
9297
ArduinoCompletionsList allCc;
9398
allCc = mapper.readValue(out, ArduinoCompletionsList.class);
9499
for (ArduinoCompletion cc : allCc) {
100+
95101
if (cc.type.equals("Macro")) {
96102
// for now skip macro
97103
continue;
@@ -108,6 +114,10 @@ protected List<Completion> getCompletionsImpl(JTextComponent textarea) {
108114
}
109115
}
110116

117+
if (!cc.getCompletion().getTypedText().startsWith(getAlreadyEnteredText(textarea))) {
118+
continue;
119+
}
120+
111121
FunctionCompletion compl = new FunctionCompletion(this,
112122
cc.getCompletion().getTypedText(),
113123
cc.getCompletion().getResultType());
@@ -135,13 +145,15 @@ protected List<Completion> getCompletionsImpl(JTextComponent textarea) {
135145
template += "${" + spl[spl.length - 1] + "}";
136146
}
137147
if (chunk.info != null) {
138-
System.out.println("INFO: "+chunk.info);
148+
//System.out.println("INFO: "+chunk.info);
139149
}
140150
}
141151
template += "${cursor}";
142-
System.out.println("TEMPLATE: " + template);
152+
//System.out.println("TEMPLATE: " + template);
153+
if (typedText.startsWith(getAlreadyEnteredText(textarea))) {
143154
res.add(new TemplateCompletion(this, typedText, typedText + returnType,
144155
template));
156+
}
145157
}
146158
return res;
147159
} catch (Exception e) {

app/src/processing/app/EditorTab.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
import java.io.File;
6060

6161
import org.fife.ui.autocomplete.AutoCompletion;
62+
import org.fife.ui.autocomplete.DefaultCompletionProvider;
6263
import org.fife.ui.rsyntaxtextarea.RSyntaxDocument;
6364
import org.fife.ui.rsyntaxtextarea.RSyntaxTextAreaEditorKit;
6465
import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities;
@@ -125,7 +126,8 @@ public EditorTab(Editor editor, SketchFile file, String contents)
125126
// SketchCompletionProvider completionProvider = new SketchCompletionProvider(
126127
// editor.getSketch(), textarea, new ClangCompletionProvider(editor));
127128

128-
AutoCompletion ac = new AutoCompletion(new ClangCompletionProvider(editor));
129+
DefaultCompletionProvider cp = new DefaultCompletionProvider();
130+
AutoCompletion ac = new AutoCompletion(new ClangCompletionProvider(editor, cp));
129131
ac.setAutoActivationEnabled(true);
130132
ac.setShowDescWindow(false);
131133
ac.setAutoCompleteSingleChoices(true);

0 commit comments

Comments
 (0)