PhpStorm 2020.3: PHP 8, Atributos, PHPStan y Psalm, Xdebug 3, Tailwind CSS y Co-desarrollo





¡Nos complace presentar la versión principal final de PhpStorm este año! Debajo del corte hay un análisis detallado de todos los cambios y nuevas características.







PHP 8



Lanzamiento de PHP 8.0 . ¡Muchas gracias a todos los colaboradores y administradores de versiones!



PhpStorm 2020.3 admite todos los últimos cambios de idioma. Echemos un vistazo a lo que está disponible y cómo usarlo en el IDE.



Versión de idioma en la barra de estado



Ahora, la barra de estado siempre muestra la versión PHP actual del proyecto. También puede cambiar la versión desde allí.







Si el botón de opción no está activo, significa que el límite de la versión de PHP está establecido en composer.json.



Argumentos nombrados



En PHP 8, los argumentos a las funciones y métodos se pueden pasar especificando un nombre de parámetro. Las llamadas ahora se documentan automáticamente y los parámetros opcionales son opcionales en el sentido completo de la palabra.



Con la solución rápida Agregar identificadores de nombre , puede agregar nombres a los argumentos: los







errores tipográficos o los nombres erróneos de los argumentos se resaltan:







si el valor pasado coincide con el valor del parámetro predeterminado, puede eliminarlo de manera segura: en







lugar de la matriz de opciones, puede usar argumentos con nombre para pasar un conjunto de parámetros, simplemente pasando solo los necesarios. Los argumentos que se pasan de esta manera, a diferencia de los elementos de matriz, son seguros para los tipos.







Atributos



Los atributos son una forma nueva y estructurada de especificar metadatos en PHP en lugar de comentarios PHPDoc.



Para crear un atributo, debe declarar una clase y agregar un marcador #[Attribute]



. Aquí PhpStorm lo ayudará a resaltar, completar el código, buscar usos, refactorizar y más.







PHP en sí solo verifica la validez de los atributos cuando se llama ReflectionAttribute::newInstance()



. Y si no accedes a los atributos a través de Reflection, entonces se ignoran por completo para no cargar clases innecesarias y no crear objetos.



Pero PhpStorm validará todo en el editor sin ejecutar la API de Reflection. Se verifican las siguientes reglas:



  • De hecho, la clase especificada puede ser un atributo.





  • Este atributo se aplica solo en los lugares permitidos: una clase, propiedad, método, parámetro, función o constante de clase.





  • El atributo se repite solo si se declara con una bandera Attribute::IS_REPEATABLE



    .







Estos son los atributos en acción con Symfony:










Atributos de PHP 8 Storm



Hay varios atributos disponibles en PhpStorm 2020.3 listos para usar en el espacio de nombres \JetBrains\PhpStorm\



.



Puede usarlos inmediatamente en su base de código sin conectar nada.



Pero si además usa otras herramientas de análisis estático y no desea recibir errores de Clase no encontrada , entonces podría valer la pena agregar el paquete de atributos JetBrains / phpstorm-attribute como una dependencia de composer.json



.





# [Obsoleto]



Utilice este atributo como una etiqueta PHPDoc @deprecated para marcar métodos, clases o constantes de clase que se eliminarán en el futuro.



La ventaja aquí es que puede especificar un reemplazo para el código obsoleto y será más fácil para el usuario actualizarlo.



Echemos un vistazo a un ejemplo del mundo real. En Symfony 5.2 recientemente lanzado , el método está \Symfony\Component\DependencyInjection\Alias::setPrivate()



obsoleto . Si agrega un atributo allí #[Deprecated]



, puede simplificar la migración.



#[Deprecated(
   reason: 'since Symfony 5.2, use setPublic() instead',
   replacement: '%class%->setPublic(!%parameter0%)'
)]

      
      













# [ArrayShape]



Este atributo es útil para trabajar con estructuras de datos simples o matrices similares a objetos cuando por alguna razón no se puede declarar una clase.



La sintaxis es así:

#[ArrayShape([
// ‘key’ => ’type’,
   ‘key1’ => ‘int’,
   ‘key2’ => ‘string’,
   ‘key3’ => ‘Foo’,
   ‘key3’ => App\PHP 8\Foo::class,
])]
function functionName(...): array

      
      







El tipo se puede especificar como una cadena o como una referencia de clase en forma de una cadena o constante FQN ::class



.







La matriz que define la "forma" se puede poner en una constante y reutilizar:



const  MY_ARRAY_SHAPE = [];
#[ArrayShape(MY_ARRAY_SHAPE)]

      
      











En PhpStorm ya hemos anotado #[ArrayShape]



algunas funciones estándar de PHP con un atributo , por ejemplo parse_url()



.



Afortunadamente, la sintaxis de atributos de una sola línea es compatible con versiones anteriores. Es decir, si está escrito #[ArrayShape]



en una línea en un proyecto PHP 7, el intérprete PHP interpretará esta línea como un comentario.



A diferencia del intérprete de PHP, PhpStorm analizará los atributos de todos modos. Entonces, incluso si su proyecto ejecuta PHP 7.4 o inferior, aún se beneficiará de la adición #[ArrayShape]



.





# [Inmutable]



Los objetos inmutables no se pueden modificar después de la inicialización o creación. Su uso hace que el estado del programa sea más predecible y más fácil de depurar.



Se #[Immutable]



puede usar un atributo para marcar una clase completa o propiedades específicas para indicar que no se pueden cambiar.



PhpStorm comprobará el uso de dichos objetos y propiedades y resaltará los intentos de modificación.







El cambio de una propiedad por defecto está permitido en el constructor, pero también se puede permitir en métodos privados / protegidos. Esto se hace usando las constantes CONSTRUCTOR_WRITE_SCOPE



, PRIVATE_WRITE_SCOPE



, PROTECTED_WRITE_SCOPE



pasa al constructor #[Immutable]



.









# [Puro]



Este atributo marca funciones puras, es decir, aquellas que no producen efectos secundarios. Estas funciones se pueden eliminar de forma segura si el resultado de su ejecución no se utiliza posteriormente.







Si una función está marcada como limpia, pero hay un intento de cambiar algo fuera del alcance externo en su cuerpo, PhpStorm resaltará el código inseguro.







Todas las funciones estándar de PHP puro ya están marcadas con este atributo en PhpStorm.





# [Valores esperados]



Con este atributo, puede especificar qué valores toma la función como parámetros y qué valores puede devolver.



Esto es prácticamente lo mismo que hace expectedArguments()



en .phpstorm.meta.php



. La única diferencia es que la metaversión es bastante auxiliar y el atributo indica rígidamente que no hay otros valores posibles.



Por ejemplo, considere la función de conteo:

count ( array|Countable $array_or_countable [, int $mode = COUNT_NORMAL ] ) : int
      
      





Su segundo argumento es un número entero, pero en realidad no es un entero arbitrario, sino una de las constantes COUNT_NORMAL



o COUNT_RECURSIVE



.



Así es como el atributo #[ExpectedValues]



mejorará la situación:







es decir, ha aparecido la finalización automática y, si se pasa algo más, se resalta el error.



Cómo especificar valores posibles o máscaras de bits
:

  • : #[ExpectedValues(values: [1,2,3])]





  • : #[ExpectedValues(values: [‘red’, ‘black’, ‘green’])]





  • : #[ExpectedValues(values: [COUNT_NORMAL, COUNT_RECURSIVE])]





  • : #[ExpectedValues(values: [Code::OK, Code::ERROR])]









:

  • #[ExpectedValues(values: [1,2,3])]



    , .

  • #[ExpectedValues(flags: [1, 2, 3])]



    , , 1 | 3



    .

  • #[ExpectedValues(valuesFromClass: MyClass::class)]



    , `MyClass



    `.

  • #[ExpectedValues(flagsFromClass: ExpectedValues::class)]



    , `MyClass`.







Otro ejemplo # [ExpectedValues]



