我有一個Eclipse插件,我創建它來添加代碼完成條目。我將Eclipse配置爲在我鍵入(Windows |首選項| PyDev |編輯器|代碼完成|請求完成所有字母字符和'_')時自動顯示代碼完成。起初,當我輸入時,我一直在顯示模板而不是代碼完成條目,因此我刪除了所有模板(Windows |首選項| PyDev |模板 - 全選,然後「刪除」)。現在,當我鍵入它適用於其他每個按鍵。例如,當我輸入'print'時,當按下'p'時,代碼完成列表隨着我的輸入而下降。但是,當我按'r'時,列表消失。當我按'i'時,列表再次顯示,但當我按下下一個鍵('n')等時消失。這是Pydev缺陷,還是我做錯了什麼?它適用於模板和其他默認代碼完成,僅適用於我的插件。這裏是剪斷的我的代碼淡化的版本代碼: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;
}
我已搜查谷歌和StackOverflow上,並已很少見到有關代碼開發的PyDev插件,並沒有什麼提到或解決了這一問題。
這裏有一些我已經看過的聯繫,但沒有回答我的問題:
- Auto-completion in PyDev
- Code completion for custom modules not working with PyDev
- pydev remote debuging - code completion in interactive console?
感謝您的快速響應!在回答你的4項內容時:(1) '使用常見的令牌自動代碼完成'未被選中,我仍然將模板顯示爲第二組代碼完成 - 我可以在兩個按鈕之間切換Ctrl +空格,但不想這樣做,所以我不得不刪除「模板」下的模板。 (2)好的...(3)看起來很有希望......我會試試看......(4)只是在嘗試那些沒有用的東西,忘了清理那些東西 - 很好。 – MrMobileMan
我實現了IPyDevCompletionParticipant,而引用代碼實現了這個類+ IPyDevCompletionParticipant2。當我嘗試實現這個第二接口時,我實現了必要的方法(即computeConsoleCompletions(...)),但它的簽名中有一個IScriptConsoleViewer,在我添加PyDev shared_interactive_console jar之前,Eclipse無法找到它。我是否以正確的方式去做這件事?我設置了一個斷點,並且它沒有觸碰computeConsoleCompletions(...)方法中的斷點... – MrMobileMan
IPyDevCompletionParticipant2.computeConsoleCompletions不是必需的 - 僅當在控制檯中詢問代碼完成時才需要添加完成 - 需要的是ICompletionProposalExtension2和ICompletionProposalExtension - AbstractPyCompletionProposalExtension2提供的。 –