ReSharper C++ frente a Visual Assist

Este documento describe en qué se diferencia ReSharper C++ de Visual Assist de Whole Tomato.

Como ambos productos se están desarrollando activamente y su funcionalidad cambia regularmente, consideramos que esta comparación es válida para versiones específicas que se indican en el encabezado de la tabla de comparación.

If you discover any inaccurate items in this table, please post a comment below to let us know, and we'll update the table as soon as possible.

Visual Assist en Visual Studio 2019 + Visual Assist Build 2341
en Visual Studio 2019 + ReSharper C++ 2019.2

Versiones compatibles de Visual Studio

Visual Studio 2019 Visual Studio 2019
Visual Studio 2017 Visual Studio 2017
Visual Studio 2015 Visual Studio 2015
Visual Studio 2013 Visual Studio 2013
Visual Studio 2012 Visual Studio 2012
Visual Studio 2010 Visual Studio 2010
Visual Studio 2008 No compatible
Visual Studio 2005 No compatible
Visual Studio .NET 2003 No compatible
Visual Studio .NET 2002 No compatible
Visual C++ 6.0 No compatible

Especificaciones de compatibilidad con C/C++

C/C++ C/C++
C++/CLI C++/CLI

Detección de incidencias de código

Resaltar símbolos mal escritos Resaltar símbolos sin resolver
Navegación entre incidencias de código (ventana de herramientas, editor) Navegación entre incidencias de código (ventana de herramientas, editor, comandos específicos)
21 inspecciones de Clang-Tidy 264 verificaciones de Clang-Tidy integradas
Ninguna funcionalidad coincidente 652 diagnósticos de Clang-Tidy integrados
Ninguna funcionalidad coincidente 87 revisiones del analizador estático de Clang integradas
Corrector ortográfico Corrector ortográfico
Resaltar delimitadores no coincidentes Ninguna funcionalidad coincidente
Ninguna funcionalidad coincidente Nomenclatura inconsistente
La constante cero puede ser reemplazada por nullptr La constante cero puede ser reemplazada por nullptr
Anular una función sin 'override' el especificador Anular una función sin 'override' el especificador
El constructor de shared_pointer/unique_pointer se puede reemplazar por make_shared/make_unique El constructor de puntero inteligente ha sido utilizado en lugar de su función make
Ninguna funcionalidad coincidente Más de 180 inspecciones de código de propiedad
Ninguna funcionalidad coincidente Inspecciones de código para la mayoría de los errores de compilación y algunas advertencias
Ninguna funcionalidad coincidente Búsqueda asíncrona de incidencias de código en cualquier ámbito
Ninguna funcionalidad coincidente Ejecutar la inspección de código desde la línea de comando

Arreglos rápidos para problemas de código

Crear a partir del uso Crear a partir del uso
Añadir #include Importar variable global, tipo, definición de tipo, función, macro
Crear declaración Crear declaración
Reparar caso Ninguna funcionalidad coincidente
Más de 10 arreglos rápidos para inspecciones configurables Más de 120 arreglos rápidos para inspecciones configurables

Asistencia a la codificación