Busquemos un ayudante response()



de Laravel. Toma el código de estado HTTP como segundo parámetro.



Hay dos problemas

  • Sin autocompletado con posibles códigos

  • Sin validación de valor en el editor









Arreglemos esto agregando el atributo #[ExpectedValues(valuesFromClass: Response::class)]













# [Sin retorno]



Algunas funciones pueden detener la ejecución del script. Las funciones de marcado, como los puntos de salida con un atributo, #[NoReturn]



mejoran el análisis del flujo de control.









# [Idioma]



Este atributo se puede agregar a parámetros de cadena que esperan texto en algún idioma, como RegExp, SQL, DQL, etc.



Para los argumentos, aparecerán resaltados y opciones adicionales.












Volvamos a las nuevas funciones de PHP 8.



Declarar propiedades en el constructor



Las propiedades normales se pueden convertir en promocionadas o viceversa utilizando la solución rápida Convertir en propiedad promocionada .







PhpStorm garantiza que las propiedades solo se utilicen de la manera permitida en PHP 8:

  • Solo puede declarar propiedades en el constructor.

  • No se puede declarar en un constructor abstracto.

  • No puede declarar una propiedad variádica de esta manera.

  • La propiedad no puede ser de tipo 'Invocable'.

  • No se permiten anulaciones de propiedad.











Si la propiedad se declara de una manera nueva, pero la inicialización permanece en el cuerpo del constructor, PhpStorm ofrecerá eliminarla.







Expresión de coincidencia



La nueva expresión es similar switch



pero utiliza una comparación estricta y puede asignarse a una variable o devolverse.



PhpStorm detecta si un bloque se switch



puede reescribir match



y lo hará automáticamente con una solución rápida presionando Alt + Enter:







puede ser difícil ver el uso incorrecto de una nueva expresión, por lo que PhpStorm resaltará todos los errores.









Se encontrarán valores duplicados en las condiciones: Una







expresión coincidente con una rama y una rama predeterminada se puede reemplazar de forma segura con una expresión ternaria.







Y si solo queda la rama predeterminada, entonces la coincidencia no es necesaria en absoluto.







Finalmente, si los cuerpos son iguales en diferentes ramas, se pueden fusionar.







Operador de seguridad nula



En lugar de un montón de condiciones con una verificación de nulo, ahora puede usar una cadena de llamadas con un nuevo operador ?->



.



PhpStorm comprobará el uso correcto del operador:







Coma colgante



Ahora está permitido agregar una coma después del último argumento al llamar a funciones y en una lista de cierre use



.







Capturas no capturadas



En PHP 8, puede detectar una excepción en un bloque de captura sin una variable.







Lanzar expresión



Las excepciones ahora se pueden lanzar en funciones de flecha y operadores cortos ??



, así como en ternario ? :



.







Puede usar taquigrafía thr



y presionar tabulador; esta es una plantilla en vivo .







Constante :: clase sobre objetos



Anteriormente, para obtener el FQN de un objeto, tenía que usar una función get_class()



. En PHP 8, la llamada get_class($object)



se puede reemplazar con seguridad por $object::class



.



En realidad, al presionar Alt + Enter, se puede realizar dicho reemplazo. ::class



Se resaltará el uso incorrecto de la constante PhpStorm.







Nuevas funciones para cadenas: str_contains (), str_starts_with (), str_ends_with ()



¿Cómo verifico si una cadena contiene una palabra específica? Es la pregunta de PHP más vista en Stack Overflow. PHP 8 tiene una respuesta clara a esta pregunta: use una función str_contains()



.



PhpStorm 2020.3 todas las llamadas strpos()



que pueden ser reemplazadas por str_contains()



:







También hay nuevas str_starts_with()



, y str_ends_with()



para determinar si la subcadena específica de la línea inicial o final. PhpStorm destaca dónde las llamadas substr()



se pueden reemplazar con nuevas alternativas:







Advertencias de motor reclasificado



