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:
parent
ad2b97fff8
commit
d8d06134c7
@ -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,14 +145,16 @@ 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) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user