Codevervollständigung - Ansatz?

Dario Linsky

Erfahrenes Mitglied
Hiho,

ich wollte eigentlich schon seit längerem mal wissen, wie man es am besten angeht, in einem Texteditor eine Funktion zur Codevervollständigung zu implementieren.
Meine Idee war, jedes eingegebene Zeichen zu überprüfen und sobald ein Trenner (z.B. ein Punkt wie in Java, oder vielen anderen Sprachen) gefunden wurde, den Objekttyp vor dem Punkt zu ermitteln und dann ein modales Fenster mit einer Liste anzuzeigen.
Ist das gängige Praxis oder gibt es da noch andere Vorgehensweisen, die besser geeignet sind?

Gruß, Dario
 
Also ich denke das kann man noch weiter treiben. Kennst du z.B. das Plugin Visual Assist für Visual C++.
Ich finde das sehr gut, manchmal auch nervig, aber trotzdem lässt sich damit schnell Code schreiben.
Wichtig bei der ganzen Sache ist allerdings, daß das lesen des Codes vom Editor sehr schnell gehen muss, sonst ist ein Schreiben bei sehr viel Code fast nicht mehr möglich.
Man kann auch Funktionen kompletieren (mach Visual Assist)
Du hast z.B. eine Funktion als Prototyp deklariert:
void MyFunc(int a, int b, int c);

Wenn du nun die Implementation schreibst:
void MyFunc( <----- jetzt kommt ein Tooltip, der dir die Parameterliste vervollständigen lässt.
Das mal so als Beispiel.

Gruß Homer
 
PHP.net hatte eine Javascript basierende Codevervollständigung für die Suchfunktion implementiert. Schau mal auf http://www.php.net/search.php (als Suchraum musst du "Function List" angeben). Tipp dann einfach mal eine PHP Funktion ein (zb. mysql_) und schau dir die Liste an. Der Code (in PHP / Javascript) ist im CVS vorhanden. Vielleicht kannst du dir da die ein oder andere Idee rausziehen :).

bye
 
In der Regel wird die gleiche Technologie verwendet wie im Compiler. Du bildest die Sprachelemete auf Zustande eines endlichen Automaten ab. Dies ist die schnellste implementierungen, wobei es zu beachten das man keine Rekursion verwenden sollte.
 
Mein erster Gedanke wäre ein Baum ähnlich dem T9 in Handys. Die möglichen Vervollständigungen sind die Blätter des Teilbaumes an deren Wurzel man sich gerade befindet.
Bei den Blättern kann man dann zusätzliche Informationen speichern um was für Objekte es sich handelt (Methoden->Assistent für Parametereingabe, Klassennamen, Variablen usw.) und diese zusätzlichen Informationen dann weiter verwenden.

Tobias
 

Neue Beiträge

Zurück