PhpStorm 2020.2: Verkettete PHP 8-Typen, neue Control Flow Engine, GitHub-Pull-Anforderungen, OpenAPI





Hallo Habr! Wir freuen uns, die zweite Hauptversion von PhpStorm in diesem Jahr präsentieren zu können!



Unter dem Schnitt befindet sich eine detaillierte Analyse aller bemerkenswerten Änderungen und neuen Funktionen. Vorsicht - viele Bilder.



Unionstypen in PHP 8



PHP 8 wird so viele neue Funktionen haben, dass es in gewissem Maße sogar eine neue Sprache ist. Wir haben früh mit der Einführung der Unterstützung für die acht begonnen, und das erste große Feature waren die zusammengeführten Typen.



Verkettete Typen T1|T2|...können überall dort verwendet werden, wo jetzt Typen angegeben werden können: in Argumenten, Eigenschaften und Rückgabewerten. In diesem Fall kann die Variable einen der aufgelisteten Typen annehmen.



Tatsächlich werden in PHPDoc schon lange verkettete Typen verwendet, aber jetzt überprüft der Interpreter sie tatsächlich zur Laufzeit.



Sprachversion wechseln



Um alle Möglichkeiten anzuzeigen, können Sie die Sprachversion unter Languages ​​& Frameworks | manuell auf PHP 8 umstellen PHP | PHP-Sprachniveau .



Wenn der Code bereits neue Funktionen enthält, können Sie mithilfe einer Schnellkorrektur (Alt + Eingabetaste) wechseln.



Wenn die PHP-Version in composer.json angegeben ist, wird sie von PhpStorm automatisch aufgerufen.







Konvertieren von PHPDoc in native kombinierte Typen



Sie können eine Schnellkorrektur (Alt + Eingabetaste) für ein PHPDoc-Tag mit einem kombinierten Typ aufrufen.







Unnötiges PHPDoc entfernen



Wenn PHPDoc nur Typdeklarationen enthielt, kann es jetzt als redundante Schnellkorrektur (Alt + Eingabetaste) entfernt werden.







Kann eine solche Löschung immer als sicher angesehen und automatisch vor dem Festschreiben durchgeführt werden? Wir erwägen, eine solche Funktion hinzuzufügen.


Typüberprüfung



Früher war PhpStorm in der Lage, Typen zu analysieren und Verstöße anhand von Informationen aus PHPDoc-Tags zu finden. Mit nativen Deklarationen haben sich diese Möglichkeiten erweitert.



Es wird alles überprüft: Eigenschaften, Argumente, Rückgabewerte.







Dies ist besonders nützlich bei komplexem Code, bei dem Verstöße nicht sofort offensichtlich sind.







Der Pseudotyp false



Einige ältere Funktionen können falsebei einem Fehler zurückgegeben werden. Zum Beispiel ist dies , wie sie sich verhalten strpos(), array_search()und 310 andere Standardfunktionen.



In diesem Fall wäre es beispielsweise möglich, den Rückgabetyp als verkettet anzugeben int|bool, aber tatsächlich truewird er niemals vorhanden sein.



Für solche Fälle wurde ein Pseudotyp eingeführt false. Es kann nur in Joins verwendet werden. Andernfalls hebt PhpStorm den ungültigen Code hervor.







Doppelte und redundante Typen



Viele Kombinationen in Typgewerkschaften sind verboten oder einfach unnötig. Zum Beispiel:



  • bool|false- weil false enthalten ist in bool;
  • Foo|Foooder int|string|INT- Wiederholung;
  • object|User- objectenthält wissentlich alles andere;
  • iterable|arrayoder iterable|Traversable- iterableenthält Array und Traversable;
  • void - kann nur im Rückgabewert und nur für sich selbst verwendet werden;
  • falseoder null- nur als Teil eines Vereins.




PhpStorm wird alle derartigen Verstöße hervorheben.







Nullable Typen



Die alte Syntax wird ?Typejetzt als Abkürzung für betrachtet Type|null.



Die Abkürzung c ?kann jedoch nicht in Verknüpfungen verwendet werden, da eine unlösbare Mehrdeutigkeit vorliegt.



In solchen Fällen bietet PhpStorm eine schnelle Lösung (Alt + Eingabetaste).







Ändern von Typen mit Vererbung



Es gibt zwei Regeln für Methoden:



Der Parametertyp ist kontravariant , dh er kann erweitert werden.







Der Rückgabetyp ist kovariant , dh er kann nur eingegrenzt werden.







In diesem Fall spielt die Reihenfolge der Typen keine Rolle und ist Type1|Type2äquivalent Type2|Type1.



Der Typ der Eigenschaften kann nicht geändert werden. Der

