Novedades de ReSharper 2022.2

ReSharper 2022.2 es compatible con las funcionalidades de C# 11, como los miembros obligatorios, los operadores checked definidos por el usuario, las cadenas sin procesar y los patrones list. El análisis de la solución completa ha optimizado mucho el consumo de memoria. Además, esta versión también incluye Virtual Formatter, que le permite ver el código en su formato preferido sin reformatear el código fuente en el disco, y una herramienta de limpieza de disco para eliminar los archivos temporales generados por ReSharper mientras trabaja en su código.

Descargar

Prueba gratuita de 30 días disponible

C# 11

Esta versión es compatible con varias funcionalidades más de la versión preliminar de C# 11.

Miembros requeridos

En C# 11, ahora los tipos class, struct y record pueden declarar una lista de miembros requeridos. Esta es la lista de todas las propiedades y campos que se consideran necesarios y deben inicializarse a la vez que la instancia de un tipo. Los tipos heredan estas listas de sus tipos base de forma automática, por lo que el código duplicado y repetitivo se elimina sin problemas.

Además de conocer la palabra clave required para los miembros dentro de un tipo class, struct o record, ReSharper también es compatible con la palabra clave required:

  • Hay una palabra clave required en la finalización de código.
  • La mayoría de los errores y advertencias del compilador están disponibles.
  • Se ha añadido el modificador required a Modifiers order en la página ReSharper | Options | Code Editing | C# | Syntax Style.

Hemos añadido Add initializer for required members, una nueva solución rápida para los casos en los que se ha creado un objeto de tipo, pero no se han inicializado los miembros todavía. Esta genera de forma automática todos los miembros «required» que faltan para el objeto; solo tiene que rellenar los valores de los miembros con los datos correspondientes.

Operadores checked definidos por el usuario

Los operadores checked definidos por el usuario ayudan a los desarrolladores a crear operadores definidos por el usuario que operan en tipos donde el desbordamiento aritmético es un concepto válido. ReSharper muestra todos los errores y advertencias del compilador. Para ser totalmente compatible con los operadores checked definidos por el usuario, ReSharper tiene un par de inspecciones más y una acción contextual.

Hemos actualizado la inspección Unchecked/checked context is redundant para tener en cuenta los operadores checked cuando se utilizan en este contexto.

Si tiene un conjunto de operadores definidos por el usuario y algunos de ellos ya tienen una versión checked, ReSharper le ayudará a propagar los operadores checked a todo el conjunto. Una nueva inspección llamada The operator does not have a matching checked operator while other operators do le informará de los operadores que no tienen todavía un operador checked y le propondrá una solución rápida para generar las versiones checked de forma automática.

Si todavía no ha utilizado operadores checked en su código base, pero quiere empezar a utilizarlos, la nueva acción contextual Create matching checked operator le resultará muy útil. Está disponible en todos los operadores definidos por el usuario y genera una versión checked de un operador directamente desde el menú que se abre con Alt+Intro.

Cadenas sin formato

C# 11 mejora la capacidad de incrustar otros lenguajes o formatos de texto en el código C# gracias al concepto de cadenas «sin formato».

