Novedades en ReSharper 2021.1

ReSharper 2021.1 incluye actualizaciones en el análisis de código, compatibilidad con plantillas de ruta ASP.NET, cambio de nombre para componentes de tuplas, y más.

Descargar

Prueba gratuita de 30 días disponible

Análisis de código

Más patrones para combinar

La inspección Merge into pattern ahora es capaz de trabajar con muchos más patrones de código. Fusione comprobaciones de valores null con otras comprobaciones en una sola comprobación de patrón:

Reescriba comprobaciones desde expresiones conditional?.Access a concordancia de patrones anidada:

Reduzca el anidado de instrucciones if fusionando las comprobaciones entre sí:

Por último, puede combinar patrones dentro de un patrón de deconstrucción simple var (a,b) expandiéndolos en formularios completos:

Más compatibilidad con C# 9.0

Hemos añadido más compatibilidad con registros C# 9.0. Las refactorizaciones Extract interface y Extract superclass ahora funcionan con declaraciones de registro, al igual que File Layout y las funcionalidades relacionadas con documentación XML.

Hemos incorporado una serie de inspecciones y acciones nuevas. Redundant explicit property declaration para propiedades en declaraciones de registro puede resultar de ayuda al migrar su código para utilizar registros con parámetros posicionales y declaraciones de propiedad implícitas. Se incluye el arreglo rápido correspondiente, Remove explicit property.

Si decide convertir un registro en una clase, la acción To class se encargará de los parámetros posicionales y del constructor primario. También cuenta con una acción To record que funciona en dirección contraria.

Cuando necesite reescribir parámetros posicionales y un constructor primario en propiedades ordinarias, constructor y un método Deconstruct() explícito, plantéese utilizar la acción contextual To explicit constructor.

También le ayudamos a mantenerlo todo en orden: la inspección Redundant 'record' type declaration body y el arreglo rápido correspondiente sustituirán al cuerpo de la declaración de tipo de registro vacío con un punto y coma.

Find usages ahora busca los usos del constructor primario de un registro y los usos de un método Deconstruct() implícito.

Convertir variable temporal en valor inline

Nos complace presentar una nueva inspección, Inline temporary variable. A veces utiliza el mismo valor una y otra vez con diferentes nombres en su programa. ¿Ese código podría ser más transparente? ¡Claro! Y ReSharper está aquí para ayudarle.

Puede incluso ayudarle a encontrar errores si se supone que la variable temporal se va a inicializar como algún otro valor o se va a mutar más adelante en código.

Otras ventajas

Los patrones not lógicos pueden ayudarle a que sus comprobaciones de tipo sean mucho más fáciles de leer. ReSharper le ofrece la posibilidad de olvidarse de la sintaxis !() en favor de un patrón "not".

ReSharper ahora sugiere utilizar el operador de rango en lugar de Slice y Substring, si así se simplifica el código.

La inspección Namespace does not correspond to file location se ha eliminado ahora en archivos con código de nivel superior.

Dispone de otra nueva inspección que comprueba si una propiedad automática se puede sustituir por una propiedad computada, junto con un arreglo rápido para realizar la sustitución.

Para la compatibilidad con C# 10.0, hemos dado unos primeros pasos enseñando a ReSharper a trabajar con la función Constant string interpolation.

¡No se pierda el artículo del blog en el que le contaremos todos los detalles del análisis de código de la versión 2021.1!

Plantillas de ruta ASP.NET Core

Las plantillas de ruta se usan mucho en aplicaciones MVC para configurar cómo se asignarán las solicitudes HTTP con los extremos ejecutables de la aplicación. En la versión 2021.1 introducimos compatibilidad con las plantillas de ruta: ReSharper ahora ofrece navegación estructural, inspecciones y arreglos rápidos. Veamos algunos ejemplos.

Las inspecciones más básicas comprueban errores de sintaxis en plantillas de ruta: situar accidentalmente una ruta a parámetro "catch all" en medio de una plantilla, declarar el parámetro "catch all" como opcional, añadir un valor predeterminado al parámetro opcional, etc.