Typ einer geerbten Eigenschaft muss auf das übergeordnete Element reduziert werden. Beispiel:







Neuer Control Flow Motor



Die Control Flow Engine wurde aktualisiert, um neue Inspektionen hinzuzufügen und viele alte Fehler zu beheben. Dadurch versteht PhpStorm den Code noch besser.



An einigen Stellen können Hervorhebungen und Warnungen bei neuen Inspektionen festgestellt werden. Einige von ihnen erfordern möglicherweise Ihre Aufmerksamkeit als potenzielle Fehlerquelle. Wenn Sie andere reparieren, wird der Code nur sauberer.



Hier einige Beispiele für Inspektionen.



Variable ist immer wahr oder falsch

Beispiel in der Parser.php- Datei von doctrine / orm.







Bedingung ist immer wahr

Beispiel in der FormValidator.php Datei von symfony / Form. Die Instanz des







Ergebnisses ist immer wahr.

Beispiel in der Datei Logger.php von symfony / monolog-bridge. wird immer vom Typ sein







$thisResetInterfaceweil dieser höher in der Hierarchie ist.







Expression ist immer null

Beispiel in ProcessUtils.php Datei von symfony / Prozess.







Neue Aktion: Typinfo (⌃⇧P / Strg + Umschalt + P)

Sie können das Caret über einen beliebigen Ausdruck bewegen und diese Aktion aufrufen, um zu sehen, welchen Typ PhpStorm für den Ausdruck abgeleitet hat. Verfügbar über das Menü Ansicht | Geben Sie Info oder die Tastenkombination ⌃⇧P / Strg + Umschalt + P ein.







Komponistenverbesserungen



Seit Version 2020.1 können alle Aktionen mit Composer-Abhängigkeiten direkt in PhpStorm in der Datei composer.json ausgeführt werden. In dieser Version gibt es mehrere Verbesserungen.



Unterstützung für benutzerdefinierte Repositorys Satis / Packagist

Wenn Sie im Abschnitt "Repositorys" eine benutzerdefinierte Quelle angeben, ist die Code-Vervollständigung für alle Pakete verfügbar. Paket- und Versionsinformationen werden in PhpStorm zwischengespeichert.







Wenn mehrere Versionen angegeben sind.

Wenn Versionen durch Kommas oder Pipe ( ||) getrennt aufgeführt sind , funktioniert PhpStorm jetzt ordnungsgemäß und zeigt die verfügbaren Optionen an.







Link zum Code und zur Site

Jedes Paket im Popup mit Informationen enthält Links zu Sites.







Einstellungen für Codequalitätswerkzeuge

Wenn die Liste der Abhängigkeiten Tools für die Codequalität enthält, die in PhpStorm unterstützt werden, befindet sich gegenüber ein Schraubenschlüsselsymbol, um zu den Einstellungen zu gelangen.







Verbesserungen an Tools für die Codequalität



Übrigens über Qualitätswerkzeuge. PhpStorm 2020.2 enthält mehrere nützliche Ergänzungen.



Docker Compose-

Unterstützung PHP_CodeSniffer, PHP CS Fixer und PHP Mess Detector können über Docker Compose ausgeführt werden.







Ausnahmelisten für PHP_CodeSniffer

Wenn der benutzerdefinierte ruleset.xmlAbschnitt einen Abschnitt enthält "exclude-pattern", wird dieser jetzt berücksichtigt und Dateien auf den angegebenen Pfaden werden in der IDE nicht analysiert.



Formatierung über einen Remote-Interpreter

PHP CS Fixer und PHPCBF können mit einem Interpreter über SSH, Docker, Docker Compose, Vagrant und andere ausgeführt werden.



Befehlszeilen-Tools



Alle Symfony-Befehle, Laravel Artisan-, Drupal Drush-, WP-CLI- und Composer-Skripte können in PhpStorm sehr schnell ausgeführt werden, ohne ein Terminal zu öffnen.



Fügen Sie dazu das entsprechende Werkzeug unter Extras | hinzu Unterstützung für Befehlszeilen-Tools .



Dann klicken, die Run etwasCtrl-Ctrl Zeile erscheint , in dem alle Befehle mit Auto-Vervollständigung zur Verfügung. Ab dieser Version müssen Sie nicht einmal mehr etwas für Symfony, Laravel und Drush konfigurieren. Es reicht aus, das Projekt zu öffnen, zu klicken und den Befehl einzugeben. ️ Für Laravel unter macOS muss die Datei ausführbar sein ( ).



Ctrl-Ctrl







artisanchmod +x artisan



Darüber hinaus können Tools jetzt über beliebige Remote-Interpreter (SSH, Docker, Docker Compose, Vagrant) ausgeführt werden. Sie können Ihre PHP 8-Anwendung beispielsweise schnell testen, indem Sie einen Docker-Interpreter aus einem Bild hinzufügen php:rc-cli.



