1

私は jedi を使用して PyQt アプリケーション内の Python コードを完成させ、可能な補完を使用QCompleterQStringListModelて保存しようとしています。

簡単な動作デモを次に示します。

#!/usr/bin/env python3

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import jedi
import sys

class JediEdit(QLineEdit):
    def __init__(self, parent=None):
        super().__init__(parent)

        self._model = QStringListModel()
        self._compl = QCompleter()
        self._compl.setModel(self._model)
        self.setCompleter(self._compl)
        self.textEdited.connect(self.update_model)

    def update_model(self, cur_text):
        script = jedi.Script(cur_text)
        compl = script.completions()
        strings = list(cur_text + c.complete for c in compl) 
        self._model.setStringList(strings)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    line = JediEdit()
    line.show()
    sys.exit(app.exec_())

アプリケーションを実行し、何も完了しないコード (または などfoo =) を記述した場合、実際には、その位置に配置できるすべての可能なトークンが完了に表示されます。

そのため、フィールドにスペースを実行して書き込むと、 から まで、さまざまなものが表示さabs__version__ます。

これを防ぎたい:jedi.Scriptトークンが完了しているかどうか、または完全に新しいトークンが開始されているかどうかを理解するためにクエリを実行することは可能ですか?

編集: 別の小さな質問: ジェダイの現在の状態から切り離されたインタープリターを実行しているとします。jedi.Scriptローカル変数とグローバル変数を提供して、独自の補完ではなく、それらを考慮に入れるにはどうすればよいですか?

4

1 に答える 1