PhpStorm 2020.2: tipos concatenados de PHP 8, nuevo motor de flujo de control, solicitudes de extracción de GitHub, OpenAPI





¡Hola, Habr! ¡Nos complace presentar la segunda versión importante de PhpStorm este año!



Debajo del corte hay un análisis detallado de todos los cambios notables y nuevas características. Cuidado, muchas fotos.



Tipos de unión en PHP 8



PHP 8 tendrá tantas características nuevas que, hasta cierto punto, es un lenguaje nuevo. Comenzamos a implementar el soporte para los ocho temprano y la primera gran característica fueron los tipos fusionados.



Los tipos concatenados T1|T2|...se pueden usar siempre que se puedan especificar tipos ahora: en argumentos, propiedades y valores de retorno. En este caso, la variable puede tomar uno de los tipos enumerados.



De hecho, los tipos concatenados se han utilizado en PHPDoc durante mucho tiempo, pero ahora el intérprete los comprobará en tiempo de ejecución.



Cambiar la versión de idioma



Para ver todas las posibilidades, puede cambiar manualmente la versión de idioma a PHP 8 en Idiomas y marcos | PHP | Nivel de lenguaje PHP .



O si el código ya contiene el uso de nuevas funciones, entonces puede cambiar usando una solución rápida (Alt + Enter).



Y si la versión de PHP está especificada en composer.json, PhpStorm la abrirá automáticamente.







Conversión de PHPDoc a tipos combinados nativos



Se puede invocar una solución rápida (Alt + Enter) en una etiqueta PHPDoc que tenga un tipo combinado.







Eliminando PHPDoc innecesario



Si PHPDoc contenía solo declaraciones de tipo, ahora se puede eliminar como solución rápida redundante (Alt + Enter).







¿Se puede considerar que una eliminación de este tipo siempre es segura y se realiza automáticamente antes de comprometerse? Estamos considerando agregar tal característica.


Validación de tipo



PhpStorm solía poder analizar tipos y encontrar infracciones en función de la información de las etiquetas PHPDoc. Con las declaraciones nativas, estas posibilidades se han ampliado.



Se realizan comprobaciones para todo: propiedades, argumentos, valores de retorno.







Esto es especialmente útil en código complejo donde las violaciones no son inmediatamente obvias.







El pseudo tipo falso



Algunas funciones heredadas pueden volver falsepor error. Por ejemplo, esta es la forma en que se comportan strpos(), array_search()y otras 310 funciones estándar.



En este caso, sería posible especificar el tipo de retorno como concatenado, por ejemplo int|bool, pero de hecho truenunca estará allí.



Para tales casos, se introdujo un seudotipo false. Solo se puede usar en combinaciones. De lo contrario, PhpStorm resaltará el código no válido.







Tipos duplicados y redundantes



Muchas combinaciones en uniones de tipo están prohibidas o simplemente son innecesarias. Por ejemplo:



  • bool|false- porque falso está incluido en bool;
  • Foo|Fooo int|string|INT- repetición;
  • object|User- objectcontiene conscientemente todo lo demás;
  • iterable|arrayo iterable|Traversable- iterableincluye matriz y Traversable;
  • void - solo se puede usar en el valor de retorno y solo por sí mismo;
  • falseo null- solo como parte de una asociación.




PhpStorm destacará todas esas violaciones.







Tipos que aceptan valores NULL



La sintaxis antigua ?Typeahora se considera una abreviatura de Type|null.



Pero la abreviatura c ?no se puede usar en combinaciones porque hay una ambigüedad irresoluble.



Para tales casos, PhpStorm tiene una solución rápida (Alt + Enter).







Cambio de tipos con herencia



Hay dos reglas para los métodos:



El tipo de parámetro es contravariante , es decir, se puede extender.







El tipo de retorno es covariante , es decir, solo se puede restringir.







En este caso, el orden de los tipos no importa y es Type1|Type2equivalente Type2|Type1.



