PhpStorm 2020.2: Types concaténés PHP 8, nouveau moteur de flux de contrôle, requêtes d'extraction GitHub, OpenAPI





Bonjour, Habr! Nous sommes heureux de vous présenter la deuxième version majeure de PhpStorm cette année!



Sous la coupe se trouve une analyse détaillée de tous les changements notables et des nouvelles fonctionnalités. Attention - beaucoup de photos.



Types d'union en PHP 8



PHP 8 aura tellement de nouvelles fonctionnalités qu'il s'agit même d'un nouveau langage dans une certaine mesure. Nous avons commencé à déployer le support pour les huit au début et la première grande fonctionnalité était les types fusionnés.



Les types concaténés T1|T2|...peuvent être utilisés partout où des types peuvent être spécifiés maintenant: dans les arguments, les propriétés et les valeurs de retour. Dans ce cas, la variable peut prendre l'un des types répertoriés.



En fait, les types concaténés sont utilisés dans PHPDoc depuis longtemps, mais maintenant l'interpréteur les vérifiera au moment de l'exécution.



Changement de version linguistique



Pour voir toutes les possibilités, vous pouvez basculer manuellement la version linguistique vers PHP 8 dans Langues et cadres | PHP | Niveau de langage PHP .



Ou si le code utilise déjà de nouvelles fonctionnalités, vous pouvez basculer à l'aide de la correction rapide (Alt + Entrée).



Et si la version PHP est spécifiée dans composer.json, PhpStorm la récupérera automatiquement.







Conversion de PHPDoc en types combinés natifs



Une solution rapide (Alt + Entrée) peut être invoquée sur une balise PHPDoc qui a un type fusionné.







Supprimer PHPDoc inutile



Si PHPDoc ne contenait que des déclarations de type, il peut maintenant être supprimé en tant que solution rapide redondante (Alt + Entrée).







Une telle suppression peut-elle toujours être considérée comme sûre et effectuée automatiquement avant la validation? Nous envisageons d'ajouter une telle fonctionnalité.


Validation de type



PhpStorm était capable d'analyser les types et de trouver des violations par les informations des balises PHPDoc. Avec les déclarations natives, ces possibilités se sont élargies.



Des vérifications sont effectuées pour tout: propriétés, arguments, valeurs de retour.







Ceci est particulièrement utile dans le code complexe où les violations ne sont pas immédiatement évidentes.







Le pseudo type false



Certaines fonctions héritées peuvent retourner falseen cas d'erreur. Par exemple, voici comment ils se comportent strpos(), array_search()et 310 autres fonctions standard.



Dans ce cas, il serait possible de spécifier le type de retour comme concaténé, par exemple int|bool, mais en fait trueil ne sera jamais là.



Pour de tels cas, un pseudotype a été introduit false. Il ne peut être utilisé que dans les jointures. Sinon, PhpStorm mettra en évidence le code invalide.







Types dupliqués et redondants



De nombreuses combinaisons dans les unions de types sont interdites ou simplement inutiles. Par exemple:



  • bool|false- parce que false est inclus dans bool;
  • Foo|Fooou int|string|INT- répétition;
  • object|User- objectcontient sciemment tout le reste;
  • iterable|arrayou iterable|Traversable- iterablecomprend la matrice et le Traversable;
  • void - ne peut être utilisé que dans la valeur de retour et uniquement par lui-même;
  • falseou null- uniquement dans le cadre d'une association.




PhpStorm mettra en évidence toutes ces violations.







Types nulles



L'ancienne syntaxe est ?Typedésormais considérée comme un raccourci pour Type|null.



Mais le raccourci c ?ne peut pas être utilisé dans les jointures car il existe une ambiguïté insoluble.



Dans de tels cas, PhpStorm a une solution rapide (Alt + Entrée).







Changer de type avec héritage



Il existe deux règles pour les méthodes:



Le type de paramètre est contravariant , c'est-à-dire qu'il peut être étendu.







Le type de retour est covariant , c'est-à-dire qu'il ne peut être réduit.







Dans ce cas, l'ordre des types n'a pas d'importance et est Type1|Type2équivalent Type2|Type1.



Le type de propriété ne peut pas être modifié Le

