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
false
en 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 true
il 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 dansbool
;Foo|Foo
ouint|string|INT
- répétition;object|User
-object
contient sciemment tout le reste;iterable|array
ouiterable|Traversable
-iterable
comprend la matrice et le Traversable;void
- ne peut être utilisé que dans la valeur de retour et uniquement par lui-même;false
ounull
- uniquement dans le cadre d'une association.
PhpStorm mettra en évidence toutes ces violations.
Types nulles
L'ancienne syntaxe est
?Type
dé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.
$this
sera toujours de typeResetInterface
parce 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.xml
section 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-Ctrl
ligne 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-Ctrl
et de commencer à saisir la commande.
️ Pour Laravel sur macOS, le fichier
artisan
doit ê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+T
et 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
$pkColumns
de 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
vendor
saisie 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.json
et 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