Vistas previas de la sustitución de macros

Ahora, al pasar el ratón por encima de una macro, puede ver la expansión de esta en la descripción emergente, con el resaltado de sintaxis completo y el formato de código adecuado. Puede seguir utilizando la acción contextual Substitute macro call para expandir la macro directamente en el editor, pero la vista previa instantánea facilita el trabajo con macros.

La ventana emergente Quick Documentation (Ctrl+Mayús+F1) también permite hacer clic en cualquier entidad de la vista previa de sustitución y consultar la documentación. Si la expansión de la macro contiene un identificador desconocido, se resaltará en la vista previa de sustitución, tanto en la descripción emergente como en la ventana emergente Quick Documentation para que pueda detectar problemas.

Módulos C++20

ReSharper C++ 2022.3 introdujo la compatibilidad inicial con módulos C++20. En esta actualización, hemos estado puliendo nuestra implementación para manejar más casos y soportar mejor los proyectos del mundo real que hacen uso de estos. También hemos ampliado la lista de funcionalidades de ReSharper C++ que le ayudan a escribir código modularizado.

Ahora, Find usages le permite encontrar todas las ubicaciones a las que se importa un módulo determinado.

La refactorización Rename le ayuda a renombrar módulos y particiones de módulos de forma segura, y actualiza todas las declaraciones e importaciones relevantes en su código.

La finalización de código ofrece una mejor compatibilidad con la sintaxis de módulos de C++20. Los nombres de los módulos conocidos se sugieren cuando está a punto de importar uno, y la lista de finalización también incluye las palabras clave relacionadas con el módulo cuando están permitidas.

También hemos actualizado varias funcionalidades de asistencia a la codificación para que sean compatibles con los módulos C++20. Ahora, el formateador de código y Rearrange code pueden manejar bloques de exportación y entidades exportadas. Para reordenar elementos de código, pulse Ctrl+Mayús+Alt con el cursor sobre el elemento de código o con una selección de código y, después, pulse la tecla de dirección correspondiente.

Compatibilidad con C++23

El Comité de estandarización de C++ de la ISO ha publicado hace poco el trabajo técnico sobre C++23. Con muchas funcionalidades de C++23 ya disponibles en los principales compiladores, ReSharper C++ 2023.1 le ofrece la posibilidad de probarlas.

Deducing this es una funcionalidad importante de C++23 que introduce una nueva forma de especificar funciones miembro. Ahora, puede hacer explícito el parámetro «object» con la palabra clave «this», lo que simplifica la implementación de varias expresiones de C++. Por ejemplo, ahora puede reemplazar sobrecargas de funciones idénticas que solo se diferencian por los calificadores «const» y «reference» con una sola función que deduce las categorías de tipo y valor del parámetro «object».

C++23 aporta más formas de utilizar «auto». Con auto(x) y auto{x} se puede hacer una copia del argumento como si se pasara como argumento de función por valor.

ReSharper C++ también es compatible con las siguientes actualizaciones de C++23 que simplifican la sintaxis del lenguaje existente:

  • Ahora, los paréntesis vacíos () en lambdas son opcionales en muchos casos.
  • Ahora, las declaraciones de alias están permitidas en las instrucciones «init».
  • Ahora, se permiten etiquetas al final de las instrucciones compuestas.

Unreal Engine

Ahora, puede añadir rápidamente una prueba simple o compleja de Unreal Engine con las nuevas plantillas de archivos integradas. Para ello, vaya a Solution Explorer y haga clic con el botón derecho del ratón en la carpeta del proyecto preferida para abrir el menú Add (o utilice Ctrl+Alt+Insertar).

ReSharper C++ también incluye una nueva plantilla activa UINTERFACE, que complementa las plantillas UCLASS, USTRUCT y UENUM existentes. Basta con seleccionar el elemento correspondiente en la lista de finalización de código para añadir una nueva clase de interfaz al trabajar en un proyecto de Unreal Engine.

Ahora, puede especificar las asignaciones del directorio de origen que se utilizarán para resolver las directivas #include en los archivos de sombreadores. Si tiene instalado RiderLink en el proyecto del juego o del motor, también puede cargar asignaciones de sombreadores directamente desde Unreal Engine.