type d'une propriété héritée doit être réduit au parent, par exemple:







Nouveau moteur de contrôle de flux



Le moteur de contrôle de flux a été mis à jour pour ajouter de nouvelles inspections et corriger de nombreux anciens bogues. En conséquence, PhpStorm comprend encore mieux le code.



À certains endroits, vous pouvez voir les mises en évidence et les avertissements des nouvelles inspections. Certains d'entre eux peuvent nécessiter votre attention en tant que sources potentielles de bogues. Corriger les autres rendra simplement le code plus propre.



Voici quelques exemples d'inspections.



La variable est toujours vraie ou fausse.

Exemple dans le fichier Parser.php de doctrine / orm.







La condition est toujours vraie

Exemple dans le fichier FormValidator.php de symfony / form. Le







résultat de l' instance est toujours vrai

Exemple dans le fichier Logger.php de symfony / monolog-bridge.







$thissera toujours de typeResetInterfaceparce que celui-ci est plus haut dans la hiérarchie.







L'expression est toujours nulle

Exemple dans le fichier ProcessUtils.php de symfony / process.







Nouvelle action: Type Info (⌃⇧P / Ctrl + Shift + P)

Vous pouvez placer le curseur sur n'importe quelle expression et appeler cette action pour voir quel type PhpStorm a déduit pour l'expression. Disponible dans le menu Affichage | Tapez Info ou par raccourci clavier ⌃⇧P / Ctrl + Maj + P.







Améliorations du compositeur



Depuis la version 2020.1, toutes les actions avec des dépendances Composer peuvent être effectuées directement dans PhpStorm dans le fichier composer.json. Il y a plusieurs améliorations dans cette version.



Prise en charge des référentiels personnalisés Satis / Packagist

Si vous spécifiez une source personnalisée dans la section «référentiels», alors la complétion de code sera disponible pour tous les packages qu'elle contient. Les informations sur le package et la version seront mises en cache dans PhpStorm.







Ajout, lorsque plusieurs versions sont spécifiées.

Si les versions sont répertoriées séparées par des virgules ou un tube ( ||), alors PhpStorm fonctionnera correctement et affichera les options disponibles.







Lien vers le code et le site

Chaque package de la fenêtre contextuelle contenant des informations contient des liens vers des sites.







Paramètres des outils de qualité du code

Si la liste des dépendances contient des outils de qualité de code pris en charge dans PhpStorm, alors en face d'eux, il y aura une icône de clé pour accéder aux paramètres.







Améliorations des outils de qualité du code



Au fait, sur les outils de qualité. PhpStorm 2020.2 a plusieurs ajouts utiles. Prise en charge de



Docker Compose

PHP_CodeSniffer, PHP CS Fixer et PHP Mess Detector peuvent être exécutés via docker compose.







Listes d'exceptions pour PHP_CodeSniffer

S'il existe une ruleset.xmlsection personnalisée "exclude-pattern", elle sera désormais prise en compte et les fichiers sur les chemins spécifiés ne seront pas analysés dans l'EDI.



Le formatage via un interpréteur distant

PHP CS Fixer et PHPCBF peut être exécuté avec un interpréteur via SSH, Docker, Docker Compose, Vagrant et autres.



Outils de ligne de commande



Tous les scripts Symfony, Laravel Artisan, Drupal Drush, WP-CLI et Composer peuvent être exécutés très rapidement dans PhpStorm sans ouvrir de terminal.



Pour ce faire, ajoutez l'outil approprié dans le menu Outils | Prise en charge des outils de ligne de commande .



Ensuite, en cliquant sur, la Ctrl-Ctrlligne Exécuter tout apparaît , dans laquelle toutes les commandes avec saisie semi-automatique sont disponibles.



À partir de cette version, vous n'avez même pas besoin de configurer quoi que ce soit pour Symfony, Laravel et Drush. Il suffit d'ouvrir le projet, de cliquer Ctrl-Ctrlet de commencer à saisir la commande.







️ Pour Laravel sur macOS, le fichier artisandoit être exécutable ( chmod +x artisan).