En PHP 8, el tipo de advertencia lanzada se ha revisado para detectar muchos errores. Es decir, en lugar de Aviso en muchos casos, habrá una excepción o un error de tipo.



En PhpStorm, debido a esto, algunas inspecciones tienen dos niveles de gravedad diferentes: para PHP 8 y ​​para versiones anteriores.







Estos son todos los más notables de PHP 8. Hay un montón de cambios más pequeños que serán visibles cuando actualice a PHP 8.





Soporte de Psalm y PHPStan



Ambos analizadores estáticos se pueden usar en PhpStorm 2020.3 para resaltar problemas directamente en el editor.







Si se agregan PHPStan o Psalm como dependencias en composer.json



, habrá un icono de llave inglesa junto a ellos que abre la configuración de la herramienta.







Desde allí, puede ir a la configuración de inspección y activar el resaltado en el editor. Esto se hace seleccionando la inspección apropiada en PHP | Herramientas de calidad en Configuración / Preferencias | Editor | Inspecciones .



️ Es mejor encender solo uno de los instrumentos, en lugar de ambos al mismo tiempo.







Aquí también puede especificar la ruta al archivo de configuración y configurar los argumentos de la línea de comando.



️ PHPStan puede funcionar sin un archivo de configuración, pero Psalm lo requiere. Si hay psalm.xml



o en el directorio raíz phpstan.neon



, PhpStorm los extraerá automáticamente.



Cuando todo esté configurado, abra cualquier archivo y verá un resaltado de los analizadores estáticos. Puede haber una pequeña demora antes de que aparezca la luz de fondo.







Anotaciones



Todas las anotaciones de salmos @psalm-*



ahora están resaltadas correctamente en el editor. Pero, en general, ahora puede eliminar de forma segura el prefijo @psalm-



de las etiquetas, es decir @psalm-return



-> @return



y @psalm-param



-> @param



.







Soporte de tipo



Agregamos soporte para algunos tipos de Salmos y, en base a la información de las etiquetas, mejoramos nuestra inferencia de tipos. Esto hizo que las comprobaciones, la generación de código y el autocompletado fueran más precisos.



Pseudo-tipos Se

admiten los pseudo-tipos de Salmo, como escalares, numéricos, etc.







Constantes en tipos

Soporta concatenación constante e indicación a través *



de etiquetasparam y var...







Typehints para matrices También se admiten

descripciones de matricesarray<array-key, Type>



, incluidas las anidadas.







Genéricos y @tempate El

soporte genérico es una función para usuarios avanzados que no tiene una especificación correcta completa y muchos casos extremos . Sin embargo, decidimos implementar soporte básico para @template



la sintaxis basada en Salmos para ver cómo se usará.



Hasta ahora, solo se admite el caso más primitivo, cuando la función devuelve uno de sus parámetros.







Este soporte genérico es muy básico y experimental. Queremos entender cómo se utilizará y qué se debe implementar primero. Nos encantaría saber de usted, especialmente en forma de casos de uso reales en nuestro rastreador .


Xdebug 3



El popular depurador de PHP se ha actualizado para que sea mucho más rápido y fácil de configurar. Lea más sobre Xdebug 3 en la guía de actualización .



Para configurar Xdebug 3, una opción xdebug.mode ahora es suficiente (como esta XDEBUG_MODE=debug



).



Además, se ha cambiado el puerto Xdebug predeterminado: en lugar de 9000



ahora 9003



. Para simplificar la migración, PhpStorm escucha en ambos puertos de forma predeterminada. La configuración del puerto y otras opciones para Xdebug se encuentran en Preferencias / Configuración | Idiomas y marcos | PHP | Depurar .









Mejoras en el depurador



Las capacidades de depuración en PhpStorm se han ampliado con dos nuevas funciones.



Sugerencias interactivas

Ahora, en modo de depuración, puede expandir la salida de variables para ver todos los campos. También puede cambiar los valores allí mismo.







Relojes en línea

En versiones anteriores, podía agregar una variable o expresión a la lista de observación y observar el cambio de valor paso a paso.