ReSharper es compatible a nivel básico con cadenas «sin formato», entre las que se incluyen errores de compilación, y análisis correcto y resaltado de colores para la sintaxis """, pares de comillas dobles y marcadores de posición dentro de cadenas interpoladas (sintaxis {{...}}).

Patrones de lista

C# 11 sigue ampliando los patrones de lista disponibles en el lenguaje. En esta ocasión, C# permite hacer coincidir estructuras tipo lista, como vectores, cadenas y colecciones tipo List<T>.

ReSharper 2022.2 es totalmente compatible con los patrones de lista, con comprobación de errores, finalización de código y análisis del código. Todavía estamos trabajando para añadir inspecciones de código para sugerir el uso de los patrones de lista en el código existente y acciones adicionales de refactorización.

Más funcionalidades de C# 11

Más funcionalidades de C# 11

  • ReSharper 2022.2 es totalmente compatible con el nuevo operador desplazamiento a la derecha sin signo (>>>) e incluye compatibilidad con la sobrecarga del operador definido por el usuario >>>.
  • ReSharper 2022.2 es compatible con la simplificación del uso de valores Span<char> como reemplazo de las instancias de cadena, ya que en C# 11 es posible comparar directamente las constantes de cadena con los valores de tipo Span<char> y ReadOnlySpan<char>.

Optimizaciones del análisis de la solución completa

En esta versión, hemos optimizado en gran medida el uso de memoria de ReSharper con el modo Análisis de la solución completa activado, tanto en términos de tráfico de memoria (número de asignaciones de memoria) como en términos de consumo de memoria.

El motor Análisis de la solución completa utiliza la memoria para almacenar la lista de problemas en la solución y para almacenar la información de uso de tipos/miembros para realizar informes de uso de toda la solución (inspecciones de código tales como «el miembro público nunca se utiliza»). Los datos de uso están «activos», lo que significa que deben actualizarse constantemente al editar el código y no pueden descargarse en el disco. Esto puede consumir una cantidad considerable de memoria si la solución contiene muchos tipos y miembros de tipo. Hemos revisado los datos almacenados en la memoria y hemos encontrado patrones que nos han permitido desduplicar/normalizar los datos. También hemos utilizado tipos de colección especializados para reducir aún más el espacio de trabajo. Estas optimizaciones han mejorado el consumo de memoria de 5 a 10 veces y han acelerado la carga del Análisis de la solución completa.

Análisis de código

Declaraciones de nivel superior

.NET 6 ha introducido nuevas plantillas de proyecto con el uso de declaraciones de C# 9 de nivel superior. Las declaraciones de nivel superior simplifican la declaración de una clase Program o del método public static void Main(string[] args), aunque a veces es necesario o preferible utilizar la declaración explícita class Program. ReSharper 2022.2 incluye la nueva acción contextual To explicit 'Program' class para ejecutar una transformación al estilo antiguo.

Además, si ya tiene una clase de inicio Program y desea migrar a declaraciones de nivel superior, podrá hacerlo con la nueva acción contextual Convert to top-level code.

Actualizaciones en la compatibilidad de INotifyPropertyChanged

En esta versión, hemos modificado la compatibilidad con INotifyPropertyChanged. Ya no depende de anotaciones externas para detectar las API comunes INotifyPropertyChanged, lo que nos ha permitido ser compatibles con más marcos MVVM y clases base INotifyPropertyChanged de forma automática. Ahora utilizamos un método SetField cuya sintaxis es más concisa para las notificaciones INotifyPropertyChanged.

Ahora también puede añadir notificaciones property change para todas las propiedades del tipo o del archivo.

Refactorizaciones en el menú al que se accede con Alt+Intro

Para aumentar la visibilidad de las refactorizaciones, hemos revisado las refactorizaciones más utilizadas y hemos introducido acciones contextuales relacionadas en el menú que se abre con Alt+Intro que dependen del contexto actual.

Hemos añadido la acción contextual Extract method al acceder al menú que se abre con Alt+Intro en un trozo de código seleccionado.

Ahora, las refactorizaciones Change Signature, Transform Parameters, Convert to extension method y Convert Property To Method están disponibles como acciones contextuales para las firmas de los miembros.

Más sugerencias de uso de un operador nameof

ReSharper 2022.2 reconoce los registros de DependencyProperty en los proyectos WPF y sugiere el uso de un operador nameof para capturar el nombre de la propiedad CLR correspondiente. Las plantillas activas integradas también se han actualizado para emitir nameof en lugar de literales de cadena.

ReSharper no suele reconocer en el código el significado especial de un literal de cadena concreto que se utiliza para especificar el nombre de alguna entidad de código, como un miembro o un nombre de tipo. Para estos casos, hemos introducido la nueva acción contextual Capture element name para los literales de cadena con identificadores que pueden hacer referencia a una entidad de código en el contexto que contiene el literal de cadena.

Buscar y sustituir estructural

Las correcciones rápidas que provienen de los patrones Structural Search And Replace (SSR) pueden aplicarse en el ámbito de un archivo, una carpeta, un proyecto o una solución completa. Afecta a los patrones personalizados del usuario creados en la página ReSharper | Options | Code Inspection | Custom Patterns, a las inspecciones de código integradas en ReSharper y a las correspondientes correcciones basadas en el SSR.

Otros

Ahora, ReSharper 2022.2 detecta algunos patrones de asignación en el código y le sugiere un código C# más idiomático con concordancia de patrones.

ReSharper 2022.2 puede reemplazar algunos patrones is en las expresiones ?: por la versión más concisa de as en la expresión ??, con lo que se elimina de forma efectiva una variable temporal.

Formateo virtual

Hemos incluido Virtual Formatter, una manera de ver el código con el formato deseado sin tener que reformatear el código fuente en el disco. Por ejemplo, ahora puede alinear de forma virtual los parámetros en columnas o aumentar las sangrías. El objetivo de esta funcionalidad es mejorar la legibilidad y el mantenimiento del código, y hacerlo más accesible para los desarrolladores con discapacidades visuales y neurodivergentes. Para activar Virtual Formatter con ajustes predefinidos, vaya a ReSharper | Options | Environment | Inlay Hints | General. Para adaptar aún más el formato a las especificaciones exactas, marque la casilla Use dedicated Virtual Formatter style settings y haga clic en C#.

Limpieza del disco

Ahora puede eliminar los archivos temporales generados por ReSharper mientras trabaja en su código. Hemos añadido una nueva página en la sección Options, donde puede:

  • Observar un conjunto de rutas y archivos predeterminados que ReSharper puede eliminar.
  • Añadir una plantilla de ruta personalizada para los archivos que desee eliminar.
  • Especificar después de cuántos días ReSharper debe tratar los archivos como obsoletos para cada plantilla de ruta.
  • Comprobar cuánto espacio ocupan los archivos correspondientes a cada plantilla de ruta.
  • Configurar la limpieza automática de archivos obsoletos, que se ejecutará periódicamente (el valor por defecto es 1 día).
  • Ejecutar la limpieza de forma manual para diferentes ámbitos.

Compatibilidad con JavaScript y TypeScript

Como muchos de ustedes habrán notado, la compatibilidad con JavaScript y TypeScript en ReSharper está obsoleta y es lenta. En la implementación actual, es difícil seguir los cambios del lenguaje TS y que las nuevas versiones sean compatibles rápidamente, por lo que estamos buscando la mejor forma de hacerlo. Después de discutirlo internamente largo y tendido, hemos decidido dejar en espera la compatibilidad actual con JS y TS. Por ello, hemos deshabilitado la compatibilidad con TS/JS de forma predeterminada en esta versión. Si quere seguir utilizándola, puede volver a habilitarla aquí: ReSharper | Options | Environment | Products & Features | casilla de verificación «JavaScript and TypeScript».

Unreal Engine

ReSharper C++ introduce consejos insertados específicos de Blueprint y le permite ver el panorama general tras su código:

  • Tenga en cuenta las clases Blueprint derivadas y consulte la lista de todos los herederos.
  • Detecte que una UFunction tiene implementaciones en Blueprints y busque todos esos casos.
  • Compruebe rápidamente el estado de una UProperty, incluyendo si ha sido anulada y qué valor está establecido en el archivo Blueprint.

También hemos agregado inspecciones para avisarle si hay incoherencias entre los especificadores de función específicos de Blueprint utilizados en el código y los propios Blueprints.

Mejora de la compatibilidad con las llamadas nativas del sistema dotUltimate

Ahora dotTrace ofrece más información sobre las llamadas nativas del sistema en el Timeline Call Tree, incluidas las llamadas del kernel de Windows (ntoskrnl.exe) o las llamadas de los controladores de dispositivos (*.sys), entre otras.

Respetar la configuración de StyleCop.Analyzers

ReSharper puede detectar si el paquete StyleCop.Analyzers está referenciado por un proyecto y leer su configuración desde los archivos stylecop.json y .ruleset. Los encabezados de los archivos y la configuración de la sangría se obtienen de stylecop.json, mientras que las reglas de StyleCop se aplican de acuerdo con la configuración del archivo .ruleset activo.

Agrupaciones ReadyToRun y NGen

  • Se ha mejorado la forma en que se presentan las agrupaciones ReadyToRun (R2R) y NGen en Assembly Explorer. Ahora se muestra un pequeño símbolo de procesador y las etiquetas ngen o R2R junto al nombre de cada agrupación.
  • El árbol Metadata tiene el encabezado ReadyToRun.
Descargar

Prueba gratuita de 30 días disponible