Los parámetros de ruta son la fuente de casos interesantes. ¿Qué sucede si declara un parámetro con el mismo nombre en el controlador y en la acción? ReSharper le avisará.

Por otro lado, pueden faltar parámetros. En este caso, ReSharper le sugerirá que los añada, ya sea desde el atributo del controlador o desde la acción. Si existe una restricción de tipo, se utilizará para inferir el tipo del parámetro.

Hablando de restricciones, son un buen terreno para el análisis de código. ReSharper comprueba si la propia restricción aplicada es correcta, y si el parámetro realmente satisface la restricción.

ReSharper también trata de analizar si el tipo de parámetro puede ser más estricto (basado en la restricción) y puede sugerir cambiar el tipo. Si ha utilizado intencionadamente el tipo distinto para el parámetro, solo tiene que ignorar la sugerencia.

ReSharper también tiene en cuenta las restricciones personalizadas. Si en algunos casos no se reconoce, anote su clase de restricción con el atributo [RouteParameterConstraint] que le ofrece JetBrains.Annotations.

Otras funcionalidades de nuestro paquete estándar son la finalización de código, la navegación estructural y la reorganización del código.

Renombrar los parámetros de ruta ya no tiene que ser un proceso manual: ha llegado la refactorización Rename.

Todo lo anterior funciona por ahora con enrutado basado en atributos. Estamos deseando obtener su feedback sobre estas novedades.

Si quiere obtener más información sobre las plantillas de ruta de ASP.NET Core, consulte esta entrada del blog.

Cambiar nombre en tuplas

Las tuplas con nombre nos acompañan desde C# 7, pero cambiar el nombre de los componentes era una operación manual. Esto ha terminado; ya puede recurrir a la refactorización.

Navegación

Ahora dispone de una nueva acción de navegación: Navigate to Windows Explorer. La encontrará en el menú Navigate | Navigate to o pulsando Ctrl+Mayús+A y escribiendo su nombre. Esto puede resultarle útil si está haciendo algo con el propio archivo, como copiarlo o copiar la ruta en el interior del repositorio, o si prefiere ver el historial VCS del archivo utilizando extensiones Git para Windows Explorer.

Rendimiento

Aunque todavía estamos desmontando ReSharper para el modo 'out of process' y montándolo de nuevo, nunca dejamos de resolver incidencias relacionadas con el rendimiento siempre que sea posible. Estos son algunos puntos destacables.

  • Hemos agilizado la escritura en archivos Razor en grandes soluciones.
  • Hemos agilizado la escritura en cualquier archivo de gran tamaño donde se encuentren en funcionamiento analizadores de ReSharper.
  • Hemos mejorado el rendimiento y la capacidad de respuesta de los consejos de datos del depurador.
  • Hemos optimizado cómo gestiona ReSharper los documentos compartidos, de modo que ahora consume menos memoria.
  • Hemos implementado mejoras en el rendimiento para las pruebas de unidades de JavaScript y TypeScript.

Formateo y estilos de código

Hemos añadido un par de ajustes nuevos:

  • Ahora puede escoger si desea establecer un espacio antes y dentro de paréntesis de tipo objetivo new().
  • Puede agregar y eliminar saltos de línea antes del operador de asignación.
  • Puede desplazar la sangría hacia la izquierda en instrucciones de etiqueta.

Para reglas de nomenclatura personalizada, hemos actualizado la orden en la que se aplican: las más específicas ahora van delante.

Por último, hemos añadido una nueva acción para la selección de formato. Ahora puede decirle a ReSharper que solo ajuste las sangrías del código seleccionado, en lugar de llevar a cabo el proceso de reformateo completo.

También hemos solucionado una serie de errores; encontrará los detalles en nuestro sistema de seguimiento de incidencias.

EditorConfig