En PhpStorm 2020.3, puede agregar relojes directamente en el contexto, y se mostrarán junto al código.



Haga clic en Agregar como reloj en línea en la ventana emergente de la sugerencia.





O haga clic en Agregar reloj en línea en el menú contextual del editor.





O seleccione la variable y seleccione Agregar reloj en línea en el menú contextual .





Resaltado y cambio de nombre de variables en Twig



Seleccione una variable o coloque el cursor sobre ella y se resaltarán todos sus usos en la plantilla. Y para cambiar el nombre de todas las apariciones, presione Mayús + F6.









Co-desarrollo - Code With Me



PhpStorm 2020.3 viene con el complemento Code With Me , el nuevo desarrollo colaborativo JetBrains y la nueva herramienta de programación de pares. Con él, puede compartir un proyecto abierto con otros usuarios y trabajar juntos en él en tiempo real. Lea más sobre Code With Me en estas publicaciones .









Cliente HTTP



Integrando Guzzle con HTTP Client en PhpStorm



Guzzle es uno de los clientes HTTP más populares para PHP. Imagine que en algún lugar del código hay una solicitud HTTP y desea probarla sin ejecutar el código en sí. Anteriormente, tendría que copiar todos los parámetros manualmente.



PhpStorm 2020.3 le permite convertir solicitudes simples de Guzzle a archivos .http. Si la solicitud es compatible, aparecerá un icono junto a ella. Al hacer clic en él, abrirá un nuevo archivo borrador con la URL correcta, los parámetros de solicitud, los métodos, los encabezados y el cuerpo.







Ahora, desde el editor, la consulta puede ejecutarse y manipularse, y luego guardarse como un archivo http en el proyecto.



Más sobre el cliente HTTP en la revisión del video .


Copiar la solicitud HTTP a cURL



Para exportar la solicitud HTTP a una cadena cURL, presione Alt + Entrar en la solicitud en el editor y seleccione Convertir a cURL y copiar al portapapeles . Ahora se puede pegar en la terminal, la documentación o cualquier herramienta de prueba de API.









Editor



Mejoras para Markdown



Puede usar la sintaxis Mermaid.js en archivos de rebajas para describir tablas y gráficos . PhpStorm ahora puede generar vistas previas para ellos directamente en el editor. Incluido en Preferencias / Configuración | Idiomas y marcos | Markdown .







Ahora también es posible reformatear el contenido de los archivos .md de acuerdo con los estilos populares. Hecho presionando ⌘⌥L / Ctrl + Alt + L.



Configurable en Preferencias / Configuración | Editor | Estilo de código | Markdown .







Finalmente, si hace clic en el botón Vista previa de desplazamiento automático en la esquina superior derecha del editor, el desplazamiento de la vista previa y el texto se sincronizarán.



Revisión ortográfica y gramatical mejorada



Los errores tipográficos y gramaticales ahora se pueden corregir mucho más rápido:

  • Primero, aparecerá una explicación del error en una ventana emergente.

  • Y si presiona Alt + Enter en el texto resaltado, las opciones de reemplazo se ofrecerán en la parte superior y no se ocultarán en un subelemento, como antes.









Editor dividido arrastrando y soltando



Para abrir varios archivos uno al lado del otro, simplemente arrastre la pestaña a la esquina deseada de la pantalla.







Hay otra forma de abrir un archivo en modo dividido: Shift + Enter.

Se puede hacer clic en la combinación en el archivo seleccionado en la vista Proyecto o en los resultados de búsqueda de archivos.







Pestaña de vista previa



Si necesita ver rápidamente los archivos, ahora no es necesario abrir cada uno en una pestaña separada. Puede utilizar la nueva pestaña Vista previa .



Para habilitarlo, haga clic en el engranaje en la vista Proyecto y seleccione Habilitar pestaña Vista previa y Abrir archivos con un solo clic .







También puede ver archivos presionando la barra espaciadora en la vista Proyecto sin abrirlos.









IDE



Mejoras para la búsqueda en todas partes





Los resultados están agrupados por relevancia:





