Generische Code-Vervollständigungsbibliothek / Werkzeug

8

Ich versuche, in meinem Lieblingseditor die korrekte Codevervollständigung einzurichten, nennen wir es AnEditor, um programmspezifische Antworten zu vermeiden, die das Internet voll hat. (Und die Sprache ist ALanguage, weißt du.) Der Editor hat zwei Eigenschaften, die ich mag: Es funktioniert sowohl in der Konsole als auch in der GUI, so dass ich es über ein Netzwerk benutzen kann, und es ist enorm erweiterbar. Daher zögere ich, eine voll entwickelte IDE zu verwenden. Aber der Editor hat keine solide Codevervollständigung, obwohl er angeschlossen werden kann, wenn ich eine anständige Lösung finde.

Ich habe eine ganze Reihe von Fragen und Lösungen zu " [Sprache X] Vervollständigung in [editor / IDE Y] " gegoogelt. Es scheint, dass jede neue IDE ihre Codevervollständigung für jede Sprache von Grund auf, Parser und alle implementiert. Und jeder einfachere Editor (einschließlich AnEditor) führt einen der folgenden Schritte aus:

  • Vervollständigen Sie nur die Namen der Standardbibliotheksfunktionen,
  • oder verwenden Sie ctags, die eine verzögerte Regex-basierte "Parsing" (für Nicht-C-Programme) bietet und nicht den Typ einer Variablen, die Sie gerade eingegeben haben, sagen soll, also nicht sehr nützlich für echte Code-Vervollständigung,
  • es gibt andere Möglichkeiten, wenn der Editor mit Plugins erweiterbar ist, aber sie gehen normalerweise auf eine mehr oder weniger perverse Kombination der oben genannten, mit einer Menge von benutzerdefinierten Regexes.

Nun, die Frage ist, warum können wir nicht eine Sound-Code-Completion-Bibliothek haben, die ich an AnEditor und jemand anderes an ABigIDE anschließen kann? Soweit ich das beurteilen kann (die Entschlüsselung des C-Zeiger-Dschungels ist nicht mein Ziel), sollte die Antwort ungefähr so ​​aussehen:

  • ein generischer Parser im Stil von yacc / lex / bison (oder ein statischer Analysator), irgendwie entspannt, um Code während des Schreibens zu tolerieren, der in der Lage ist, JavaDoc-artige Kommentare zu verstehen. Und schnell, vorzugsweise, so dass es im laufenden Betrieb verwendet werden kann
  • ein Index, der einer Klasse "Mitglieder, Methoden" -Signaturen und deren Positionen in Dateien (Ctags, die dies jetzt tun), Rückgabewerte und andere Dokumentation aus den JavaDoc-Kommentaren
  • mitteilen kann
  • ein anderer Index, der den Typ einer Variablen kennt, und eine Funktion, die den Typ basierend auf einer Position in einer Datei oder einem Code, der gerade geschrieben wird, angibt

Um die Sprachverarbeitung zu vervollständigen, müssen Sie Parser-Regeln für die Sprache erstellen, Indizes über die Standardbibliothek und Ihr Projekt erstellen, die Typ-Telling-Funktion aufrufen und die Mitglieder und die Dokumentation der Klasse nachschlagen. Oder führen Sie einfach Klassen und Member auf, wenn Sie mit Objektaufrufen oder statischen Aufrufen arbeiten.

Wenn Eclipse, Netbeans und JetBrains es in Java erfolgreich gemacht haben (damit ich Eclipse mit AnEditor verbinden kann ), warum kann ich das tun? tust es jemand weniger aufgebläht und universeller? Oder fehlt mir etwas und die Zukunft lauert schon irgendwo?

    
katrmr 07.09.2012, 23:02
quelle

0 Antworten

Tags und Links