Novedades de ReSharper C++ 2023.2

ReSharper C++ 2023.2 introduce la refactorización Safe Delete para permitirle eliminar símbolos del código fuente de forma segura. Para los proyectos C++ modernos, ahora se admiten varias funcionalidades nuevas de C++20 y C++23, incluidos los módulos de la biblioteca estándar C++23. Esta versión también incluye el AI Assistant de ReSharper, diseñado específicamente para ayudarle con las tareas de programación.

Descargar

Prueba gratuita de 30 días disponible

AI Assistant Acceso limitado

AI Assistant no se incluye con ReSharper y debe instalarse por separado. Por el momento, existe una lista de espera para acceder a la funcionalidad de AI Assistant.

Obtenga más información sobre AI Assistant y cómo instalarlo mediante Toolbox App o el instalador de dotUltimate en nuestra ayuda web.

ReSharper C++ 2023.2 incorpora el AI Assistant de ReSharper: un chat basado en IA diseñado específicamente para responder a preguntas sobre programación y ayudarle con la resolución de problemas, la refactorización, la documentación y otros flujos de trabajo de desarrollo.

El AI Assistant de ReSharper tiene en cuenta el lenguaje y las tecnologías utilizadas en su proyecto. Este conocimiento del contexto adapta sus respuestas desde el primer momento, para ahorrarle así tiempo y esfuerzo.

No dude en incluir partes del código fuente en sus consultas. ReSharper detectará el código que ha enviado o pegado en el chat y le dará el formato adecuado, mientras que el modelo de IA le explicará la lógica que hay detrás del código y le ayudará a refactorizarlo, a encontrar problemas o a documentarlo.

Compatibilidad con C++23

La instrucción if consteval es una nueva funcionalidad de evaluación de constantes en C++23 que desarrolla aún más la idea de consteval y std::is_constant_evaluated() de C++20. Si la evaluación de la instrucción if consteval tiene lugar durante la evaluación de una constante, se ejecuta la siguiente instrucción compuesta. En caso contrario, se ejecuta la rama else.

ReSharper C++ incorpora compatibilidad con if consteval e incluye un conjunto de inspecciones relacionadas:

  • consteval if es siempre constante.
  • std::is_constant_evaluated siempre evalúa a una constante.
  • if puede sustituirse por if consteval.

ReSharper C++ ahora es compatible con los módulos con nombre std y std.compat introducidos en la biblioteca estándar C++23. Si utiliza Visual Studio 17.6 o posterior, ya puede usar import std o import std.compat para importar toda la biblioteca estándar en lugar de utilizar un encabezado precompilado o incluir encabezados específicos de la biblioteca estándar.

Antes de C++23, todos los operadores debían ser funciones miembro no estáticas. Los operadores de llamada, sin embargo, se utilizan a menudo con objetos de función sin miembros, y permitir que los operadores sean estáticos en este caso puede dar lugar a un código más eficiente. C++23 permite que tanto operator() como operator[] sean estáticos.

Compatibilidad con C++20

Hemos trabajado duro para pulir la compatibilidad con módulos C++20, solucionando varios problemas secundarios en proyectos reales que utilizan módulos. Al procesar módulos internamente, ReSharper C++ implementa ahora el descarte de declaraciones que no son accesibles para otras declaraciones, lo que mejora significativamente el rendimiento en módulos que incluyen muchos encabezados en el fragmento de módulo global.

Además, hemos implementado varios cambios para dar un mejor soporte a los módulos en los proyectos CMake. ReSharper C++ reconoce ahora los archivos .cppm como interfaces de módulos e incluye compatibilidad experimental con módulos ubicados fuera de la carpeta del proyecto.

El nuevo atributo [[no_unique_address]] de C++20 indica que no es necesaria una dirección única para un miembro de datos no estático de una clase, lo que permite al compilador disponer los miembros de la clase de una forma más eficiente. ReSharper C++ ahora tiene en cuenta [[no_unique_address]] al calcular el tamaño de un objeto.

ReSharper C++ 2023.2 también implementa el informe de defectos C++20 recientemente aceptado que permite la inicialización de una matriz char o unsigned char con un literal de cadena UTF-8.

Refactorización Safe Delete

ReSharper C++ introduce la refactorización Safe Delete para permitirle eliminar símbolos de su código fuente de forma segura. Esta refactorización está disponible para clases, funciones, variables, enumeradores, espacios de nombres e incluso conceptos.

Para invocar la refactorización, sitúe el signo de intercalación sobre el símbolo que desee eliminar y pulse Alt+Supr, o seleccione Safe Delete en el menú Refactor This.

Antes de eliminar un símbolo, ReSharper C++ busca sus usos y le permite previsualizar los cambios en el código fuente, para que pueda asegurarse de que todas las eliminaciones son intencionadas. Si intenta eliminar una entidad compleja como una clase o un espacio de nombres, ReSharper C++ comprobará recursivamente los usos de todos sus miembros.

Unreal Engine

Esta versión aporta mejoras de rendimiento para la indexación de Blueprints. La primera vez que abre un proyecto, ReSharper C++ indexa todos sus activos Blueprint para potenciar funciones como Find Usages y mostrar los valores de los datos serializados directamente en el editor de texto.

Anteriormente, ReSharper C++ indexaba estos activos con la misma prioridad que su código C++, lo que significaba que se tardaba más en tener el proyecto listo para ponerse en marcha. ReSharper C++ 2023.2 indexará activos en segundo plano después de indexar su código C++ sin interferir en su trabajo.

