Hallo Habr!
Wir wissen nicht, wie heiß es vor Ihrem Fenster ist, aber diese Wochen bei JetBrains haben wir sicherlich eine heiße Veröffentlichung. Nacheinander haben wir aktualisierte Versionen von 2018.2 für fast alle unsere Tools veröffentlicht, die auf der IntelliJ-Plattform basieren: WebStorm, IntelliJ IDEA, PyCharm, DataGrip, GoLand, PhpStorm, RubyMine und CLion.
Diese Version ist speziell für das CLion-Team, da sie die Ergebnisse unserer Arbeit in drei sehr wichtigen Bereichen enthält:
- Clangd als Basis für eine neue experimentelle Engine zum Parsen von C ++ - Code.
- IDE- Leistungsverbesserungen durch neue Architekturlösungen.
- Neue Designmodelle, die von CLion unterstützt werden.
Neben der Unterstützung für Google Sanitizers, der Möglichkeit, eine einzelne Datei neu zu erstellen und vielem mehr!
Im Folgenden werden wir ausführlich über Verbesserungen und Innovationen sprechen. Die ungeduldigsten können jetzt die kostenlose 30-Tage-Version
von unserer Website herunterladen und neue Möglichkeiten für ihr Projekt oder ein speziell vorbereitetes
Demo-Projekt mit GitHub ausprobieren.
Clangd zum Parsen von C ++ - Code in CLion
Bereits im März haben wir Ihnen mitgeteilt, dass wir verschiedene Alternativen für die CLion-Sprach-Engine in Betracht ziehen. Dies ist verständlich - ich möchte die Unterstützung für aktuelle Sprachfunktionen grundlegend verbessern und schneller neue C ++ - Chips hinzufügen sowie cooleres und C ++ - spezifisches Refactoring usw. schreiben. Für all dies benötigen Sie einen genauen und schnellen Code-Parser.
Wir verbessern unseren aktuellen Parser weiter, indem wir eine Vielzahl von Fehlern und Mängeln methodisch ätzen. Darüber hinaus haben wir uns entschlossen, eine andere Sprach-Engine basierend auf
clangd zu
erstellen (dies ist eine solche Implementierung des LSP-Protokolls für clang).
Wenn Sie direkt zu den Ergebnissen gehen, arbeitet in CLion 2018.2 zusätzlich zur Hauptsprachen-Engine eine neue experimentelle mit clangd. Nicht nur das, wir waren so mutig, dass wir es unter Linux und MacOS standardmäßig aktiviert haben. Unter Windows wurde leider eine
unangenehme Funktion von Clangds Arbeit mit dem Speicher entdeckt, und standardmäßig haben wir die neue Engine auf dieser Plattform ausgeschaltet (aber mit hoher Wahrscheinlichkeit wird dies bereits in den ersten kleineren Updates auf Version 2018.2 behoben).
Sie können den experimentellen Parser des Clangd-basierten Codes in den Einstellungen / Einstellungen | aktivieren / deaktivieren Sprachen & Frameworks | C / C ++ | Clangd:

Es ist wichtig zu verstehen:
- Der clangd-basierte Code-Parser arbeitet parallel zum nativen CLion-Parser.
- Clangd wird nur verwendet, um Fehler und Warnungen im Editor anzuzeigen. Für alles andere (einschließlich Refactoring, Fehlerkorrekturen (Schnellkorrekturen), Navigation, automatische Vervollständigung usw.) wird ein eigener CLion-Parser verwendet.
- Die Standardkonfiguration von Fehlern und Warnungen durch Clang wurde speziell ausgewählt, um eine Vielzahl von Warnungen vor möglichen Fehlern anzuzeigen, aber gleichzeitig nicht den Codeinspektionen zu widersprechen, die in CLion auf der Grundlage ihres eigenen Code-Parsers funktionieren und standardmäßig aktiviert sind.
Ich warne Sie vor Ihren Fragen und sage sofort: Ja, wir planen, andere intelligente IDE-Funktionen in Clangd zu übersetzen. Zunächst müssen wir jedoch die aktuelle Lösung stabilisieren, viele weitere Tests durchführen und viele komplexe und grundlegende Probleme lösen.
Neue Prüfung auf C ++ - Code
Wenn eine Funktion mehrere Parameter desselben Typs akzeptiert, ist es leicht, einen Fehler zu machen und für sich selbst (und den Compiler) unmerklich Argumente desselben Typs auszutauschen, wenn diese Funktion aufgerufen wird. Solche Fehler sind schwer zu erkennen, was bedeutet, dass ihre Kosten hoch sind. In CLion 2018.2 haben wir jedoch speziell für solche Fälle einen neuen Inspektionscode implementiert. Es verwendet einen
heuristischen Algorithmus zur Analyse von Parameternamen und Funktionsargumenten und kann Situationen erkennen, in denen die Reihenfolge der Argumente fälschlicherweise geändert wird:

