1
0
mirror of https://github.com/arduino/Arduino.git synced 2025-02-26 20:54:22 +01:00

cache + sort for autocomplete

This commit is contained in:
Martino Facchin 2017-10-05 17:31:33 +02:00
parent ad2b97fff8
commit d8d06134c7
2 changed files with 28 additions and 14 deletions

View File

@ -36,8 +36,10 @@ import javax.swing.text.BadLocationException;
import javax.swing.text.JTextComponent; import javax.swing.text.JTextComponent;
import org.fife.ui.autocomplete.Completion; import org.fife.ui.autocomplete.Completion;
import org.fife.ui.autocomplete.CompletionProvider;
import org.fife.ui.autocomplete.DefaultCompletionProvider; import org.fife.ui.autocomplete.DefaultCompletionProvider;
import org.fife.ui.autocomplete.FunctionCompletion; import org.fife.ui.autocomplete.FunctionCompletion;
import org.fife.ui.autocomplete.LanguageAwareCompletionProvider;
import org.fife.ui.autocomplete.ParameterizedCompletion.Parameter; import org.fife.ui.autocomplete.ParameterizedCompletion.Parameter;
import org.fife.ui.autocomplete.TemplateCompletion; import org.fife.ui.autocomplete.TemplateCompletion;
@ -46,20 +48,17 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import processing.app.Editor; import processing.app.Editor;
import processing.app.EditorTab; import processing.app.EditorTab;
public class ClangCompletionProvider extends DefaultCompletionProvider { public class ClangCompletionProvider extends LanguageAwareCompletionProvider {
private Editor editor; private Editor editor;
private String completeCache;
private int completeCacheLine;
private int completeCacheColumn;
public ClangCompletionProvider(Editor e) { public ClangCompletionProvider(Editor e, DefaultCompletionProvider cp) {
super(); super(cp);
editor = e; editor = e;
setParameterizedCompletionParams('(', ", ", ')'); //setParameterizedCompletionParams('(', ", ", ')');
}
@Override
public List<Completion> getCompletionByInputText(String inputText) {
System.out.println("INPUTTEXT: " + inputText);
return super.getCompletionByInputText(inputText);
} }
@Override @Override
@ -84,14 +83,21 @@ public class ClangCompletionProvider extends DefaultCompletionProvider {
try { try {
// Run codecompletion engine // 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); .codeComplete(tab.getSketchFile(), line, col);
completeCache = out;
completeCacheLine = line;
}
completeCacheColumn = col;
// Parse engine output and build code completions // Parse engine output and build code completions
ObjectMapper mapper = new ObjectMapper(); ObjectMapper mapper = new ObjectMapper();
ArduinoCompletionsList allCc; ArduinoCompletionsList allCc;
allCc = mapper.readValue(out, ArduinoCompletionsList.class); allCc = mapper.readValue(out, ArduinoCompletionsList.class);
for (ArduinoCompletion cc : allCc) { for (ArduinoCompletion cc : allCc) {
if (cc.type.equals("Macro")) { if (cc.type.equals("Macro")) {
// for now skip macro // for now skip macro
continue; continue;
@ -108,6 +114,10 @@ public class ClangCompletionProvider extends DefaultCompletionProvider {
} }
} }
if (!cc.getCompletion().getTypedText().startsWith(getAlreadyEnteredText(textarea))) {
continue;
}
FunctionCompletion compl = new FunctionCompletion(this, FunctionCompletion compl = new FunctionCompletion(this,
cc.getCompletion().getTypedText(), cc.getCompletion().getTypedText(),
cc.getCompletion().getResultType()); cc.getCompletion().getResultType());
@ -135,13 +145,15 @@ public class ClangCompletionProvider extends DefaultCompletionProvider {
template += "${" + spl[spl.length - 1] + "}"; template += "${" + spl[spl.length - 1] + "}";
} }
if (chunk.info != null) { if (chunk.info != null) {
System.out.println("INFO: "+chunk.info); //System.out.println("INFO: "+chunk.info);
} }
} }
template += "${cursor}"; 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, res.add(new TemplateCompletion(this, typedText, typedText + returnType,
template)); template));
}
} }
return res; return res;
} catch (Exception e) { } catch (Exception e) {

View File

@ -59,6 +59,7 @@ import java.io.File;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.fife.ui.autocomplete.AutoCompletion; import org.fife.ui.autocomplete.AutoCompletion;
import org.fife.ui.autocomplete.DefaultCompletionProvider;
import org.fife.ui.rsyntaxtextarea.RSyntaxDocument; import org.fife.ui.rsyntaxtextarea.RSyntaxDocument;
import org.fife.ui.rsyntaxtextarea.RSyntaxTextAreaEditorKit; import org.fife.ui.rsyntaxtextarea.RSyntaxTextAreaEditorKit;
import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities; import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities;
@ -125,7 +126,8 @@ public class EditorTab extends JPanel implements SketchFile.TextStorage {
// SketchCompletionProvider completionProvider = new SketchCompletionProvider( // SketchCompletionProvider completionProvider = new SketchCompletionProvider(
// editor.getSketch(), textarea, new ClangCompletionProvider(editor)); // 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.setAutoActivationEnabled(true);
ac.setShowDescWindow(false); ac.setShowDescWindow(false);
ac.setAutoCompleteSingleChoices(true); ac.setAutoCompleteSingleChoices(true);