Novedades en ReSharper 2020.2

ReSharper 2020.2 incluye nuevas inspecciones y arreglos rápidos para C#8 y tipos de referencia anulables, la esperada limpieza de código al guardar, un ejecutor de pruebas de unidades renovado y mejoras de accesibilidad. ReSharper C++ también le lleva al siguiente nivel de desarrollo con Unreal Engine, e incluye numerosas mejoras de compatibilidad con C++/CLI, navegación y análisis de código.

Descargar

Prueba gratuita de 30 días disponible

Análisis de código

El análisis de código que podría ser nulo ahora detecta más casos y puede efectuar un seguimiento de la posibilidad de nulidad incorrecta a través de la deconstrucción y del ciclo foreach. También ofrece el arreglo rápido correspondiente.

El análisis de código ahora tiene en cuenta los atributos JetBrains.Annotations (NotNull y CanBeNull) para la API, incluso en código donde los tipos de referencia anulables están deshabilitados (#nullable disable).

También dispone de acciones contextuales para convertir foreach a LINQ y LINQ a código en IAsyncEnumerable<T> si tiene instalado el paquete System.Linq.Async NuGet para su proyecto.

Ahora es posible generar fácilmente implementaciones IEqualityComparer<T> y IComparer<T> con los arreglos rápidos correspondientes.

Ahora, el análisis de código tiene en cuenta las anotaciones del compilador (como AllowNull y DisallowNull) al verificar la nulabilidad de miembros implementados o anulados.

Cuenta con nuevas inspecciones y arreglos rápidos para hacer que las variables y los tipos de retorno sean "not nullable" si nunca han tenido o devuelto valores que acepten null.

El análisis de código ahora puede seguir las reglas dotnet_diagnostic desde el archivo .editorconfig. Especifique la gravedad de las inspecciones en el archivo .editorconfig, p. ej. dotnet_diagnostic.CS1058.severity = hint, y ReSharper mostrará las inspecciones correspondientes.

En esta versión se ha mejorado la compatibilidad con las implementaciones predeterminadas en la funcionalidad de interfaces. El medianil izquierdo del editor de código muestra que se ha implementado o anulado un método, y nuestras refactorizaciones y navegación son conscientes de esta funcionalidad del lenguaje C#.

Ahora los consejos de inserciones están disponibles en código XAML. Ofrecemos consejos para nombres de propiedades de marcado y DataContext, así como para márgenes y caracteres de relleno, lo cual resulta práctico si no desea memorizar sus órdenes.

El arreglo rápido Suppress nullable warning with ! se puede deshabilitar para una solución con el menú Alt+Enter.

Limpieza de código

Ahora puede configurar ReSharper para ejecutar la limpieza de código de forma automática al guardar un archivo. ¡Por fin!

Ya no se necesitan complementos de terceros para esta funcionalidad. Se puede habilitar desde la página de opciones ReSharper | Options | Code Editing | Code Cleanup.

Hay nuevos ámbitos más precisos para ejecutar la limpieza de código, como recently modified files (archivos modificados recientemente) y recently opened files (archivos abiertos recientemente), lo cual puede reducir significativamente el tiempo que se tarda en obtener un resultado, puesto que Code Cleanup no tiene que recorrer la solución al completo. Para un ajuste más preciso, puede especificar qué califica como "recientemente".

Guarde automáticamente los archivos una vez finalizada la limpieza de código. Esta funcionalidad se puede habilitar desde la página de opciones ReSharper | Options | Code Editing | Code Cleanup.

Se han incluido un par de mejoras para reducir el tiempo de ejecución de la limpieza de código:

  • La limpieza no ejecuta analizadores al recopilar código para limpiar, a menos que se marquen las casillas de verificación correspondientes en el perfil Cleanup. Por ejemplo, si en un perfil no se ha seleccionado la opción "Remove redundancies", los analizadores relacionados con la búsqueda de redundancias no se ejecutarán.
  • Se ejecutan simultáneamente varios arreglos de código en un archivo. Ya no comienza a resaltar de nuevo el archivo tras cada arreglo.

Pruebas de unidades

Hemos renovado por completo nuestro ejecutor de pruebas de unidades .NET Framework y .NET Core para utilizar el mismo ejecutor para ambos tiempos de ejecución que se llevan a cabo con el proceso de Visual Studio. Esto nos ayuda a resolver una gran cantidad de problemas al descubrir, ejecutar y depurar pruebas de unidades, y nos da un control total de las jerarquías de pruebas de unidades para pruebas de .NET Core.

El nuevo ejecutor de pruebas cuenta con compatibilidad integrada para:

  • MSFakes para marcos de trabajo de pruebas de unidades NUnit, xUnit, MSTest v2.
  • TypeMock Isolator para NUnit, xUnit y MSTest v2.

Una de las cosas que más llama la atención de la IU es que ahora ReSharper es compatible con el atributo DisplayName en las pruebas de .NET Core para marcos de trabajo xUnit y NUnit.

Al aplicar filtros al árbol de pruebas de unidades, por ejemplo, Passed/Failed/etc., los contadores indicarán dos números por separado: el número total de todas las pruebas, y el número de pruebas que cumplen los criterios del filtro.

El menú Navigate To cuenta con dos nuevas acciones:

  • Mostrar todas las sesiones de pruebas de unidades que incluyan esta prueba.
  • Mostrar la prueba en la ventana de herramientas del explorador de pruebas de unidades.

Hemos añadido compatibilidad con el método NUnit's Assert.Multiple, que hace posible comprobar numerosas aserciones sin que el código salga tras el primer error.

Los intervalos de tiempo para agrupar por duración pueden editarse directamente en las opciones.

Mejoras de accesibilidad

Esta versión incluye compatibilidad mejorada con lectores de pantalla como JAWS, NVDA y Microsoft Narrator. Estos lectores de pantalla ahora cuentan con mejor acceso a:

  • Componentes de lista y árbol en las ventanas de herramientas de ReSharper.
  • Elementos dentro del diálogo Options.
  • Elementos en el menú Alt+Enter.
  • Todos los diálogos Go To.
  • La ventana emergente de finalización de código.

Compatibilidad con x:Bind

Tenemos buenas noticias para los desarrolladores de UWP: ¡por fin tenemos compatibilidad con vinculaciones compiladas con x:Bind!

ReSharper resuelve código x:Bind correctamente y ofrece varias inspecciones y los arreglos rápidos correspondientes. Le avisa acerca de setters de propiedades que faltan, atributos BindBack, y cuando hay colisiones de sobrecarga. Además, existe un conjunto de arreglos rápidos Create from Usage para generar un campo correcto, una propiedad o un método dentro del código detrás del modelo C#.

Cuenta con finalización de código e información de parámetros para atributos propertyPath, BindBack y UpdateSourceTrigger dentro de una expresión x:Bind.

Las refactorizaciones Change Signature y Safe Delete ahora conocen la utilización de métodos en código XAML y los actualizan según corresponda. Del mismo modo, las refactorizaciones Make Static/Const y Encapsulate Field funcionan directamente desde el código XAML y actualizan las utilizaciones de XAML correctamente si las llama desde el código detrás del modelo C#.

La detección de código que podría ser nulo está integrada en el análisis de código x:Bind. ReSharper ahora muestra las inspecciones relacionadas con nulo directamente dentro del código XAML si hay atributos CanBeNull y NotNull en código C#, por ejemplo, “Possible System.NullReferenceException” y “Possible null assignment to non-nullable entity” para argumentos en un método utilizando en un propertyPath.

Otras funcionalidades de ReSharper como Find Usages y Go to Declaration también reconocen las vinculaciones x:Bind.

Herramientas de línea de comandos ReSharper

En 2020.1, Rider migró de Mono a .NET Core en macOS y Linux. En esta versión, las herramientas de línea de comandos de ReSharper se ejecutan en .NET Core en Windows, Linux y macOS.

Por favor, tenga en cuenta que las herramientas de línea de comandos de ReSharper ya no van en un paquete con Mono, y las herramientas para macOS y Linux ahora requieren .NET Core 3.1.

Otra ventaja de utilizar .NET Core como herramienta de tiempo de ejecución en lugar de Mono es que las herramientas de línea de comando de ReSharper pueden instalarse como herramienta global de .NET Core. Ejecute el comando siguiente para instalarlas:

dotnet tool install -g JetBrains.ReSharper.GlobalTools --version 2020.2.0-*

Y ejecute la herramienta con jb tool_name [options], por ejemplo:

jb inspectcode yourSolution.sln -o=<pathToOutputFile>

Diagrama de dependencias de proyecto y tipo

En esta versión, el motor yFiles que se utiliza para dibujar el gráfico se ha actualizado a la versión más reciente. Esta nueva versión de yFiles, además de nuestras optimizaciones, mejora significativamente el rendimiento en la creación del gráfico resultante.

Ahora es posible exportar el gráfico resultante a nuevos formatos:

  • Formato de archivo GraphML para continuar con el análisis en herramientas externas.
  • Formato de archivo XPS para imprimir grandes diagramas que no es posible exportar en formato PNG.

La ventana de herramientas de diagramas por fin es compatible con el tema oscuro de Visual Studio.

Actualizaciones de Navigation

Navegar a las utilizaciones de tipos desde agrupaciones externas en el código es ahora mucho más sencillo. ReSharper puede navegar directamente desde los resultados de búsqueda de Go to Type a Find Usages. Para probarlo, busque un tipo, resáltelo en la lista con el teclado y pasando por encima con el ratón, y llame a Find Usages o Go to Usage utilizando los atajos correspondientes.

Desde la versión v2020.2, se puede llamar a varias acciones de ReSharper, como llamar directamente a documentación rápida desde los diálogos Go to Symbol y Go to File Member, utilizando atajos asignados a estas acciones en su esquema de mapa de teclas favorito.

Nuevas acciones de Peek

Se ha añadido un conjunto de acciones de Peek nuevas para mostrar el resultado de algunas acciones comunes de ReSharper en una vista de Peek Definition.

Llame a la acción Peek Implementation para abrir una Peek view de la implementación haciendo clic en la rueda del ratón mientras mantiene pulsado Ctrl+Alt, o pulse Ctrl+Alt+Q con el signo de intercalación en un símbolo.

Llame a la acción Peek Base Symbols para observar todos los símbolos de base dentro de una vista Peek View. Solo tiene que pulsar Mayús+Alt+Q en un símbolo para ejecutarlo.

Llame a la acción Peek Usages para ver usos dentro de una vista Peek View haciendo clic en la rueda del ratón sobre un símbolo mientras mantiene pulsado Ctrl.

Refactorización

En esta versión, el diálogo Conflicts se ha rediseñado como paso por separado en la interfaz de Refactorings. La lista simple de antes se ha sustituido por un árbol agrupado por archivo.

Al llamar a las refactorizaciones Introduce parameter o Introduce field en una expresión, ReSharper pregunta a qué parte de la expresión se debería aplicar la refactorización.

Funcionalidades mejoradas de Unreal Engine

Unreal Engine

ReSharper C++ 2020.2 incorpora compatibilidad con el modelo de proyectos Unreal Engine indicando sugerencias de autoimportación más inteligentes para directivas include y compatibilidad para diferentes configuraciones de solución. ReSharper C++ también cumple mejor las directrices de Unreal Engine ajustando la gravedad de la inspección y las acciones de generación de código.

Para una navegación más sencilla, Search Everywhere/Go To ahora trata los símbolos de las fuentes del motor como símbolos de biblioteca. También hay varias inspecciones nuevas que aplican las directrices de Unreal Engine y le recuerdan que refresque los archivos del proyecto en Unreal Editor.

Mejor compatibilidad con C++/CLI

C++/CLI

Como la licencia de ReSharper ahora incluye ambos productos, ReSharper y ReSharper C++, la compatibilidad con C++/CLI –un puente entre ambos lenguajes– está disfrutando de muchas actualizaciones y de interoperabilidad mejorada entre C++/CLI y C#.

ReSharper C++ encontrará símbolos derivados en código C#, mientras que Go to Base Symbols y Go to Derived Symbols ahora funcionan con entidades CLR importadas.

ReSharper C++ ahora inspecciona el modo en que asigna memoria y sugiere un arreglo rápido para sustituir gcnew por new (y viceversa) cuando el tipo de destino no es válido. Otra inspección le avisa cuando trata de utilizar el especificador de C++ final en una interfaz o clase gestionada, y le propone un arreglo rápido para convertirla en sealed. Además, ahora puede utilizar un arreglo rápido para convertir un cast de estilo C en un safe_cast.

Novedades en ReSharper C++

Assembly Explorer

  • Las fuentes del paquete NuGet v3 ahora son compatibles con Open from NuGet, Open from NuGet packages cache y Open NuGet packages.config.
  • Los elementos con nombres similares ahora se contraen en los diálogos Open from NuGet y Open from NuGet packages cache.
  • Los paquetes NuGet se ordenan alfabéticamente.

Otras funcionalidades

Formateo

ReSharper ahora alinea columnas de código similar correctamente, incluso cuando la única parte del grupo alineado se está formateando, de modo que añadir un punto y coma o una llave ya no interrumpa la alineación.

Extensiones y herramientas .NET

dotCover dotUltimate

Se han introducido algunas mejoras en el ejecutor de consola dotCover:

  • El parámetro --reportype=SummaryXml le permite crear un nuevo tipo de informe de resumen, que incluye datos sobre cuántas clases, métodos e instrucciones se abordan en total.
  • Ahora, el ejecutor puede generar informes de varios tipos simultáneamente: --reporttype=HTML,SummaryXml --output=report.html;summary.xml
  • El ejecutor para Linux (Debian, Ubuntu) ahora es capaz de realizar análisis en sistemas ARM64 systems.

Más información

dotTrace dotUltimate

Tanto dotTrace independiente como dotTrace en Rider son capaces de perfilar la parte nativa de las aplicaciones Mono/Unity en Windows. Solo tiene que iniciar una sesión con la opción 'Enable native profiling' y verá tanto las pilas de llamadas nativas como las gestionadas en instantáneas de rendimiento. Esta funcionalidad podría resultar útil para analizar cuellos de botella en el rendimiento en juegos Unity.

También hay un par de mejoras en el perfilador de consola dotTrace:

  • El perfilador le permite controlar la sesión de perfilado (tomar instantáneas, separar del proceso perfilado, etc.) enviando comandos a stdin o a un archivo.
  • El perfilador para Linux (Debian, Ubuntu) ahora es capaz de perfilar aplicaciones en sistemas ARM64.

Más información

dotMemory dotUltimate

Ahora puede abrir objetos anclados como un conjunto de objetos por separado, y puede abrir objetos a los que no existe acceso desde raíces GC como conjunto de objetos por separado.

Las mejoras en el perfilador de línea de comandos dotMemory incluyen:

  • Ahora, además de en Windows, el perfilador de línea de comandos también está disponible en Linux y macOS.
  • El perfilador para Linux (Debian, Ubuntu) es capaz de perfilar aplicaciones no solo en x64, sino también en sistemas ARM64.

Más información

dotPeek 

dotPeek continúa mejorando su compatibilidad con las versiones más recientes de C#, y la nueva versión incluye:

  • Miembros con cuerpo de expresión.
  • Expresiones Throw.
  • Argumentos con nombre y parámetros predeterminados.
  • Atributo NullablePublicOnly.

Más información

Descargar

Prueba gratuita de 30 días disponible