Novedades de ReSharper 2022.3

ReSharper 2022.3 incorpora la compatibilidad básica con las últimas funciones de C# 11, como los literales UTF-8, los tipos locales de archivo, los miembros virtuales estáticos, la coincidencia de patrones en tramos y otras. Para esta versión, hemos revisado el resaltado de código, hemos introducido la detección de dependencias vulnerables para los paquetes NuGet y hemos habilitado la importación y exportación de diagramas de dependencias de tipos y proyectos en el formato GraphML. Esta versión también incluye la compatibilidad temprana con Microsoft Visual Studio que se ejecuta en ARM64.

Descargar

Prueba gratuita de 30 días disponible

C# 11

Estamos ultimando la compatibilidad básica con las funcionalidades más recientes de C# 11:

Literales UTF-8

Hemos añadido compatibilidad básica con literales UTF-8. Ahora, el análisis de código propone usar un sufijo u8 para un literal en lugar del método System.Text.Encoding.UTF8.GetBytes() o una matriz de bytes con los símbolos UTF8 adecuados. También hemos añadido una serie de advertencias y errores del compilador para los literales UTF-8.

Tipos de archivo local

La compatibilidad básica con los tipos de archivo local permite entender la nueva sintaxis, e incluye un modificador de accesibilidad de file para los tipos, y advertencias y errores del compilador con las correspondientes soluciones rápidas, como Move class to outer scope cuando se especifica el modificador file para una clase anidada. También hay una acción contextual muy útil para convertir un tipo general en uno de archivo.

Cadenas sin formato

Ahora, Rider puede convertir cadenas regulares y literales en cadenas sin formato. Esto también significa que ahora hay muchas funcionalidades para las cadenas que están disponibles para las cadenas sin formato.

Sugerencias de patrones de lista

En esta versión, hemos introducido sugerencias para utilizar la nueva sintaxis de patrón de lista de C# 11 (en lugar de las comprobaciones convencionales de la longitud de la colección con la consiguiente expresión de acceso al indexador) para comprobar los elementos correspondientes de la colección.

Miembros virtuales estáticos

A partir de C# 11, puede utilizar modificadores abstract y virtual para los miembros static de las interfaces y utilizar dichos miembros en el código genérico con parámetros de tipo limitados por esta interfaz. ReSharper se ha actualizado para manejar los miembros polimórficos de tipo static de la misma manera que se manejan los ordinarios:

  • Marcas de herencia en el medianil.
  • Navegación para los miembros de implementación o supermiembros.
  • Generación de implementaciones que faltan.
  • Las sugerencias de finalización de código después de la palabra clave override también incluyen a los miembros de la interfaz, por lo que ahora puede implementar fácilmente miembros abstractos o virtual static.

Operador de desplazamiento a la derecha sin signo (>>>)

Ahora, ReSharper reconoce el engorroso patrón de código que tienen que escribir los desarrolladores de C# para desplazarse a la derecha sin signo para los tipos de datos con signo y propone utilizar el operador de desplazamiento a la derecha sin signo (>>>) en C# 11.

Coincidencia de patrones sobre spans

Si analiza Spans de caracteres, probablemente utilice mucho el método MemoryExtensions.SequenceEqual. C# 11 incluye un atajo para este tipo de comprobación. Ahora puede, simplemente, comparar los patrones de los Spans de caracteres con los literales de cadena con las expresiones is o switch.

ReSharper propone usar las expresiones is o switch en lugar de muchas declaraciones if.

Campos ref y palabra clave scoped

A partir de C#11, se permite declarar campos ref dentro de las estructuras ref. ReSharper admite esta nueva regla sintáctica, proporciona todos los errores y advertencias del compilador, muestra la palabra clave ref en la finalización del código y permite que dichos campos se inicialicen en un constructor.

ReSharper también conoce la nueva palabra clave scoped, que puede utilizar en argumentos ref o <0>ref struct y en variables locales. La compatibilidad incluye el análisis correcto de la nueva sintaxis, la palabra clave scoped en la finalización del código y la preservación de la palabra clave scoped al generar anulaciones de métodos. También verifica la compatibilidad de los modificadores scoped y ofrece arreglos rápidos para los parámetros scoped que no coincidan en las anulaciones, las implementaciones de interfaces y las conversiones de delegados.

C# 11 y .NET 7 también han introducido cambios en las reglas de seguridad ref del lenguaje. Los cambios regulan las operaciones disponibles para las variables ref y ref struct con el fin de proporcionar seguridad ref en el código gestionado con la introducción de los campos ref. ReSharper conoce los cambios y le ayudará a encontrar las partes de su proyecto que necesitan actualizarse y anotarse con la nueva palabra clave scoped para adecuarse a los cambios al migrar a C# 11 o .NET 7.

Inyecciones de lenguaje

Con la versión 2022.3, introducimos un par de cambios en la compatibilidad con las inyecciones de lenguaje:

Las inyecciones del lenguaje ahora funcionan dentro de los literales de cadena sin formato de C# 11.

ReSharper supports the [StringSyntax] attribute from .NET 7, along with its different syntaxes for language injection and code completion.

Actualizaciones generales de C#

Marca Global imports en el medianil

Hay un nuevo icono de marca de medianil para notificar a los usuarios las importaciones implícitas de espacios de nombres en C# y los archivos Razor.

Al pulsar Alt+Intro en la línea correspondiente, verá la lista completa de importaciones implícitas y la información sobre el archivo fuente donde se encuentran las correspondientes directivas global using. Si selecciona un espacio de nombres importado, ReSharper puede navegar hasta donde está declarado, además de a las etiquetas <Using Include="Some.NameSpace" /> en el archivo de proyecto .csproj.