El tipo de propiedad no se puede cambiar El

tipo de propiedad heredada debe reducirse al padre, por ejemplo:







Nuevo motor de flujo de control



Una actualización del motor de flujo de control nos permitió agregar nuevas inspecciones y corregir muchos errores antiguos. Como resultado, PhpStorm comprende el código aún mejor.



En algunos lugares, será posible notar resaltados y advertencias de nuevas inspecciones. Algunos de ellos pueden requerir su atención como posibles fuentes de errores. Arreglar otros solo hará que el código sea más limpio.



A continuación se muestran algunos ejemplos de inspecciones.



La variable es siempre verdadera o falsa.

Ejemplo en el archivo Parser.php de doctrine / orm.







La condición es siempre verdadera

Ejemplo en el archivo FormValidator.php de symfony / form. El







resultado de la instancia es siempre verdadero

Ejemplo en el archivo Logger.php de Symfony / monolog-bridge.







$thissiempre será de tipoResetInterfaceporque ese es más alto en la jerarquía.







La expresión siempre es nula

Ejemplo en el archivo ProcessUtils.php de Symfony / process.







Nueva acción: Tipo de información (⌃⇧P / Ctrl + Shift + P)

Puede colocar el cursor sobre cualquier expresión y llamar a esa acción para ver qué tipo PhpStorm ha inferido para la expresión. Disponible en el menú Ver | Escriba Información o mediante la tecla de acceso rápido ⌃⇧P / Ctrl + Shift + P.







Mejoras del compositor



Desde la versión 2020.1, todas las acciones con dependencias de Composer se pueden realizar directamente en PhpStorm en el archivo composer.json. Hay varias mejoras en esta versión.



Soporte para repositorios personalizados Satis / Packagist

Si especifica una fuente personalizada en la sección "repositorios", la finalización del código estará disponible para todos los paquetes. La información del paquete y la versión se almacenará en caché en PhpStorm.







Además, cuando se especifican múltiples versiones

Si las versiones se enumeran separadas por comas o ||barra vertical ( ), PhpStorm ahora funcionará correctamente y mostrará las opciones disponibles.







Enlace al código y al sitio

Cada paquete en la ventana emergente con información tiene enlaces a sitios.







Configuración de herramientas de calidad de código

Si la lista de dependencias contiene herramientas de calidad de código que son compatibles con PhpStorm, enfrente de ellas habrá un icono de llave inglesa para ir a la configuración.







Mejoras en las herramientas de calidad del código



Por cierto, sobre herramientas de calidad. PhpStorm 2020.2 tiene algunas adiciones útiles. Compatibilidad con



Docker Compose

PHP_CodeSniffer, PHP CS Fixer y PHP Mess Detector se pueden ejecutar a través de docker compose.







Listas de excepciones para PHP_CodeSniffer

Si ruleset.xmlhay una sección en la costumbre "exclude-pattern", ahora se tendrá en cuenta y los archivos en las rutas especificadas no se analizarán en el IDE.



El formateo a través de un intérprete remoto

PHP CS Fixer y PHPCBF se puede ejecutar con un intérprete a través de SSH, Docker, Docker Compose, Vagrant y otros.



Herramientas de línea de comandos



Todos los scripts de Symfony, Laravel Artisan, Drupal Drush, WP-CLI y Composer se pueden ejecutar muy rápidamente en PhpStorm sin abrir una terminal.



Para hacer esto, agregue la herramienta adecuada en Herramientas | Soporte de la herramienta de línea de comandos .



Luego, al hacer clic, Ctrl-Ctrlaparece la línea Ejecutar cualquier cosa , en la que están disponibles todos los comandos con finalización automática.



A partir de esta versión, ni siquiera necesita configurar nada para Symfony, Laravel y Drush. Basta con abrir el proyecto, hacer clic Ctrl-Ctrly comenzar a ingresar el comando.







