In 10.4 haben wir die Code-Vervollständigung und andere Funktionen überarbeitet. Es ist eine der wichtigsten Änderungen an der IDE seit einem Jahrzehnt.
Was verstehen wir unter Code Insight?
Zunächst einige Hintergrundinformationen. Wenn Sie mit Code Insight vertraut sind, fahren Sie bitte fort...
Code Insight ist unser Name für eine Reihe von IDE-Produktivitätsfunktionen im Editor. Für die Zwecke dieses Blogbeitrags sind das folgende Funktionen:
- Code Vervollständigung: das Dropdown-Listenfeld, das vorhersagt, was Sie eingeben möchten. Erscheint, wenn Sie einen Punkt (.) nach einem Bezeichner eingeben, oder wenn Sie Drücken Sie Strg+Leertaste.

- Parameter Vervollständigung: der Hinweis, der die Parameter für eine Methode anzeigt, einschließlich mehrerer Varianten für eine überladene Methode. Strg+Umschalt+Leertaste innerhalb von geschweiften Methoden ().

- Erklärung finden: Klicken Sie mit der rechten Maustaste auf einen Bezeichner und klicken Sie auf Find Declaration (Deklaration suchen) und Sie werden zu der Stelle geführt, an der diese Methode, Variable, Typ usw. definiert ist. Sie können auch die Strg-Taste gedrückt halten und die Maus über den Editor bewegen. Die entsprechenden Bezeichner verwandeln sich dann in Hyperlinks, auf die Sie klicken können, um die Deklaration zu finden, was als Code durchsuchen.
- Tooltip-Einblick: Wenn Sie mit der Maus über eine Variable oder einen Typ fahren, werden Ihnen Informationen dazu angezeigt. Manchmal beinhaltet dies auch XMLDoc und ist bekannt als Hilfe Einsicht. (Wir müssen die Namen in unserem Dokument klären.)
- Fehler-Einblick: zeigt Fehler in Ihrem Code an, bevor Sie kompilieren. Diese sind auch als "rote Zickzacklinien" bekannt, die von vielen Menschen bevorzugte Terminologie - die roten Zickzacklinien unter Ihrem Code. Fehler werden auch im Knoten Fehler im Fenster Ansicht der Struktur.
Diese Funktionen sind in Delphi schon seit vielen Jahren verfügbar. Funktionen wie diese sind ein entscheidender Vorteil für Sie, wenn Sie eine IDE programmieren. Vor allem die Code-Vervollständigung erspart Ihnen eine Menge Tipparbeit, und die Fehlersuche hilft Ihnen, sich zu vergewissern, dass Ihr Code funktioniert, bevor Sie Zeit mit dem Kompilieren verbringen.
Klassischer Code-Einblick
Da die Sprache gewachsen ist und die Zeit vergangen ist, haben diese Funktionen nicht immer so gut funktioniert, wie wir es uns gewünscht haben. Als die Technologie eingeführt wurde, war sie auf dem neuesten Stand, aber wir könnten heute definitiv Verbesserungen vornehmen.
Es gab häufig Fehlerberichte über falsche Fehler (d.h. Fehler, die im Editor oder in der Strukturansicht gemeldet wurden, obwohl der Quellcode eigentlich völlig korrekt ist). Oder dass die IDE im Haupt-Thread arbeitete, so dass sie nicht auf Tastendrucke reagierte, während sie die Code-Vervollständigungsliste anzeigte. (Sie konnten nur Escape drücken, um den Vorgang abzubrechen.) Bei riesigen Projekten konnte die Berechnung der Daten für die Code-Vervollständigung viel Speicherplatz in der IDE beanspruchen. Außerdem wurden die Funktionen mit mehreren Codeparsern implementiert: Codevervollständigung und Fehlereinsicht hatten jeweils ein anderes Verständnis des Codes. Und schließlich war die Code-Vervollständigung während des Debuggens deaktiviert. Wenn Sie also während des Debuggens Code schrieben, hatten Sie keine Produktivitätshilfe.
Wir wollten nicht, dass dies so weitergeht. Unsere Ziele für 10.4 waren:
- Make Code Insight asynchrone - d.h. auf einem anderen Thread oder in einem anderen Prozess (oder beides) laufen, so dass die IDE immer auf Ihre Eingaben reagiert, auch wenn sie im Hintergrund arbeitet
- Reduzieren Sie das Potenzial oder entfernen Sie es sogar ganz (Sie sehen, worauf das hinausläuft). Speicherverbrauch für die Code-Vervollständigung aus der IDE
- Stellen Sie sicher, dass Error Insight immer korrekte Ergebnisse - das heißt, er sollte genau die Fehler anzeigen, die der Compiler anzeigen würde, und korrekter Code sollte keine Fehler anzeigen
- Helfen Sie uns, dem Ziel näher zu kommen, ein einzelner Parser für Delphi-Quellcode in der IDE, so dass es in der IDE eine "einzige Quelle der Wahrheit" oder ein einziges Verständnis dafür gibt, was Delphi-Code bedeutet
- Modernisieren Sie den Code-Tooling-Ansatz von Delphi, um moderne Techniken zu nutzen.
- Und lösen Sie gleichzeitig eine Reihe von Fehlern in der Code-Vervollständigung
- Und fügen Sie mindestens eine Funktion zur Codevervollständigung hinzu... Warten Sie! Fügen Sie zwei neue Funktionen zur Codevervollständigung gleichzeitig hinzu!
All dies finden Sie in Delphi 10.4.
Aufgeregt? Wir sind es. Dies ist eine der größten und besten Änderungen an der Delphi IDE seit fünfzehn Jahren.
(Und keine Sorge - wenn Sie es brauchen, ist die klassische Codeeinsicht immer noch da, komplett mit einigen neuen Fehlerkorrekturen, und kann in 10.4 aktiviert werden, wenn Sie möchten).
Code Insight Technologie in Delphi 10.4
In 10.4 werden die oben genannten Codeeinsichtsfunktionen mit Hilfe eines "LSP-Servers" implementiert. Vielleicht haben Sie schon von dieser Technologie gehört, aber falls nicht, bezieht sich LSP auf das Language Server Protocol, eine standardisierte Methode zur Implementierung von Code-Insight-ähnlichen Funktionen für viele Sprachen. Eine IDE kommuniziert mit einem 'Language Server', einer kleinen Hilfsanwendung, die die von der IDE angezeigten Informationen berechnet und generiert. Dies geschieht über ein definiertes Protokoll, und das ist das Sprachserver-Protokoll.
Mit anderen Worten, die IDE kommuniziert jetzt mit einer Hilfsanwendung, wenn Sie etwas tun, wie z.B. ein Projekt öffnen oder einen Tastendruck in Ihrer Datei eingeben, und die IDE kann ihr in regelmäßigen Abständen Fragen stellen, wie z.B.: 'Wie lauten die Ergebnisse der Fertigstellung an dieser Stelle? Diese Hilfsanwendung verfolgt Ihren Code und sendet eine Antwort auf alle Fragen sowie alle Fehler, auf die sie im Code gestoßen ist, zurück.
Unsere Serveranwendung ist um den Compiler herum aufgebaut und nutzt den Compiler als Service, um LSP-Ergebnisse bereitzustellen. Das bedeutet, dass alle Daten, die Ihnen die IDE anzeigt, einschließlich der "rot verschnörkelten" Fehler, vom Compiler selbst stammen.
Das bedeutet ein paar Dinge:
- Die Kommunikation mit einem anderen Prozess erfolgt asynchron. In der IDE ist sie in einem anderen Thread implementiert. Sie können weiter tippen, sogar Ihre Datei schließen oder ein anderes Projekt öffnen, während die IDE auf die Rückmeldung der angeforderten Daten wartet
- Die Arbeit wird in einem anderen Prozess erledigt. Das bedeutet, dass der gesamte Speicherbedarf für die Berechnung der Ergebnisse nicht mehr in der IDE selbst liegt. Die IDE verfügt über mehr Speicher und die Hilfsanwendung kann ihren gesamten Speicherplatz ausschließlich für die Bereitstellung von Ergebnissen verwenden
- Es verwendet ein modernes, standardisiertes Protokoll, das für viele Sprachen gilt
- Was Sie auf dem Bildschirm sehen, ist das, was der Compiler sieht. Das heißt, es sollte korrekt sein. Wenn sich Ihr Code kompilieren lässt, werden Sie keine Fehler in Error Insight sehen. Wenn Sie dagegen rote, verschnörkelte Unterstreichungen in Ihrem Code oder in der Strukturansicht sehen, lässt sich Ihr Code nicht kompilieren.
- Sie können die Codevervollständigung während des Debuggens nutzen.
Das sind alles sehr gute Dinge.
Aber genug Text. Lassen Sie uns sehen, wie es in Aktion aussieht!
Modern Delphi Code Insight in Aktion
Es ist schwierig, die Reaktionsfähigkeit in einem Blog darzustellen. Stellen Sie sich bei diesen statischen Screenshots einfach vor, dass Sie tippen und den Windows-Wartezeiger nicht sehen.
Die Fantasie wird Wirklichkeit, wenn wir 10.4 ausliefern!
Codeeinsicht beim Debuggen
Die erste neue Funktion ist eine große Funktion, die nicht viele Worte braucht. Sie können Code Insight während des Debuggens verwenden.
Möchten Sie Ihre Anwendung debuggen und gleichzeitig Code eintippen und die Codevervollständigung nutzen? Das können Sie.