Neues Refactoring: Klassenextraktion



Der Unterricht sieht zunächst ordentlich und sauber aus. Dann werden ihnen immer mehr neue Methoden und Eigenschaften hinzugefügt, und früher oder später ist die Klasse bereits "geschwollen" und mit Verantwortlichkeiten von allen Seiten überwachsen.



Hier kann es hilfreich sein, einer neuen Klasse eine Reihe verwandter Methoden und Eigenschaften zuzuweisen. Genau das bietet das neue Refactoring der Extract Class.



Um es zu versuchen, müssen Sie in die Klasse klicken Ctrl+Tund Klasse extrahieren auswählen . PhpStorm fordert Sie auf, den Namen der neuen Klasse einzugeben, und Sie können sofort weitere Methoden und Klassen zum Abrufen auswählen.







Dieses Refactoring funktioniert auch für reguläre Funktionen.



Und mehr für PHP



Neue Inspektion: Die typisierte Eigenschaft ist möglicherweise nicht zugewiesen



Wenn eine typisierte Eigenschaft deklariert, aber nicht initialisiert wird, führt ein Versuch, sie zu lesen, zu einem Fehler TypeError(es sei denn, eine magische Eigenschaft ist definiert __get()). PhpStorm hebt das Lesen von nicht initialisierten Eigenschaften hervor.







Neue Inspektion: Array wird nur mit Schreibzugriff verwendet



Beispiel aus der Datei SchemaTool.php aus doctrine / orm.







Das Array $pkColumnsin der Methode wird gatherColumns()aktualisiert, aber nie gelesen.



Anpassen generierter Getter und Setter



Jetzt können Sie die Methodenbenennung anpassen, indem Sie zwischen camelCase()und wählen snake_case().



Passen Sie außerdem die Reihenfolge an, in der sie der Klasse hinzugefügt werden.



Beide Optionen stehen im Editor | zur Verfügung Codestil | PHP in der Code - Generierung Registerkarte .







Richtige Auflösung für viele Projekte in einem Fenster



Wenn Sie mehrere Projekte in einem Fenster öffnen, werden häufig Fehler angezeigt, bei denen die Klasse mehrmals definiert wurde. Und wenn Sie versuchen, zur Definition einer Klasse zu gelangen, müssen Sie immer noch auswählen, welche.



PhpStorm 2020.2 hat diese Fehler nicht und der Übergang funktioniert wie erwartet.







Niedrigere Priorität für Klassen vom Anbieter



In der Liste der automatischen Vervollständigung werden Klassen direkt aus dem Projekt Vorrang eingeräumt, und Entitäten aus dem Ordner vendorund den PHAR-Dateien werden mit einer niedrigeren Priorität versehen.



Fügen Sie allen ausgewählten Zeilen einen Cursor hinzu



Mit der neuen Aktion Caret pro ausgewählter Zeile hinzufügen wird am Ende jeder ausgewählten Zeile ein Cursor hinzugefügt und die Auswahl aufgehoben. Kann mit den Tasten ⌥⇧G / Alt + Umschalt + G aufgerufen werden.







Volle Unterstützung für GitHub-Pull-Anfragen



Die grundlegende Unterstützung für Pull-Anforderungen wurde in PhpStorm 2018.3 angezeigt. Seitdem wurden Updates durchgeführt, aber für viele Aktionen musste noch zum Browser gewechselt werden.



In PhpStorm 2020.2 können alle Pull-Request-Arbeiten direkt in der IDE ausgeführt werden!







Sie können über das VCS auf Pull-Anforderungen zugreifen Git | Zeigen Sie Pull-Anforderungen in der Symbolleiste oder durch Klicken an Alt+7. Die erste ist eine Liste der verfügbaren Anforderungen mit Such- und Filteroptionen.



Durch Klicken auf eine Pull-Anfrage werden detaillierte Informationen dazu geöffnet: Prüfer, Tags, geänderte Dateien, Zeitleiste.



Der gesamte Ablauf der Überprüfung kann genau dort durchgeführt werden. Starten und fordern Sie eine Überprüfung an, kommentieren Sie Änderungen auf Zeilen- oder Festschreibungsebene, reichen Sie eine Überprüfung ein und führen Sie sie zusammen.



Die Ergebnisse der Überprüfungen, einschließlich der Ergebnisse des CI, werden unter der Zeitachse angezeigt.



Zuvor mussten Sie zum Zusammenführen einer Pull-Anforderung einen lokalen Zweig erstellen. Jetzt ist es nicht mehr erforderlich und Sie können per Knopfdruck zusammenführen.



OpenAPI-Unterstützung