Resaltar delimitadores coincidentes Resaltar elementos emparejados (incluidos macros y argumentos de formato en printf y boost::format)
Resaltar línea actual Resaltar línea actual
Acrónimos / Abreviaciones CamelHumps
Listas de sugerencias / Sugerencias inteligentes Finalización de código con sugerencias inteligentes
Convertir punto a -> Convertir punto a > y > a punto
Selección inteligente Extender/Reducir selección + Seleccionar la declaración contenida
Portapapeles múltiples Historial del portapapeles con vista previa de elementos
Información sobre parámetros Información sobre parámetros
Ninguna funcionalidad coincidente Consejos del editor
Coloración de sintaxis mejorada (6 tipos de identificadores diferentes) / Símbolos estables en cursiva / Símbolos locales en negrita Resaltado de sintaxis (20 tipos diferentes de identificadores)
Resaltado de referencias como símbolo debajo del cursor Usos del resaltado en archivos
Rodear selección Rodee con /comentario con líneas o comentario en bloque
Insertar tokens cerrados automáticamente Insertar delimitador coincidente y formato automáticamente
Información rápida con documentación Descripciones emergentes de resaltado de sintaxis con documentación
Extender comentarios multilínea automáticamente al pulsar Introducir Extensión automática de comentarios con /**/ y /// en varias líneas al pulsar Intro
Insertar guiones bajos después de m y Mayús Ninguna funcionalidad coincidente
Cuadros de listas mejorado Ninguna funcionalidad coincidente
Resaltar palabras coincidentes (código y comentarios) Ninguna funcionalidad coincidente
Indicador de columna (margen derecho) Ninguna funcionalidad coincidente
Ordenar líneas Ninguna funcionalidad coincidente
Insertar ruta Ninguna funcionalidad coincidente
Vista previa de archivos de comentarios Ninguna funcionalidad coincidente
Restablecer el ampliador del editor Ninguna funcionalidad coincidente
Ninguna funcionalidad coincidente Duplicar línea actual o selección
Ninguna funcionalidad coincidente Finalización Postfix
Ninguna funcionalidad coincidente Plantillas postfix
Ninguna funcionalidad coincidente Documentación rápida
Ninguna funcionalidad coincidente Resaltado automático de salidas de función

Asistencia de estilo de código

Formatear despues de pegar (Las reglas de formateo se heredan de Visual Studio) Aplicar reglas de formateo en cualquier ámbito (con el extenso conjunto de reglas de formateo de ReSharper C++)
Ninguna funcionalidad coincidente Aprender las reglas de formateo del código existente
Ninguna funcionalidad coincidente Compatibilidad con EditorConfig
Ninguna funcionalidad coincidente Compatibilidad con formato Clang
Ninguna funcionalidad coincidente Aplicar estilos de código y eliminar redundancias de código en cualquier ámbito con limpieza de código
Ninguna funcionalidad coincidente Estilo de encabezado de archivo configurable
Ninguna funcionalidad coincidente Estilo de nomenclatura configurable con esquemas predeterminados (STL, Google, LLVM, CamelCase, Microsoft)
Ninguna funcionalidad coincidente Estilo configurable para const y modificadores volátiles en el código generado
Ninguna funcionalidad coincidente Estilo configurable para directivas de include en el código generado
Ninguna funcionalidad coincidente Estilo configurable para inicializadores de puntero predeterminados (0|nullptr|NULL) en el código generado

Refactorizaciones y transformaciones de código