De plus, les outils peuvent désormais être exécutés via n'importe quel interpréteur distant (SSH, Docker, Docker Compose, Vagrant). Par exemple, vous pouvez tester rapidement votre application PHP 8 en ajoutant un interpréteur Docker à partir d'une image php:rc-cli.



Nouveau refactoring: extraction de classe



Les cours ont l'air soignés et propres au début. Ensuite, de plus en plus de nouvelles méthodes et propriétés leur sont ajoutées, et tôt ou tard la classe est déjà "gonflée" et envahie par les responsabilités de tous les côtés.



L'allocation d'un ensemble de méthodes et de propriétés associées dans une nouvelle classe peut aider ici. C'est exactement ce que propose le nouveau refactoring de classe d'extraction.



Pour l'essayer, vous devez cliquer à l'intérieur de la classe Ctrl+Tet sélectionner Extraire la classe . PhpStorm vous invitera à entrer le nom de la nouvelle classe, et vous pourrez immédiatement sélectionner plus de méthodes et de classes à récupérer.







Cette refactorisation fonctionne également pour les fonctions régulières.



Et plus pour PHP



Nouvelle inspection: la propriété saisie peut ne pas être attribuée



Si une propriété typée est déclarée mais non initialisée, alors une tentative de lecture entraînera une erreur TypeError(sauf si une propriété magique est définie __get()). PhpStorm mettra en évidence la lecture des propriétés non initialisées.







Nouvelle inspection: matrice utilisée uniquement avec un accès en écriture



Exemple du fichier SchemaTool.php de doctrine / orm.







Le tableau $pkColumnsde la méthode est gatherColumns()mis à jour, mais jamais lu.



Personnalisation des getters et des setters générés



Vous pouvez maintenant personnaliser la dénomination de la méthode en choisissant entre camelCase()et snake_case().



Et personnalisez également l'ordre dans lequel ils sont ajoutés à la classe.



Les deux options sont disponibles dans l' éditeur | Style de code | PHP dans l'onglet Génération de code .







Résolution correcte pour de nombreux projets dans une seule fenêtre



Si vous ouvrez plusieurs projets dans une fenêtre, vous pouvez souvent voir des erreurs selon lesquelles la classe a été définie plusieurs fois. Et en essayant d'accéder à la définition d'une classe, vous deviez toujours choisir laquelle.



PhpStorm 2020.2 n'a pas ces bogues et la transition fonctionne comme prévu.







Priorité inférieure pour les classes du fournisseur



Dans la liste de vendorsaisie semi -automatique, la priorité sera donnée aux classes directement à partir du projet, et les entités du dossier et des fichiers PHAR iront avec une classe inférieure .



Ajouter un curseur à toutes les lignes sélectionnées



La nouvelle action Ajouter un curseur par ligne sélectionnée ajoute un curseur à la fin de chaque ligne sélectionnée et la désélectionne. Peut être invoqué avec les touches ⌥⇧G / Alt + Shift + G.







Prise en charge complète des demandes d'extraction GitHub



Le support de base des pull request est apparu dans PhpStorm 2018.3. Il y a eu des mises à jour depuis, mais de nombreuses actions ont encore nécessité le passage au navigateur.



Dans PhpStorm 2020.2, tous les travaux de pull request peuvent être effectués directement dans l'EDI!







Vous pouvez accéder aux demandes d'extraction depuis le VCS | Git | Affichez les demandes d'extraction , à partir de la barre d'outils ou en cliquant sur Alt+7. Le premier sera une liste des demandes disponibles avec des options de recherche et de filtrage.



Cliquer sur une pull request ouvrira des informations détaillées à ce sujet: réviseurs, balises, fichiers modifiés, chronologie.



Tout le flux de l'examen peut être effectué ici. Démarrez et demandez une révision, commentez les modifications au niveau de la ligne ou du commit, soumettez une révision, fusionnez.



Les résultats des contrôles, y compris ceux du CI, seront affichés sous la chronologie.



Auparavant, pour fusionner une pull request, vous deviez créer une branche locale. Maintenant, ce n'est pas nécessaire et vous pouvez fusionner en appuyant sur un bouton.



Prise en charge d'OpenAPI



