Project Help wanted: AutoComplete in DrPython
Verfasst: Dienstag 10. August 2010, 21:10
Hallo, ich möchte grundsätzlich fragen, ob so etwas eher verpönt ist oder nicht. Ich habe nicht genug Kenntnisse oder Zeit, um ein gutes CodeComplete Plugin zu schreiben, und zwar für DrPython. Ich habe mir als Beispiele angesehen: Editra, Boa Constructor und Pycurst (das wx.py package). Alle drei sind recht gut, nur das von DrPython ist, nun ja, sagen wir mal, nicht gut. Grundsätzlich wird ja "steal Code" gerade in Python empfohlen, aber das ist ja in diesem Fall auch nicht so leicht, da das sehr umfangreich ist.
(Das ganze gilt auch für CallTips)
Bei Py package: Pycrust ist eine interaktive python shell, hat also die Objekte im Namespace drin, und braucht im Prinzip nur ein dir(object) probieren (vereinfacht gesagt) und die ergebnisliste an das stc AutoComp weiterreichen. PyAlaMode scannt das Dokument (update namespace) und versucht so herauszubekommen, welche member ein Objekt hat. das ganze erfolgt im introspect modul.
Der Boa Constructor hat ein sehr aufwendiges Filescanning, also es wird anscheinend nicht der Namespace selbst upgedated, sondern versucht, module zu importieren und wenn das nicht geht, im eigenen Dokument die klasse und die members zu finden.
Editra verwendet auch introspect für Calltips und hat ebenfalls eine eigene, aufwendige Implementierung, die AutoComp member eines Objektes zu finden. Cody Precord hat eine eigene "Factory", in der er noch css und html completer sucht.
Wer könnte helfen? Wenn die Frage erlaubt ist? Oder gibt es irgendwo einen guten Code, der einfach zu portieren ist? Selber will ich das Rad, das sicher noch öfters als die drei vorigen Beispiele erfunden worden ist, nicht nochmals neu erfinden. Obwohl das sicher auch für diejenigen interessant ist, die sich besser auskennen und die Implementierungen vergleichen können.
Dass das als Plugin in DrPython implementiert werden soll, hört sich vielleicht komplizierter an, als es dann ist. es geht im Prinzip darum, mit styled text ctrl mittels der aktuelle Cursorposition festzustellen, was das objekt ist, oder was das vor dem '.' darstellt (zb. ein Modul wie os), und dann im Namespace des importierten Module (systemweit oder auch in der Anwendung selbst) oder die Objekte selbst festzustellen, aus welcher Klasse sie definiert wurden. Mir ist schon bewusst, dass Codecompletion genau genommen weniger Sinn macht, weil sich der Typ des Objekts ändern kann. Aber wer macht schon so was öfters und wozu. Zu 95% wird sich das nicht ändern, denke ich mir.
(Das ganze gilt auch für CallTips)
Bei Py package: Pycrust ist eine interaktive python shell, hat also die Objekte im Namespace drin, und braucht im Prinzip nur ein dir(object) probieren (vereinfacht gesagt) und die ergebnisliste an das stc AutoComp weiterreichen. PyAlaMode scannt das Dokument (update namespace) und versucht so herauszubekommen, welche member ein Objekt hat. das ganze erfolgt im introspect modul.
Der Boa Constructor hat ein sehr aufwendiges Filescanning, also es wird anscheinend nicht der Namespace selbst upgedated, sondern versucht, module zu importieren und wenn das nicht geht, im eigenen Dokument die klasse und die members zu finden.
Editra verwendet auch introspect für Calltips und hat ebenfalls eine eigene, aufwendige Implementierung, die AutoComp member eines Objektes zu finden. Cody Precord hat eine eigene "Factory", in der er noch css und html completer sucht.
Wer könnte helfen? Wenn die Frage erlaubt ist? Oder gibt es irgendwo einen guten Code, der einfach zu portieren ist? Selber will ich das Rad, das sicher noch öfters als die drei vorigen Beispiele erfunden worden ist, nicht nochmals neu erfinden. Obwohl das sicher auch für diejenigen interessant ist, die sich besser auskennen und die Implementierungen vergleichen können.
Dass das als Plugin in DrPython implementiert werden soll, hört sich vielleicht komplizierter an, als es dann ist. es geht im Prinzip darum, mit styled text ctrl mittels der aktuelle Cursorposition festzustellen, was das objekt ist, oder was das vor dem '.' darstellt (zb. ein Modul wie os), und dann im Namespace des importierten Module (systemweit oder auch in der Anwendung selbst) oder die Objekte selbst festzustellen, aus welcher Klasse sie definiert wurden. Mir ist schon bewusst, dass Codecompletion genau genommen weniger Sinn macht, weil sich der Typ des Objekts ändern kann. Aber wer macht schon so was öfters und wozu. Zu 95% wird sich das nicht ändern, denke ich mir.