Das OpenAPI Specifications Plugin ist für alle JetBrains IDEs verfügbar und funktioniert seit 2020.2. In den Open API-Spezifikationsdateien ( openapi.yaml/ openapi.jsonund swagger.yaml/ swagger.json) werden Hervorhebungen, Erweiterungen, Validierungen und Navigationen bereitgestellt.



Darüber hinaus stehen folgende Optionen zur Verfügung:



  • Integration mit der Swagger-Benutzeroberfläche - wird direkt im IDE-Fenster gerendert.
  • Codegenerierung.
  • Strukturdifferenz für OpenAPI-Spezifikationen - ermöglicht es Ihnen, signifikante Änderungen schnell zu erkennen.
  • Gatter-Symbole zum schnellen Erstellen von Anforderungen in einem HTTP-Client.
  • Endpunkte in einem HTTP-Client vervollständigen.
  • Refactoring umbenennen - Wenn Sie einen Endpunkt in einer Spezifikation umbenennen, wird er in der Anforderung des HTTP-Clients automatisch umbenannt.








Neues Inspektions-Widget



In der oberen rechten Ecke des Editors wird jetzt ein Widget mit der Anzahl der Probleme in der aktuellen Datei angezeigt.



Mit den Pfeilen können Sie schnell zum nächsten / vorherigen Problem springen (früher könnte dies mit den Tasten F2/ geschehen Shift+F2).



Im Widget können Sie auswählen, welche Problemstufe angezeigt werden soll, z. B. nur Syntaxfehler oder alle Probleme.



Und auf das Widget klicken, wird eine neue Probleme Fenster öffnet sich mit einer Liste aller erkannten Probleme in der Datei.







Versionskontrolle



Git von WSL 2



PhpStorm kann jetzt die WSL Git-Binärdatei verwenden. Darüber hinaus bestimmt die IDE selbst, ob WSL installiert ist und ob Git darin verfügbar ist.



Die Einstellungen finden Sie unter Einstellungen | Versionskontrolle | Git .



️ Git funktioniert nur mit WSL2, da Git von WSL1 instabil ist und zu falschen Ergebnissen von Git-Befehlen führen kann.



Verbesserte Benutzeroberfläche zum Vergleichen von Zweigen



Mit PhpStorm können Sie alle Zweige vergleichen und sehen, welche Commits in den einen oder anderen eingegangen sind. Wählen Sie dazu einen beliebigen Zweig aus den im VCS- Popup | verfügbaren aus Verzweigen Sie und wählen Sie Vergleichen mit Aktuell aus dem Kontextmenü .



In PhpStorm 2020.2 werden die Protokolle und Festschreibungsunterschiede direkt im Editor angezeigt. Dadurch können weitere Informationen auf dem Bildschirm angezeigt werden.







Aktualisierte Befehlsdialoge



Die Dialoge für die Befehle Git Merge, Pull und Rebase wurden neu gestaltet und vereinheitlicht. Fehlende Optionen hinzugefügt und jetzt können Sie den vollständigen Git-Befehl sehen, der ausgeführt wird.



Alle Befehle sind im VCS | verfügbar Git .







Neue Aktion: Commit entfernen



Ein zusätzliches oder temporäres lokales Commit kann jetzt direkt aus dem Protokoll in PhpStorm entfernt werden. Wählen Sie dazu im Kontextmenü des Commits Drop Commit aus .







Neue Aktion: Commits zu einem zusammenführen (Squash)



Sie können auch mehrere Commits zu einem kombinieren. Beispielsweise kann es praktisch sein, den Verlauf zu löschen, bevor eine Pull-Anforderung erstellt oder Änderungen übertragen werden. Wählen Sie



mehrere Commits im Protokoll aus und wählen Sie Squash Commits ... aus dem Kontextmenü.







Für beide Aktionen wird hinter den Kulissen gearbeitet git rebase.



DB Tools



PhpStorm enthält fast alle DataGrip- Funktionen , die in der DataGrip 2020.2-Versionsübersicht unserer Kollegen behandelt werden.



Netz



Und wie immer sind auch alle Updates von WebStorm 2020.2 in PhpStorm enthalten. Mit einem Plugin kann Prettier beispielsweise auch als Standardformatierer für PHP-Dateien verwendet werden.






Sie können PhpStorm 2020.2 auf der Seite „ Was ist neu ?Herunterladen .



Und hier ist ein Video (auf Englisch), das die Hauptmerkmale der Veröffentlichung zeigt:





Das ist die ganze Zeit. Danke fürs Lesen bis zum Ende! Wir freuen uns über Fragen, Vorschläge, Fehlerberichte und nur Gedanken in den Kommentaren.



Ihr JetBrains PhpStorm-Team



All Articles