ReSharper también presenta las importaciones generales de _Imports.razor y permite la navegación a las definiciones de importación correspondientes.

Finalización del formato de la cadena

Con la incorporación de los tipos numéricos Int128 y UInt128 en .NET 7, hemos actualizado nuestras sugerencias de especificación de formato de finalización de código.

También hemos añadido la compatibilidad que faltaba con los tipos de fecha y hora DateOnly y TimeOnly de .NET 6, así como con el tipo numérico de coma flotante de precisión media Half introducido en .NET 5.

Transformación de patrones triviales en expresiones

A veces, después de la refactorización, las expresiones de coincidencia de patrones pueden convertirse en patrones recursivos triviales. En este punto puede que no merezca la pena utilizar la sintaxis de los patrones recursivos, por lo que ahora ReSharper puede convertir los patrones en expresiones más sencillas conservando la semántica original de la concordancia de patrones.

Consejos de finalización de código para una expresión void

A veces, al escribir después de una invocación, apenas se ven sugerencias significativas. Esto puede ocurrir si la invocación no produjo ningún valor al llamar al método que devolvía un void. Normalmente, se necesitan algunas acciones del IDE para darse cuenta de ello (volver atrás y navegar hasta la declaración del método, o pasar el ratón por encima de la invocación). En esta versión, hemos introducido el consejo void para este tipo de invocación que devuelve void para informarle de inmediato sobre el tipo resultante de la invocación. Al aceptar este elemento void, se añadirá un punto y coma después de la invocación si este falta.

Resaltado de código

Se han revisado los resaltados y los subrayados ondulados del código en Rider 2022.3. Debido a una diferencia en la lógica interna, ReSharper entraba en conflicto con los analizadores de estilo de código de Microsoft Roslyn, haciendo que mostrara resaltados superpuestos, que dibujara el mismo resaltado en diferentes puntos o que duplicara los subrayados ondulados. Se han resuelto las diferencias en la lógica que hay detrás de la mayoría de estos casos y, para las raras excepciones, los errores se acompañan con sugerencias claras sobre cómo resolver el conflicto.

Seguridad

Siempre que utilice paquetes NuGet de código abierto en sus soluciones, existe el riesgo de abrir su proyecto a vulnerabilidades de seguridad. Si bien NuGet proporciona herramientas externas para detectar tales amenazas, es infinitamente más conveniente contar una herramienta así directamente en su IDE para detectar cualquier vulnerabilidad durante el tiempo de diseño. Por ello, estamos introduciendo la detección de dependencias vulnerables en ReSharper. A partir de esta versión, las dependencias afectadas se resaltarán en los archivos .csproj y .vbproj.

Compatibilidad con Visual Studio 2022 ARM64

ReSharper puede integrarse en Visual Studio de Microsoft en dispositivos con tecnología ARM. Proporcionamos apoyo inicial para todos los flujos de trabajo de desarrollo básicos, excepto la corrección ortográfica con ReSpeller.

El instalador se ha actualizado para incluir compatibilidad con x64 y ARM64. La versión correcta se instalará automáticamente de acuerdo con la arquitectura del procesador de su máquina.

Compatibilidad con Windows ARM64

dotPeek, dotMemory, dotTrace y dotCover, así como las herramientas de línea de comandos de ReSharper, ahora son compatibles con Windows ARM64.

Decompilador

El decompilador integrado en ReSharper 2022.3 incorpora la compatibilidad con:

  • miembros static abstract y static virtual en las interfaces;
  • atributos genéricos;
  • operadores checked definidos por el usuario;
  • operador de desplazamiento a la derecha sin signo.

IL Viewer

Ahora, la ventana de herramientas IL Viewer puede descompilar código en diferentes niveles de construcciones del lenguaje C#. Hay dos niveles de C# disponibles: el nivel alto, con ciertas construcciones sintácticas simplificadas utilizando las últimas funcionalidades del lenguaje, y el nivel bajo, para los casos en los que desee saber cuál es el estado bruto de estas construcciones sintácticas.

Diagramas de dependencia

ReSharper ahora le permite guardar e importar diagramas de dependencias de tipos y proyectos en el formato GraphML, conservando la capacidad de utilizar el diagrama como mapa de código y de navegar por las dependencias rápidamente.

Dynamic Program Analysis

El análisis dinámico de programas (Dynamic Program Analysis - DPA) cuenta con nuevas inspecciones que permiten encontrar incidencias relacionadas con el uso de la base de datos, por ejemplo cuando:

  • La ejecución de comandos tarda mucho
  • Hay demasiadas conexiones a la base de datos
  • Se están ejecutando a la vez demasiados comandos de base de datos
  • Hay comandos que devuelven demasiados registros

Las nuevas inspecciones están disponibles para todas las aplicaciones que utilizan Entity Framework Core y un proveedor de datos .NET para SQL Server.

Módulos C++20

ReSharper C++ 2022.3 incorpora la compatibilidad experimental con módulos C++20. Hemos actualizado el motor del lenguaje y muchas de las funciones de ReSharper C++ para que funcionen con el nuevo modelo de compilación, para admitir tanto módulos con nombre como unidades de encabezado.

Novedades de ReSharper C++ 2022.3

Integración con Clang-format

ReSharper C++ 2022.3 ofrece integración con clang-format. Ahora puede cambiar entre el motor de formateo propio de ReSharper y el incorporado o un binario personalizado de clang-format para formatear archivos. ReSharper C++ ejecuta clang-format en un proceso por separado, lo que garantiza la plena compatibilidad con el formateador estándar del sector, así como un mejor rendimiento y una gama más amplia de opciones de formateo.

Descargar

Prueba gratuita de 30 días disponible