Un nuevo elemento de finalización permite generar una expresión lambda en la que se espera un argumento delegado, TFunction o TFunctionRef.

Si le interesa un IDE independiente y multiplataforma para el desarrollo de Unreal Engine, considere Rider. La compatibilidad con Unreal Engine en Rider y ReSharper C++ está alineada, y puede esperar las mismas mejoras en la actualización de Rider 2023.1.

Rastreo de llamadas

Por fin, la funcionalidad Call tracking de ReSharper ha llegado a ReSharper C++. Ahora, puede ver y navegar por las cadenas de llamadas en la jerarquía de llamadas entrantes. Solo tiene que colocar el cursor en cualquier función y seleccionar Inspect | Incoming calls en el menú contextual o pulsar Ctrl+Mayús+Alt+A para invocarlo desde el menú Inspect This.

En la ventana de resultados del rastreo de llamadas, puede hacer doble clic en la entrada de la jerarquía para navegar a la llamada correspondiente en el editor o expandir cualquier nodo para comprobar sus llamadas entrantes.

Actualmente, no es posible realizar un seguimiento de las llamadas salientes.

Análisis del código

Hemos incluido una inspección que marca los parámetros de función de tipos costosos de copiar que se pasan por valor. En estos casos, ReSharper C++ sugiere pasar el parámetro por la referencia const. Por otro lado, ahora, el arreglo rápido Create function from usage preferirá pasar parámetros de tipos que son menos costosos de copiar por valor.

Las siguientes nuevas inspecciones de código le advierten sobre las posibles hediondeces del código:

  • Una inspección identifica parámetros de plantilla no utilizados y alias de tipos en un ámbito local, así como inicializadores de clases base redundantes.
  • Otra inspección marca los valores de retorno no utilizados de funciones que devuelven los códigos de error HRESULT o NTSTATUS.

Una inspección más le permite saber cuándo falla la deducción de argumentos de plantilla de clase C++17 al deducir los argumentos de plantilla, lo que le permite añadir rápidamente los argumentos requeridos con un arreglo rápido.

ReSharper C++ 2023.1 también incluye muchas mejoras para el motor de evaluación durante la compilación, como la evaluación basada en rangos para los bucles y una mejor compatibilidad con las uniones.

Refactorización

Ahora, puede acceder fácilmente a la mayoría de las refactorizaciones desde el menú Alt+Intro, además de la ventana emergente Refactor This (Ctrl+Mayús+R).

El nuevo arreglo rápido Create parameter proporciona un acceso directo cómodo a la refactorización Change signature. Si quiere añadir un nuevo parámetro a una función contenedora, solo tiene que invocar la corrección e introducir el tipo del nuevo parámetro. La refactorización actualizará todas las declaraciones y los usos de la función, y le notificará los conflictos que encuentre.

Ahora, llamar a las refactorizaciones Extract method y Change signature es más sencillo.

  • Si tiene que extraer una función de una línea, ya no tiene que seleccionar toda la línea, dado que ahora la refactorización extrae la línea actual cuando no hay ninguna selección activa.
  • Ahora, Change signature puede invocarse mientras el cursor se encuentra en cualquier lugar de la firma de la función, en lugar de solo en el nombre de la función, como ocurría antes.

Otras mejoras

Ahora, ReSharper C++ es compatible con la macro __VA_OPT__, que se introdujo en C++20 para ayudar a definir macros variádicas. Esta macro funcional especial se expande a sus argumentos cuando la lista de argumentos variables no está vacía y, en caso contrario, no se expande a nada.

Las rutas de los archivos se anteponen de forma predeterminada a las carpetas al ordenar las directivas #include. Ahora, si prefiere tener todas las directivas «include» por orden alfabético, puede desactivar la nueva opción Put files before folders.

Una nueva plantilla postfix permite hacer rápidamente una referencia const con std::as_const o AsConst en proyectos de Unreal Engine.

Los comentarios que comienzan con /* ya no se cierran de forma automática con */ de forma predeterminada. Puede habilitar la inserción automática del comentario de cierre con la nueva opción de ayuda a la escritura Insert */ after /*.

Eche un vistazo a las Novedades en ReSharper para conocer el resto de los cambios introducidos en esta versión. Por ejemplo, ahora la compatibilidad con CSS está deshabilitada de forma predeterminada.