私は jedi を使用して PyQt アプリケーション内の Python コードを完成させ、可能な補完を使用QCompleter
しQStringListModel
て保存しようとしています。
簡単な動作デモを次に示します。
#!/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
ローカル変数とグローバル変数を提供して、独自の補完ではなく、それらを考慮に入れるにはどうすればよいですか?