Acceso a Comandos de Refactorización Refactorizar esto
Rename (Cambiar nombre) Rename (Cambiar nombre)
Cambiar firma Cambiar firma
Introducir variable Introducir variable
Encapsular campo Encapsular campo (con la acción Generate getters and setters)
Extraer método Extraer método
Añadir/Quitar llaves Añadir/Quitar llaves
Renombrar archivos Renombrar archivos
Mover la implementación al archivo fuente Implementación de Move fuera del ámbito de la clase
Mover la implementación al Encabezado del Archivo/Declaración de Clase Ninguna funcionalidad coincidente
Mover la selección a un nuevo archivo Ninguna funcionalidad coincidente
Fragmento para refactorización (editable) Ninguna funcionalidad coincidente
Convertir Instancia a Pointer y viceversa Ninguna funcionalidad coincidente
Simplificar instancia de declaración Ninguna funcionalidad coincidente
Ninguna funcionalidad coincidente Introducir campo
Ninguna funcionalidad coincidente Variable inline
Ninguna funcionalidad coincidente Introducir alias de espacio de nombres
Ninguna funcionalidad coincidente Introducir/Inline typedef
Ninguna funcionalidad coincidente Añadir especificadores a una función = predeterminado, = eliminar, puro, o virtual
Ninguna funcionalidad coincidente Convert ?: a if y viceversa
Ninguna funcionalidad coincidente Convertir la directiva #include de corchetes a comillas y viceversa
Ninguna funcionalidad coincidente Convertir una declaración typedef en una declaración alias y viceversa
Ninguna funcionalidad coincidente Convertir a definición de espacio de nombres anidado
Ninguna funcionalidad coincidente Convertir puntos regulares a puntos seguidos y viceversa
Ninguna funcionalidad coincidente Crear tipos derivados: clase, interfaz, estructura, clase de interfaz, estructura de interfaz, clase de referencia, estructura de referencia
Ninguna funcionalidad coincidente Intercambiar operadores relacionales
Ninguna funcionalidad coincidente Intercambiar argumentos de operadores
Ninguna funcionalidad coincidente Inicializar campos desde los parámetros de los constructores
Ninguna funcionalidad coincidente Invertir declaración if
Ninguna funcionalidad coincidente Combinar declaraciones if anidadas
Ninguna funcionalidad coincidente Negar expresiones lógicas
Ninguna funcionalidad coincidente Quitar llaves
Ninguna funcionalidad coincidente Reemplazar 'auto' por declaración de tipo explícito
Ninguna funcionalidad coincidente Reemplazar 'decltype' con el tipo subyacente
Ninguna funcionalidad coincidente Reemplazar 'decltype(auto)' por declaración de tipo explícito
Ninguna funcionalidad coincidente Dividir o unir declaración con declaraciones múltiples
Ninguna funcionalidad coincidente Sustituir llamada a macro
Ninguna funcionalidad coincidente Sustituir tipo de alias de plantilla
Ninguna funcionalidad coincidente Especificar argumentos explícitos de plantilla
Ninguna funcionalidad coincidente Sustituir typedef (y, opcionalmete, todos los typedefs anidados)

Generación de código

Implementar interfaz/métodos virtuales Generar miembros faltantes/anulados
Crear implementación Generar implementación + Generar implementación inline
Crear métodos de implementación Generar definiciones
Añadir declaraciones de instancia faltantes Generar declaraciones de instancia faltantes para enum
Método de documento Símbolo de documento
Añadir declaración de reenvío Añadir declaración de reenvío
Añadir miembro Ninguna funcionalidad coincidente
Añadir miembro similar Ninguna funcionalidad coincidente
Ninguna funcionalidad coincidente Generar constructores
Ninguna funcionalidad coincidente Generar copia y mover operadores
Ninguna funcionalidad coincidente Generar getter y setter
Ninguna funcionalidad coincidente Generar operadores de igualdad
Ninguna funcionalidad coincidente Generar operadores relacionales
Ninguna funcionalidad coincidente Generar operaciones de transmisión (incluidas las funciones Boost.Serialization)
Ninguna funcionalidad coincidente Generar función hash
Ninguna funcionalidad coincidente Generar función swap
Ninguna funcionalidad coincidente Generar método Google Mock
Ninguna funcionalidad coincidente Generar función que convierte enum a cadena (configurable)
Ninguna funcionalidad coincidente Crear tipo derivado

Fragmentos de código/plantillas

Fragmento VA 30 plantillas en vivo incorporadas + plantillas personalizadas en vivo
Rodear con fragmentos 19 plantillas envolventes + plantillas envolventes personalizables
Crear archivo (necesita ser llamado dos veces para header y cpp) Plantillas de archivo integradas para class y struct (cree tanto el encabezado como cpp de una vez) + plantillas de archivo personalizadas
Cadenas reservadas / entorno de marcadores de posición en fragmentos Macros en plantillas de código
Editor de fragmento Editor de plantilla
Crear fragmento desde la selección Crear plantilla en vivo desde la selección
Ninguna funcionalidad coincidente Plantillas de archivos múltiples

Navegación y búsqueda