Hemos mejorado la finalización inteligente para tipos envolventes con semántica de asignación estándar. Por ejemplo, al asignar a una variable del tipo TEnumAsByte, la finalización sugerirá enumeradores del tipo de enumeración subyacente.

Para proyectos Unreal Engine 5.1, hemos añadido la compatibilidad con la macro UE_INLINE_GENERATED_CPP_BY_NAME, que le permite integrar archivos generados en su módulo para mejorar el tiempo de compilación.

Asistencia a la codificación

Con la mejora de la finalización para código dependiente, ahora obtendrá elementos de finalización cuando el tipo esté restringido por un concepto o un rasgo. ReSharper C++ tiene ahora en cuenta los rasgos de tipo estándar std::is_same/std::is_base_of, sus alias de valor _v, los correspondientes conceptos std::same_as/std::derived_from y el rasgo TIsame de Unreal Engine.

Para obtener más sugerencias útiles de finalización de código, ReSharper C++ ahora también extrae los requisitos de tipo y valor de las cláusulas requires, if constexpr y SFINAE.

Hay dos nuevas acciones contextuales complementarias que le ayudarán a trasladar una restricción de parámetro de plantilla a la cláusula requires y a convertir una cláusula requires en una restricción de parámetro de plantilla.

Si tiene una llamada recursiva, ReSharper C++ la marcará en el medianil, haciéndola más visible.

La lista de finalización de código ahora filtra los identificadores reservados y los sugiere solo después de _. Esto significa que ya no tendrá que desplazarse por las sugerencias de las bibliotecas estándar a menos que las necesite.

ReSharper C++ 2023.1 introdujo el resaltado y formateado adecuados para la sustitución de macros en la ventana emergente Quick Documentation y las descripciones emergentes al pasar el ratón por encima. En la versión 2023.2, estas mejoras también funcionarán con las definiciones de macros y Parameter Info en la finalización de código.

Hemos mejorado el motor de evaluación para que admita la inicialización agregada de matrices constexpr.

Hemos mejorado la compatibilidad con los compiladores GCC y Clang y las bibliotecas estándar libc++/libstdc++. Esto incluye compatibilidad con más builtins como __integer_pack, __is_convertible/__is_nothrow_convertible, y actualizaciones para los admitidos anteriormente.

Cuando especifique la dirección del parámetro con el atributo [in], [in,out] o [out] del comando param de Doxygen, las descripciones emergentes ahora los obtienen de su comentario.

Análisis del código

ReSharper C++ 2023.2 añade una nueva inspección que detecta operadores de desreferenciación y operadores addres-of. Le ofrece varios arreglos rápidos para simplificar el acceso de los miembros y eliminar los operadores redundantes.

Otra nueva inspección destaca los argumentos de plantilla redundantes que coinciden con el argumento de plantilla predeterminado correspondiente y pueden omitirse.

Una nueva inspección de compatibilidad le advierte sobre las declaraciones de avance de enums estilo C sin un tipo subyacente, que están prohibidas por el estándar C++ pero aceptadas por MSVC, lo que posiblemente dé lugar a código no portable.

ReSharper C++ resalta ahora las directivas del preprocesador de diagnóstico #error y #warning según su nivel de gravedad.

También hemos actualizado el binario integrado clang-tidy a Clang 16, para que disponga de nuevas comprobaciones y arreglos.

MSVC puede utilizar el preprocesador tradicional o el nuevo preprocesador conforme al estándar en función del valor del argumento del compilador /Zc:preprocessor. ReSharper C++ lee ahora el valor de este argumento de las propiedades del proyecto y ajusta en consecuencia el comportamiento del preprocesador integrado.

Navegación

ReSharper C++ 2023.2 aporta varias mejoras a Go to declaration para una navegación por el código más coherente y directa sin pasos adicionales:

  • Cuando se invoca sobre un nombre de clase en una llamada a un constructor, Go to declaration navega ahora al constructor en lugar de a la clase contenedora.
  • Go to declaration ahora navega a la primera typedef o declaración de alias de tipo en lugar de mostrar el menú con todas las declaraciones.
  • Go to declaration en un nombre de módulo salta entre las unidades de interfaz y de implementación del mismo módulo.
  • Go to declaration en una carpeta en una ruta #include abre la carpeta.

Además, Type of symbol está ahora disponible en los símbolos no declaradores. El funcionamiento en este caso es similar al de Go to declaration.

Ayuda a la escritura y al formato

Al generar comentarios de documentación, ReSharper C++ ajustará ahora la plantilla de documentación según el estilo de comentario del editor. Para /**, la ayuda a la escritura generará el comentario en el estilo /** */, y para ///, el comentario será en el estilo ///.

Esta versión aporta varias mejoras al formato de los miembros del campo de bits. Las opciones para alinear inicializadores y nombres de declaración en columnas ahora admiten campos de bits. También hay dos nuevos ajustes de formato para los espacios antes y después de los dos puntos en las declaraciones de campos de bits y para la alineación de los tamaños de los campos de bits en las columnas.

Una nueva opción de ayuda a la escritura le permite desactivar la generación de comentarios de documentación para evitar conflictos con el generador integrado de Visual Studio (ReSharper | Options | Environment | Editor | Behavior | C++, C, HLSL | Generate documentation comments).

También hemos actualizado el binario clang-format incluido y arreglado el motor clang-format para evitar que elimine la nueva línea al final de un archivo.

Eche un vistazo a las Novedades en ReSharper para conocer el resto de los cambios introducidos en esta versión. Por ejemplo, ReSharper introduce el depurador predictivo, que prevé todos los posibles estados desencadenados por la ejecución de un programa sin tener que ejecutarlo realmente.

Descargar

Prueba gratuita de 30 días disponible