Le plugin OpenAPI Specifications est disponible pour tous les IDE JetBrains et fonctionne depuis 2020.2. Dans les fichiers de spécification Open API ( openapi.yaml/ openapi.jsonet swagger.yaml/ swagger.json), il fournit la mise en évidence, l'augmentation, la validation et la navigation.



De plus, les options suivantes sont disponibles:



  • Intégration avec Swagger UI - rend directement dans la fenêtre IDE.
  • Génération de code.
  • Différence structurelle pour les spécifications OpenAPI - vous permet de détecter rapidement les changements importants.
  • Icônes Gatter pour créer rapidement des requêtes dans un client HTTP.
  • Terminer les points de terminaison dans un client HTTP.
  • Renommer la refactorisation - si vous renommez un point de terminaison dans une spécification, il sera automatiquement renommé dans la demande du client HTTP.








Nouveau widget d'inspection



Le coin supérieur droit de l'éditeur affiche maintenant un widget avec le nombre de problèmes dans le fichier courant.



En utilisant les flèches, vous pouvez rapidement passer au problème suivant / précédent (auparavant, cela pouvait être fait avec les touches F2/ Shift+F2).



Dans le widget, vous pouvez choisir le niveau de problème qui sera affiché, par exemple, uniquement les erreurs de syntaxe ou tous les problèmes.



Et en cliquant sur le widget, une nouvelle fenêtre Problèmes s'ouvrira avec une liste de tous les problèmes détectés dans le fichier.







Contrôle de version



Git de WSL 2



PhpStorm peut désormais utiliser le binaire WSL Git. De plus, l'EDI lui-même détermine si WSL est installé et si Git y est disponible.



Les paramètres sont disponibles dans Préférences | Contrôle de version | Git .



️ Git ne fonctionnera qu'avec WSL2, car Git de WSL1 est instable et peut conduire à des résultats incorrects des commandes Git.



Interface utilisateur améliorée pour comparer les branches



PhpStorm vous permet de comparer toutes les branches et de voir quels commits sont entrés dans l'une ou l'autre. Pour ce faire, sélectionnez n'importe quelle branche parmi celles disponibles dans le popup VCS | Branches et sélectionnez Comparer avec le courant dans le menu contextuel .



Dans PhpStorm 2020.2, les logs et les différences de commit seront affichés directement dans l'éditeur. Cela permet d'afficher plus d'informations sur l'écran.







Boîtes de dialogue de commande mises à jour



Les boîtes de dialogue des commandes Git Merge, Pull et Rebase ont été repensées et unifiées. Ajout d'options manquantes et maintenant vous pouvez voir la commande Git complète qui sera exécutée.



Toutes les commandes sont disponibles dans le VCS | Git .







Nouvelle action: supprimer la validation



Un commit local supplémentaire ou temporaire peut maintenant être supprimé directement du journal dans PhpStorm. Pour ce faire, sélectionnez Drop Commit dans le menu contextuel du commit .







Nouvelle action: fusionner les commits en un seul (squash)



Vous pouvez également combiner plusieurs commits en un seul. Par exemple, il peut être pratique d'effacer l'historique avant de créer une demande d'extraction ou avant de pousser les modifications. Sélectionnez



plusieurs commits dans le journal et sélectionnez Squash Commits ... dans le menu contextuel.







Pour les deux actions, les coulisses sont terminées git rebase.



Outils DB



PhpStorm prêt à l'emploi comprend presque toutes les fonctionnalités de DataGrip qui sont couvertes dans l'aperçu de la version DataGrip 2020.2 de nos collègues.



la toile



Et, comme toujours, toutes les mises à jour de WebStorm 2020.2 sont également incluses dans PhpStorm. Par exemple, en utilisant un plugin , Prettier peut également être utilisé comme formateur par défaut pour les fichiers PHP.






Vous pouvez télécharger PhpStorm 2020.2 sur la page « Quoi de neuf ».



Et voici une vidéo (en anglais) montrant les principales caractéristiques de la version:





C'est tout ce temps. Merci d'avoir lu jusqu'au bout! Nous serons heureux d'avoir des questions, des souhaits, des rapports de bogues et des pensées dans les commentaires.



Votre équipe JetBrains PhpStorm



All Articles