Ir a declaración (con Goto) Ir a declaración (reconocimiento de usos)
Ir a implementación (con Goto) Ir a implementación
Esquema VA Estructura de Archivo
Archivos recientes (VA view) Ir a archivos recientes
Abrir archivo en la solución Ir a archivo
Buscar símbolo en la solución Ir a símbolo
Ir a relacionados Go to related files
Ir a miembro Ir a miembro de archivo
Mover ámbito Ir al miembro próximo/previo
Encontrar referencias Buscar usos
Buscar por contexto Ir al resaltado siguiente/previo / Buscar ventana de resultados
Abrir el archivo correspondiente Cambiar entre encabezado y fuente
Navegar hacia atrás y hacia adelante Inspeccionar el historial de navegación
Va Hashtags Marcadores
Enlaces de origen Elementos pendientes con patrones de URL externas
Listado de métodos en archivo Ninguna funcionalidad coincidente
Barra de navegación VA Ninguna funcionalidad coincidente
Navegador de clase flotante Ninguna funcionalidad coincidente
Resaltar archivos de proyecto en la ventana Output Ninguna funcionalidad coincidente
Resaltar resultados de la búsqueda Ninguna funcionalidad coincidente
Ninguna funcionalidad coincidente Buscar en todas partes
Ninguna funcionalidad coincidente Ir al próximo
Ninguna funcionalidad coincidente Ir a ediciones recientes
Ninguna funcionalidad coincidente Ir a edición anterior
Ninguna funcionalidad coincidente Navegar a
Ninguna funcionalidad coincidente Ir a símbolos base
Ninguna funcionalidad coincidente Ir a símbolos derivados
Ninguna funcionalidad coincidente Ir a tipo de símbolo
Ninguna funcionalidad coincidente Ir a archivo cercano
Ninguna funcionalidad coincidente Tipo de jerarquía
Ninguna funcionalidad coincidente Gerarquía de includes
Ninguna funcionalidad coincidente Ir a plantilla principal/especializaciones
Ninguna funcionalidad coincidente Ubicar archivo actual en Solution Explorer
Ninguna funcionalidad coincidente Encontrar acciones y configuraciones
Ninguna funcionalidad coincidente Punto de interrupción de navegación y ventana de herramienta
Ninguna funcionalidad coincidente Analizador de inclusiones

Depuración

Filtros de pasos Filtros de pasos
Desactivar temporalmente todos los puntos de interrupción habilitados Ninguna funcionalidad coincidente
Vincular temporalmente todos los puntos de interrupción al hilo actual Ninguna funcionalidad coincidente
Ninguna funcionalidad coincidente Inline watches
Ninguna funcionalidad coincidente DataTips buscables

Unreal Engine

Compatibilidad con proyectos UE4 Compatibilidad con proyectos UE4
Sugerencias inteligentes para especificadores de reflexión de UE4 Finalización de código para especificadores de reflexión de UE4
Ninguna funcionalidad coincidente Documentación rápida para especificadores de reflexión UE4
Compatibilidad con llamadas a procedimiento remoto de UE4 Compatibilidad con llamadas a procedimiento remoto de UE4
Ninguna funcionalidad coincidente Refactorizaciones Rename y Change Signature para funciones UE4 RPC
Excluir de la navegación el código fuente del motor Ninguna funcionalidad coincidente
Ninguna funcionalidad coincidente Indexación del código del motor pospuesta
Ninguna funcionalidad coincidente Compatibilidad con convenciones de nomenclatura de UE4
Ninguna funcionalidad coincidente Inspecciones de código específicas para UE4

Pruebas de unidades

Ninguna funcionalidad coincidente Ayuda en pruebas de unidades para los marcos de trabajo Google Test, Catch 2.5, Boost.Test y doctest

Gestión de configuraciones

Importar/exportar configuraciones Sincronización automática multicapa de configuraciones y plantillas personalizadas