EditorConfig se está convirtiendo en una herramienta popular entre la comunidad .NET, y mejoramos continuamente su integración con ReSharper. Esto es lo que hemos modificado:

  • Hemos mejorado el modo en que ReSharper lee los ajustes de las reglas de nomenclatura desde EditorConfig y escribe las reglas de nomenclatura definidas por el usuario en EditorConfig.
  • Si las reglas de nomenclatura se anulan en EditorConfig, ReSharper muestra una notificación en la página de configuración de nomenclatura.
  • Hemos añadido compatibilidad con la opción csharp_indent_case_contents_when_block en EditorConfig.

Pruebas de unidades

  • We’ve implemented support for VSTest adapters – a feature that allows you to discover and run tests from a third party framework. Ahora ya no está limitado a los marcos de trabajo que admitimos de fábrica. Habilite esta funcionalidad en ReSharper | Options | Tools | Unit Testing | Test Frameworks | VSTest.
  • Hemos implementado compatibilidad con MSTest en proyectos Universal Windows Platform para Visual Studio 2019.
  • Algunos de ustedes se han encontrado con el problema "spawned processes": a veces, el ejecutor de pruebas completa su trabajo, pero un proceso que ha lanzado continúa activo. Hemos añadido un ajuste con los pasos a seguir de forma predeterminada en este caso. Ahora puede escoger entre que se le pregunte qué hacer, no hacer nada, o finalizar el subproceso generado. Y, cuando se le pregunte sobre un proceso y decida qué hacer con él, su decisión se guarda en ReSharper | Options | Tools | Unit Testing | Test Runner. Siempre puede eliminarlo si cambia de idea.
  • Hemos implementado una serie de inspecciones para la biblioteca AutoFixture en NUnit. ReSharper ahora comprueba si el tipo de valor de prueba es correcto, comprueba que no existan argumentos redundantes en el atributo [InlineAutoData] y le avisa si no hay ningún atributo [TestFixture] o [Test] en la clase de prueba o método.
  • Hemos actualizado nuestra compatibilidad para QUnit a la versión 2.14.0.

Compatibilidad con C++

ReSharper C++ 2021.1 incorpora compatibilidad con varias nuevas funcionalidades para los lenguajes C++20 y C++17: tipos de clase en parámetros de plantilla que no sean de tipo, reglas de deducción de argumentos de plantilla de clase C++20, y noexcept como parte del tipo de función. También cuenta con nuevos elementos de finalización de código para corrutinas disponibles tanto en finalización de código básica como en plantillas de finalización postfix: co_await, co_yield y co_return.

Estilo de sintaxis C++

Hemos incorporado una colección de ajustes de estilo de sintaxis que puede utilizar para aplicar el estilo de código seleccionado para las construcciones de sintaxis. Con las inspecciones compatibles, los arreglos rápidos y las acciones contextuales Apply Syntax Style y Cleanup selection, puede aplicar fácilmente el nuevo estilo a la base de código y mantener la coherencia del código nuevo.

Otras actualizaciones

  • Hemos añadido una acción para copiar enlaces de GitHub con la funcionalidad Copy FQN. Cuando llama a Copy Fully-qualified name desde el menú principal (ReSharper | Edit) o desde Ctrl+Mayús+A, ReSharper efectúa la copia y abre un menú contextual donde puede escoger entre diversos formatos si necesita uno no predeterminado. Este menú ahora incluye enlaces a GitHub.
  • Si utiliza expresiones regulares en cadenas en C#, VB.NET, o JavaScript (incluso en páginas Razor) es probable que disfrute de la funcionalidad de sección de empliar/contraer, que ahora también funciona en inyecciones.
  • Hemos añadido consejos de conversión de tipo para conversiones de tuplas.
  • Dispone de una restricción Body para métodos en File Layout. Le permite especificar distintas reglas para métodos con cuerpos en bloque y cuerpos en expresión.

Nueva pantalla de inicio en dotTrace y dotMemory dotUltimate

Hemos renovado por completo la pantalla de inicio de dotTrace y dotMemory. Ahora es mucho más sencillo configurar e iniciar nuevas sesiones de creación de perfiles, trabajar con instantáneas y realizar otras operaciones básicas.

Descargar

Prueba gratuita de 30 días disponible