Ja, das, was Sie sehen, ist korrekt. Die Codevervollständigung und die Fehlersuche funktionieren beide, während Sie die Anwendung aktiv debuggen.
Ergebnisse der Fertigstellung
Die Codevervollständigung ist die gleiche wie in 10.3.3, mit der Ausnahme, dass die IDE in 10.4 weiterhin reaktionsschnell ist. Aber wir haben eine weitere neue Funktion hinzugefügt, die es Ihnen ermöglicht, das Gewünschte über die Code-Vervollständigung leichter zu finden. In 10.4 zeigt die Code-Vervollständigung jetzt mehr nützliche Ergebnisse an als in der Vergangenheit - und das, obwohl die Elemente aus 10.3.3 immer noch ganz oben in der Ergebnisliste stehen.
Hier sehen Sie die Code-Vervollständigung von 10.3.3 bei der Eingabe von 'act' nach einer VCL TButton-Instanz:

Beachten Sie, dass 10.3.3 nur sehr wenige Ergebnisse anzeigt - genau genommen nur eines. Die klassische Codevervollständigung listet nur Elemente auf, die beginnen mit was Sie getippt haben.
Hier sehen Sie 10.4 in Aktion (Wortspiel beabsichtigt) für dieselbe Fertigstellung:

In 10.4 listet die Codevervollständigung alle Elemente auf, die enthalten was Sie eingegeben haben. Andere IDEs tun dies auch, Visual Studio zum Beispiel, aber bisher hat Delphi eine begrenztere Liste angezeigt. Das ist nützlich, denn so können Sie Suche bis zur Fertigstellung.
Nehmen wir zum Beispiel an, Sie erinnern sich, dass ein Steuerelement eine Eigenschaft Irgendwas-Rect hat, aber Sie wissen nicht mehr, wie sie heißt. In 10.3.3 müssten Sie danach googeln. In 10.4 geben Sie einfach 'rect' ein und Sie werden es sehen:
Sie können Ihren Code untersuchen, indem Sie eingeben.
Mehr Ergebnisse sind nicht immer das, was Sie suchen, und Sie erwarten vielleicht aus Gewohnheit nur Einträge, die mit dem beginnen, was Sie eingegeben haben. Standardmäßig und um das Verhalten nahe an dem zu halten, was Sie aus 10.3.3 kennen, sortieren wir die Vervollständigungsliste so, dass alle "beginnt-mit"-Kennungen über allen "enthält"-Kennungen stehen. Mit anderen Worten, wird die Liste die gleichen Ergebnisse liefern wie 10.3.3, aber mit zusätzlichen Ergebnissen im Anhang. Sie brauchen diese nicht zu verwenden, wenn Sie nicht wollen. Sie befinden sich nach den Elementen, die Ihnen 10.3.3 angezeigt hätte.
Wenn Sie ein Verhalten wie bei anderen IDEs wünschen, d.h. eine gemeinsame Auflistung aller Ergebnisse, haben wir eine Einstellung: derzeit ein Registrierungsschlüssel, aber wir werden ihn möglicherweise als Benutzeroberfläche zur Verfügung stellen. Das heißt, wenn Sie eher an das gewöhnt sind, was VSCode bietet, können Sie auch das bekommen.
| In 10.4 werden alle Einträge, die mit dem von Ihnen eingegebenen Wort beginnen, an den Anfang der Liste sortiert. So sahen Sie es in 10.3.3 und so ist es auch in 10.4 voreingestellt. | In 10.4, Sortierung nur nach Bereich, so dass alle Elemente, die das enthalten, was Sie eingegeben haben, zusammen angezeigt werden. Dies entspricht eher Visual Studio oder anderen IDEs und ist standardmäßig deaktiviert. |
Auswahl in der Erledigungsliste
Die Code-Vervollständigung wählt automatisch die besten Elemente in der Liste für Sie aus (Sie können also einfach die Eingabetaste oder die Leertaste oder '.' o.ä. drücken, um dieses Element auszuwählen und mit der Codierung fortzufahren), und zwar in folgender Reihenfolge:
- Eine genaue Übereinstimmung mit dem, was Sie eingegeben haben. Wenn es keine Übereinstimmung gibt:
- Von den Einträgen, die mit dem von Ihnen eingegebenen Wort beginnen, wird der kürzeste Bezeichner angezeigt. Wenn es keine Einträge gibt, die mit beginnen:
- Von den Artikeln, die das enthalten, was Sie eingegeben haben, ist der kürzeste Bezeichner
Wenn Sie "Beginnt mit" gegenüber "Enthält" bevorzugen, bedeutet dies, dass die Vervollständigungsliste automatisch "Parent" gegenüber "SetParent" auswählt. Wenn Sie die kürzeste Übereinstimmung wählen, wird 'Parent' gegenüber 'ParentFont' ausgewählt. (Sie können dies in den obigen Screenshots sehen.) Im Allgemeinen finden wir, dass dies dem entspricht, was Sie höchstwahrscheinlich tippen werden. Natürlich können Sie durch Scrollen und Drücken der Pfeiltasten nach oben und unten alles auswählen, was Sie möchten.
Fehler-Einblick
Beachten Sie, dass Sie in diesen Screenshots live die Fehleranzeige sehen können, die während der Eingabe aktualisiert wird. Der teilweise eingegebene Bezeichner 'pare', der kein gültiger Code ist, ist korrekt rot unterstrichen. (Die Unterstreichung verschwindet, wenn Sie ein Element aus der Vervollständigungsliste auswählen.) Die Ergebnisse von Error Insight stammen vom Compiler selbst und geben genau das wieder, was der Compiler sieht.
Sie sollten niemals falsche Fehler im Editor oder in der Strukturansicht sehen. Was Sie auf dem Bildschirm sehen, ist korrekt.
Multiprozessor Architecture
Das Folgende ist für die Funktionen nicht wichtig, könnte Sie aber auf technischer Ebene interessieren.
Ich habe bereits erwähnt, dass der LSP-Server als separater Prozess läuft, was eine Reihe von Vorteilen mit sich bringt, u.a. einen eigenen 4 GB großen Speicheradressraum für den Codeeinblick. Wenn Sie sich 10.4 im Windows Task-Manager ansehen, werden Sie mehrere DelphiLSP-Prozesse sehen. Der erste Prozess steuert mehrere Agenten. Wir haben einen Agenten, der die Vervollständigung und andere Ergebnisse liefert, und einen Agenten, der Fehlereinblicke liefert.
Meines Wissens sind wir der einzige LSP-Server, der eine Multiprozess-Architektur verwendet.
Qualität
Dabei haben wir auch eine Reihe von Problemen gefunden und behoben, die die Code-Vervollständigung in der Vergangenheit beeinträchtigt haben.
Nächste Schritte
Die neue Code-Vervollständigung unterscheidet sich von der Code-Vervollständigung von 10.3.3 und früheren Versionen. Wir haben uns bemüht, sie so ähnlich wie möglich zu gestalten, z. B. durch die Sortierung von Elementen, die mit anderen beginnen, damit sie Ihnen bei der ersten Verwendung vertraut ist. Wir hoffen, dass Sie sich innerhalb weniger Minuten so sehr daran gewöhnt haben, dass Sie nie wieder zu 10.3.3 zurückkehren wollen! Aber wir wollen nicht sagen, dass es genau dasselbe ist: Sie werden Unterschiede feststellen.
Der neue Code Insight in Delphi 10.4 löst viele Probleme und macht die Verwendung der IDE auch für Sie zu einer viel angenehmeren und reaktionsschnelleren Erfahrung. Ganz zu schweigen von den zusätzlichen Ergebnissen, die äußerst nützlich sein können. Wir planen, weiter daran zu arbeiten, um die oben genannten Ziele zu erreichen. In 10.4 haben wir und unsere Beta-Tester jedoch festgestellt, dass es eine großartige Ergänzung der IDE ist.
Darüber hinaus haben wir sogar zwei neue Funktionen hinzugefügt: Sie können Ihren Code über die Code-Vervollständigung erkunden und Code Insight einschließlich der Code-Vervollständigung und anderer Code Insight-Funktionen beim Debuggen verwenden.
Wir sind wirklich begeistert von dieser Funktion. Asynchron. Reaktionsfähige IDE. Modernes Protokoll. Unterstützung für andere Sprachen. Code-Vervollständigung beim Debuggen. Das sind großartige Dinge. Wir können es kaum erwarten, dass Sie 10.4 bekommen und es selbst ausprobieren.
| " | Das neue LSP-basierte CodeInsight ist fantastisch. Das wird das Produkt revolutionieren.
- Nick Hodges, der eine Beta-Vorschau verwendet hat |
Wenn Sie ein Update-Abonnement haben, erhalten Sie unter anderem Zugang zu den Beta-Builds der kommenden Versionen. Es ist noch Zeit, an unserem Beta-Programm für 10.4 teilzunehmen!
Dies ist eine Vorschau auf eine kommende Version von RAD Studio. Es kann immer wieder zu Fehlern oder Änderungen in letzter Minute kommen. Nichts hier ist endgültig, bis die Version offiziell zur Verfügung gestellt wird.