️ Para Laravel en macOS, el archivo artisandebe ser ejecutable ( chmod +x artisan).



Además, las herramientas ahora se pueden ejecutar a través de cualquier intérprete remoto (SSH, Docker, Docker Compose, Vagrant). Por ejemplo, puede probar rápidamente su aplicación PHP 8 agregando un intérprete de Docker desde una imagen php:rc-cli.



Nueva refactorización: extracción de clases



Las clases se ven ordenadas y limpias al principio. Luego se les agregan más y más métodos y propiedades nuevos, y tarde o temprano la clase ya está "hinchada" y llena de responsabilidades de todos los lados.



La asignación de un montón de métodos y propiedades relacionados en una nueva clase puede ayudar aquí. Esto es exactamente lo que ofrece la nueva refactorización de la clase Extract.



Para probarlo, debe hacer clic dentro de la clase Ctrl+Ty seleccionar Extraer clase . PhpStorm le pedirá que ingrese el nombre de la nueva clase y podrá seleccionar inmediatamente más métodos y clases para recuperar.







Esta refactorización también funciona para funciones regulares.



Y más para PHP



Nueva inspección: la propiedad escrita puede estar sin asignar



Si se declara una propiedad escrita pero no se inicializa, entonces un intento de leerla resultará en un error TypeError(a menos que se defina una propiedad mágica __get()). PhpStorm resaltará la lectura de propiedades no inicializadas.







Nueva inspección: matriz utilizada solo con acceso de escritura



Ejemplo del archivo SchemaTool.php de doctrine / orm.







La matriz $pkColumnsdel método se gatherColumns()actualiza, pero nunca se lee.



Personalización de getters y setters generados



Ahora puede personalizar el nombre del método eligiendo entre camelCase()y snake_case().



Y también personalice el orden en que se agregan a la clase.



Ambas opciones están disponibles en Editor | Estilo de código | PHP en la pestaña Generación de código .







Resolución correcta para muchos proyectos en una ventana



Si abre varios proyectos en una ventana, a menudo puede ver errores de que la clase se ha definido varias veces. Y al intentar ir a la definición de una clase, aún tenía que elegir cuál.



PhpStorm 2020.2 no tiene estos errores y la transición funciona como se esperaba.







Prioridad más baja para las clases del proveedor



En la lista de autocompletar, se dará prioridad a las clases directamente del proyecto, y las entidades de la carpeta vendory los archivos PHAR irán con una más baja .



Agregar cursor a todas las líneas seleccionadas



La nueva acción Add Caret Per Selected Line agrega un cursor al final de cada línea seleccionada y la deselecciona. Se puede invocar con las teclas ⌥⇧G / Alt + Shift + G.







Soporte completo para solicitudes de extracción de GitHub



El soporte básico de solicitud de extracción apareció en PhpStorm 2018.3. Ha habido actualizaciones desde entonces, pero muchas acciones aún requerían cambiar al navegador.



En PhpStorm 2020.2, ¡todo el trabajo de solicitud de extracción se puede realizar directamente en el IDE!







Puede acceder a las solicitudes de extracción desde VCS | Git | Ver solicitudes de extracción , desde la barra de herramientas o haciendo clic en Alt+7. La primera será una lista de solicitudes disponibles con opciones de búsqueda y filtrado.



Al hacer clic en una solicitud de extracción, se abrirá información detallada sobre ella: revisores, etiquetas, archivos modificados, línea de tiempo.



Todo el flujo de la revisión se puede realizar allí mismo. Inicie y solicite una revisión, comente los cambios en la línea o nivel de compromiso, envíe una revisión, fusione.



Los resultados de las comprobaciones, incluidos los del CI, se mostrarán debajo de la línea de tiempo.



Anteriormente, para fusionar una solicitud de extracción, tenía que crear una sucursal local. Ahora no es necesario y puede fusionar presionando un botón.



Soporte OpenAPI



El complemento de especificaciones de OpenAPI está disponible para todos los IDE de JetBrains y funciona desde 2020.2. En los archivos de especificaciones de Open API ( openapi.yaml/ openapi.jsony swagger.yaml/ swagger.json), proporciona resaltado, aumento, validación y navegación.



Además, están disponibles las siguientes opciones:



  • Integración con Swagger UI: se renderiza directamente en la ventana IDE.
  • Codigo de GENERACION.
  • Diferencia estructural para especificaciones de OpenAPI: le permite detectar rápidamente cambios significativos.
  • Gatter iconos para crear rápidamente solicitudes en un cliente HTTP.
  • Completar puntos finales en un cliente HTTP.
  • Cambiar el nombre de la refactorización: si cambia el nombre de un punto final en una especificación, automáticamente se cambiará el nombre en la solicitud del cliente HTTP.








Nuevo widget de inspección



La esquina superior derecha del editor ahora muestra un widget con el número de problemas en el archivo actual.



Usando las flechas, puede saltar rápidamente al problema siguiente / anterior (antes, esto se podía hacer con las teclas F2/ Shift+F2).



En el widget, puede elegir qué nivel de problema se mostrará, por ejemplo, solo los errores de sintaxis o todos los problemas.



Y al hacer clic en el widget, se abrirá una nueva ventana de Problemas con una lista de todos los problemas detectados en el archivo.







Control de versiones



Git de WSL 2



PhpStorm ahora puede usar el binario WSL Git. Además, el propio IDE determina si WSL está instalado y si Git está disponible en él.



La configuración está disponible en Preferencias | Control de versiones | Git .



️ Git solo funcionará con WSL2, porque Git de WSL1 es inestable y puede dar lugar a resultados incorrectos de los comandos de Git.



Interfaz de usuario mejorada para comparar ramas



PhpStorm le permite comparar cualquier rama y ver qué confirmaciones fueron en una u otra. Para hacer esto, seleccione cualquier rama de las disponibles en la ventana emergente VCS | Ramas y seleccione Comparar con actual en el menú contextual .



En PhpStorm 2020.2, los registros y las diferencias de confirmación se mostrarán directamente en el editor. Esto permite que se muestre más información en la pantalla.







Cuadros de diálogo de comando actualizados



Los diálogos para los comandos Git Merge, Pull y Rebase se han rediseñado y unificado. Se agregaron opciones faltantes y ahora puede ver el comando Git completo que se ejecutará.



Todos los comandos están disponibles en VCS | Git .







Nueva acción: eliminar la confirmación



Una confirmación local adicional o temporal ahora se puede eliminar directamente del registro en PhpStorm. Para hacer esto, seleccione Drop Commit en el menú contextual de la confirmación .







Nueva acción: fusionar confirmaciones en una (aplastar)



También puede combinar varias confirmaciones en una. Por ejemplo, puede ser conveniente borrar el historial antes de crear una solicitud de extracción o antes de impulsar cambios. Seleccione



varias confirmaciones en el registro y seleccione Squash Commits ... en el menú contextual.







Para ambas acciones, se hace entre bastidores git rebase.



Herramientas DB



PhpStorm, listo para usar, incluye casi todas las capacidades de DataGrip que están cubiertas en la descripción general de la versión DataGrip 2020.2 de nuestros colegas.



Web



Y, como siempre, todas las actualizaciones de WebStorm 2020.2 también se incluyen en PhpStorm. Por ejemplo, utilizando un complemento , Prettier también se puede usar como formateador predeterminado para archivos PHP.






Puede descargar PhpStorm 2020.2 en la página " Novedades ".



Y aquí hay un video (en inglés) que muestra las principales características del lanzamiento:





Eso es todo este tiempo. ¡Gracias por leer hasta el final! Estaremos encantados de tener preguntas, sugerencias, informes de errores y pensamientos en los comentarios.



Su equipo JetBrains PhpStorm



All Articles