Wichtig:
- Um Fehlalarme zu vermeiden, wird der Algorithmus für sehr kurze Namen (weniger als 3 Zeichen) automatisch deaktiviert.
- Aus den gleichen Gründen ist der Algorithmus für Funktionen deaktiviert, deren Namen die Teilzeichenfolgen swap / inverse / rotate / backward / flip enthalten.
- Aus einer Reihe von technischen Gründen funktioniert die Überprüfung nur, wenn der experimentelle Parser für den Clangd-Code eingeschaltet ist, und auch nur, wenn der Clang-Tidy-Code-Analysator über Clangd eingeschaltet ist (dies alles in den Einstellungen der obigen Einstellungen / Einstellungen | Sprachen & Frameworks | C / C ++ | Clangd).
IDE-Leistung
In dieser Version haben wir IDE-Suspensionen (UI Freezes) in einer Reihe von Fällen absichtlich geplagt: Beim Abschließen, bei der Suche überall suchen, beim Navigieren zu einem verwandten Zeichen (das normalerweise zum Umschalten zwischen der Quelldatei und dem Header verwendet wird und umgekehrt), wenn Breadcrumbs verwendet werden (Paniermehl) zur Navigation. Die ersten Benutzer der Version sowie zahlreiche Teilnehmer an unserem Early Access-Programm haben die Verbesserungen bereits bewertet und bestätigt, dass sich das Verhalten der IDE erheblich verbessert hat und es deutlich weniger Einfrierungen gegeben hat. Die Arbeiten in dieser Richtung werden 2018 fortgesetzt.3.
Darüber hinaus haben wir den
integrierten Code-Formatierer in den Lexer übersetzt . Wenn Sie den Parser (wie zuvor) durcharbeiten, ist das Ergebnis natürlich genauer, aber die Betriebszeit wird erheblich verlängert. Und da die Formatierung des Codes in CLion zu dem Zeitpunkt erfolgt, an dem Sie den Code eingeben, können die Hänge hier den Gesamteindruck der Geschwindigkeit der IDE sehr negativ beeinflussen. Die Reaktionsfähigkeit des Editors sinkt, Suspensionen werden spürbar und so weiter.
Der Formatierer auf dem Lexer funktioniert recht gut, aber wenn Sie immer noch Probleme mit der Formatierung Ihres Codes haben,
teilen Sie uns dies zunächst mit , und zweitens können Sie jederzeit zu einem langsameren, aber genaueren Formatierer wechseln Parser - hierfür gibt es eine Option
cidr.indent.lexer.only.cpp in der Registrierung.
Neue Designmodelle: Gradle C ++ und Kompilierungsdatenbank
Bis 2018.2 gab es folgende Möglichkeiten, ein Projekt in CLion zu eröffnen:
- Öffnen Sie das CMake-Projekt.
- Öffnen Sie eine Datei oder einen gesamten Ordner ohne CMake-Dateien. Gleichzeitig werden viele intelligente Funktionen zum Arbeiten mit dem Code deaktiviert.
- Für Rust-Code können Sie mit dem Rust-Plugin in CLion Cargo verwenden.
- Verwenden Sie ein Plugin eines Drittanbieters für CLion, um ein Projekt auf Bazel zu öffnen.
In 2018.2 haben wir dieser Liste zwei neue Optionen hinzugefügt:
- Öffnen Sie das Projekt in Gradle und geben Sie den IDE-Speicherort der Datei build.gradle an . Bitte beachten Sie, dass CLion jetzt nur das neue Gradle-Format für C ++ - Projekte unterstützt:

- Öffnen Sie das Projekt aus der Kompilierungsdatenbank, indem Sie den IDE-Speicherort der Datei compile_commands.json angeben . In diesem Fall ist das Zusammenstellen und Starten des Projekts von CLion aus bisher nicht möglich, da die Kompilierungsdatenbank keine Informationen über die Zusammenstellung des gesamten Projekts enthält.
In beiden Fällen, sowohl in Gradle als auch in der Kompilierungsdatenbank, sind alle intelligenten Funktionen für die Arbeit mit Code verfügbar! Übrigens ist die Kompilierungsdatenbankoption interessant, da Sie jetzt unabhängig von Ihrem Projekt - Makefiles, Ninja, Qbs, eines Ihrer spezifischen Projektmodelle -
eine Kompilierungsdatenbank für Ihr Projekt erstellen und in CLion öffnen können!
In der Zwischenzeit arbeiten wir weiter an der API, um Unterstützung für neue Designmodelle in CLion hinzuzufügen!
CMake-Verbesserungen
Für CMake-Projekte wurden einige wichtige Verbesserungen vorgenommen. Das Wichtigste ist, dass Sie Ihre Header-Dateien, die sich im Verzeichnis Ihres Projekts befinden, in den Projektdateien verwenden und über die Direktive
#include
, nicht
mehr explizit in CMake-Skripten auflisten müssen ! CLion markiert sie nun als Designfunktionen, und alle intelligenten Funktionen wie Refactoring und automatische Vervollständigung sind in solchen Dateien verfügbar:

Die zweite wichtige Verbesserung betrifft die Konfiguration externer Tools (externe Tools), die dann entweder per Befehl oder als Teil der Anwendungsstartkonfigurationen aufgerufen werden können. In ihnen sind jetzt Makros verfügbar, die alle Arten von CMake-Variablen enthalten. Zum Beispiel das Assemblyverzeichnis oder der Name der ausführbaren Datei:

Tools zur dynamischen Code-Analyse
Für Valgrind Memcheck, das bereits in Version 2017.3 in CLion unterstützt wurde, war es möglich, die Analyseergebnisse zu exportieren und anschließend wieder zu importieren:

Auch in dieser Version hat CLion die Unterstützung eines anderen Tools für die dynamische Code-Analyse eingeführt -
Google Sanitizers . Um sie zu aktivieren, müssen Sie den speziellen
-fsanitize
in den CMake-Skripten Ihres Projekts explizit angeben. Wenn Sie dann die Clang-Version mindestens 3.8.0 oder die GCC-Version mindestens 5.0.0 verwenden, kann CLion die Verwendung von Desinfektionsmitteln automatisch erkennen und die Ergebnisse ihrer Arbeit in anzeigen spezielles Fenster:

Darin können Sie nicht nur die Liste der gefundenen Fehler anzeigen, sondern auch den Quellcode (und dorthin navigieren), die Informationen über den Frame studieren und den Fehlerpfad beobachten. Weitere Informationen zu den unterstützten Desinfektionsmitteln und Einstellungen in CLion finden Sie in unserem
Blogbeitrag auf Englisch.
Zusammensetzen einer einzelnen Datei
Für CMake- und Kompilierungsdatenbanken für Projektmodelle in CLion 2018.2 besteht die Möglichkeit, eine Datei neu zu erstellen, ohne das gesamte Projekt neu zu erstellen. Dazu gibt es eine Aktion im Menü Ausführen - Neukompilieren, oder Sie können die Tastenkombination Umschalt + Strg + F9 unter Linux / Windows, 9F9 unter macOS (in den Standardlayouts) verwenden:

Mit dieser Funktion können Sie schnell überprüfen, ob Ihre aktuellen Änderungen an der Datei die Assembly des gesamten Projekts nicht beschädigt haben. Wenn die Details interessant sind, welche Art von Kompilierungsbefehl aufgerufen wird und wie der Assembly-Typ ausgewählt wird, können Sie dies
in unserem Blog ausführlich lesen.
Datenbanken
Laut den Ergebnissen
unserer Umfrage auf Twitter greifen viele CLion-Benutzer bei der Entwicklung eines Projekts in C / C ++ auf verschiedene Datenbanken zurück. Daher wurde ab dieser Version ein Plugin für die Arbeit mit Datenbanken und SQL-Code in unsere IDE aufgenommen. Es ist ein vollständiges Funktionsanalog unserer Datenbankumgebung -
DataGrip . Dieser
Beitrag hier auf Habrs von
moscas über Innovationen in DataGrip 2018.2 könnte Sie auch interessieren.
Und das ist noch nicht alles!
Kurz zu weiteren Verbesserungen:
- Wir haben die neue Version des LLDB 6.0-Debuggers und die neue Version von CMake 3.12 gesperrt.
- Darüber hinaus hat CLion im Fall von GDB gelernt, hübsche Drucker für Typen zu verwenden, wenn Zeiger auf Variablen eines bestimmten Typs angezeigt werden.
- Hintergrundprozesse werden für WSL unterstützt, wodurch es viel einfacher wird, die gesamte CLion-Konfiguration mit WSL auszuführen.
- Von der IntelliJ-Plattform erhielt CLion eine Reihe von Verbesserungen bei der Unterstützung von Versionskontrollsystemen , bei der Unterstützung der MacBook Touch Bar für die MacOS-Plattform und bei dunkleren Fenstertiteln. Außerdem wurde die gesamte Palette der Symbole in der IDE-Oberfläche aktualisiert.
Das traditionelle Video über die neuen Funktionen von CLion 2018.2 in englischer Sprache von unserem Entwickleranwalt:
Übrigens
gewähren wir bis Mittwoch, 1. August 2018, 19:05 Uhr Moskauer Zeit (GMT + 3)
einen Rabatt von 50% auf alle JetBrains Toolbox-Produkte .
Fragen? Wir antworten gerne in den Kommentaren!
Ihr JetBrains CLion-TeamDer Antrieb zur Entwicklung