puede realizar operaciones matemáticas simples sin abrir la calculadora de Google :





puede buscar por historial de Git:





Cambio automático a tema claro u oscuro



En Preferencias / Configuración | Apariencia y comportamiento | Apariencia | Tema seleccione Sincronizar con el sistema operativo .







Nuevo conjunto de teclas de acceso rápido para macOS



Un diseño alternativo de atajos de teclado para macOS minimiza el uso de teclas de función para que no tenga que estirar la mano por todo el teclado al realizar acciones básicas. Por ejemplo, en lugar de Fn + Shift + F6, la refactorización Rename usa ⌥ + ⌘ + R.







Palabras en lugar de iconos para teclas de acceso rápido de macOS



Puede hacer que aparezcan las palabras Alt, Cmd, etc. en lugar de iconos como ⌘ . Habilitado



en la sección Registro mediante la opción ide.macos.disable.native.shortcut.symbols . Para acceder al registro, use Buscar acción Cmd + Shift + A y escriba Registro allí .



Configure PhpStorm como aplicación predeterminada para diferentes archivos



Las preferencias | Configuración / Editor / Tipos de archivo haga clic en Asociar tipos de archivo con PhpStorm… . En el cuadro de diálogo, seleccione las extensiones de archivo y se abrirán en PhpStorm.



Se requiere reiniciar en macOS.







Las plantillas pueden generar varios archivos



Puede generar simultáneamente varios archivos a la vez, por ejemplo, un esqueleto para un módulo o una vista de controlador combinada.



En Preferencias / Configuración | Editor | Haga clic en Plantillas de archivo y código para crear una nueva plantilla y luego haga clic en el icono Crear archivo de plantilla secundaria .



Se pueden utilizar variables de tipo en el campo Nombre de archivo ${NAME}



.







Y aquí hay un ejemplo de cómo generar un controlador y una plantilla en Symfony:









Soporte de escenario Git



Puede habilitarlo marcando la casilla de verificación Habilitar área de ensayo en Preferencias / Configuración | Control de versiones | Git .



En la ventana de la herramienta Confirmar (Cmd + 0 / Alt + 0), aparecerán dos grupos de archivos: en etapas y sin etapas.



Para agregar un archivo en etapas , haga clic en el signo + junto a él.







O puede seleccionar líneas específicas y agregarlas con un icono en el editor. En este caso, puede confirmar algunos de los cambios del archivo y continuar trabajando en el resto.









Herramientas DB



PhpStorm incluye funciones de DataGrip listas para usar , que se tratan en la descripción general de la versión DataGrip 2020.3 de nuestros colegas.



SQL para MongoDB



Ahora puede usar consultas SQL contra MongoDB. PhpStorm 2020.3 soportes SELECT-



consultas JOIN



, WHERE



, GROUP BY



, HAVING



, ORDER BY



, LIMIT



,OFFSET



y todas las características de MongoDB aparte mapa, reducir, filtrar y permiten. Lea más en la publicación del blog .







Web



Como siempre, PhpStorm incluye todas las actualizaciones de WebStorm 2020.3 . Lo más notable es el soporte para Tailwind CSS.



Tailwind CSS



PhpStorm complementa las clases Tailwind en archivos HTML y después de la directiva @apply. También proporcionará finalización de pseudoclase.



viento de cola-completar-después-aplicar



Si pasa el cursor sobre una clase en archivos HTML y CSS, se muestra una vista previa del CSS resultante. La vista previa también está disponible durante la finalización del código, en la ventana emergente de documentación F1 / Ctrl + Q.



finalización-viento-de-cola-para-variantes-de-pseudo-clase



PhpStorm admite personalizaciones de tailwind.config.js. Por ejemplo, si define un tema con nuevos colores, en la ventana emergente de autocompletar se crearán clases con el nombre del color personalizado.



tailwind-personalización-soporte








Puede descargar PhpStorm 2020.3 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. Estaremos encantados de tener preguntas, deseos, informes de errores y pensamientos en los comentarios.



All Articles