У меня есть подключаемый модуль Eclipse, который я создал для добавления записей завершения кода. Я настроил Eclipse для автоматического отображения завершения кода по мере ввода (Windows | Настройки | PyDev | Редактор | Завершение кода | Запрос завершения для всех буквенных символов и '_'?). Сначала, когда я печатал, я продолжал получать шаблоны, отображаемые вместо моих записей завершения кода, поэтому я удалил все шаблоны (Windows | Preferences | PyDev | Templates — выбрал все, затем «Удалить»). Теперь, когда я печатаю, он работает правильно для любой другой нажатой клавиши. Например, когда я набираю «печать», список завершения кода выпадает с моими записями, как и ожидалось, когда я нажимаю «p». Однако, когда я нажимаю «r», список исчезает. Когда я нажимаю «i», список снова отображается, но исчезает, когда я нажимаю следующую клавишу («n») и т. д. Это дефект Pydev или я делаю что-то не так? Он отлично работает для шаблонов и другого автодополнения кода по умолчанию, но не для моего плагина. Вот код, вырезанный из разбавленной версии моего кода:
//...
public class MyPlugin implements IPyDevCompletionParticipant
@Override
public Collection<Object> getGlobalCompletions(CompletionRequest arg0,
ICompletionState arg1) throws MisconfigurationException {
String replacementString = "{" + arg0.qualifier + "}";
int replacementOffset = arg0.documentOffset - arg0.qlen;
int replacementLength = arg0.qlen;
int cursorPosition = arg0.documentOffset;
String displayString = arg0.qualifier;
final IContextInformation contextInformation = new ContextInformation(
"displayStr", "message");
String additionalProposalInfo = "additionalProposalInfo";
final String bundle = "com.github.EclipseChameleonPlugins";
final org.eclipse.swt.graphics.Image image = new org.eclipse.swt.graphics.Image(getDisplay(), locateFile(bundle, "icons/smiley.gif").getPath());
arg0.showTemplates = false;
final CompletionProposal proposal = new CompletionProposal(
replacementString, replacementOffset, replacementLength,
cursorPosition, image, displayString, contextInformation, additionalProposalInfo);
List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>();
// ADD IT...
proposals.add(proposal);
final Collection<Object> returnProposals = new ArrayList<Object>(
proposals);
return returnProposals;
}
Я искал в Google и StackOverflow и очень мало видел о разработке кода для подключаемых модулей PyDev, и ничего, что упоминало бы или касалось этой проблемы.
Вот несколько ссылок, которые я просмотрел, но ни одна из них не ответила на мой вопрос: