ReSharper C++ vs. Visual Assist

Ce document décrit en quoi ReSharper C++ diffère de Visual Assist par Whole Tomato.

Les deux produits sont activement développés et leurs fonctionnalités changent régulièrement. Nous considérons donc que cette comparaison est valable pour les versions spécifiques indiquées dans l'en-tête du tableau comparatif.

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 dans Visual Studio 2019 + Visual Assist Build 2341
dans Visual Studio 2019 + ReSharper C++ 2019.2

Versions de Visual Studio prises en charge

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 Non prises en charge
Visual Studio 2005 Non prises en charge
Visual Studio .NET 2003 Non prises en charge
Visual Studio .NET 2002 Non prises en charge
Visual C++ 6.0 Non prises en charge

Spécifications C/C++ prises en charge

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

Détection de problèmes de code

Mise en évidence des erreurs de frappe des symboles Mise en évidence des symboles non résolus
Navigation entre les problèmes de code (fenêtre d'outils, éditeur) Navigation entre les problèmes de code (fenêtre d'outils, éditeur, commandes dédiées)
21 inspections Clang-Tidy 264 contrôles Clang-Tidy intégrés
Pas de fonctionnalité correspondante 652 diagnostics Clang-Tidy intégrés
Pas de fonctionnalité correspondante 87 contrôles Clang Static Analyzer intégrés
Vérification orthographique Vérification orthographique
Mise en évidence des délimiteurs non correspondants Pas de fonctionnalité correspondante
Pas de fonctionnalité correspondante Incohérences de nommage
La constante zéro peut être remplacée par nullptr La constante zéro peut être remplacée par nullptr
Override de fonction dans spécificateur 'override' Override de fonction dans spécificateur 'override'
Le constructeur de shared_pointer/unique_pointer peut être remplacé par make_shared/make_unique Constructeur du pointeur intelligent utilisé à la place de sa fonction make
Pas de fonctionnalité correspondante Plus de 180 inspections de code intégrées supplémentaires
Pas de fonctionnalité correspondante Inspections de code pour la plupart des erreurs de compilateur et certains avertissements
Pas de fonctionnalité correspondante Recherche asynchrone des problèmes de code dans n'importe quelle portée
Pas de fonctionnalité correspondante Exécution de l'inspection de code à partir de la ligne de commande

Correctifs rapides pour problèmes de code

Créer à partir d'une utilisation Créer à partir d'une utilisation
Ajouter #include Importer variable globale, type, définition de type, fonction, macro
Créer une déclaration Créer une déclaration
Réparer la casse Pas de fonctionnalité correspondante
Plus de 10 correctifs rapides pour les inspections configurables Plus de 120 correctifs rapides pour les inspections configurables

Assistance au codage

Mise en évidence des délimiteurs correspondants Mise en évidence des éléments correspondants (y compris les macros et les arguments de format dans printf et boost::format)
Mise en évidence de la ligne actuelle Mise en évidence de la ligne actuelle
Acronymes / Sténographie CamelHumps
Listes de suggestions / Suggestions intelligentes Saisie automatique du code avec suggestions intelligentes
Conversion des points en -> Conversion des points en -> et des -> en points
Sélection intelligente Développer/réduire la sélection + Sélectionner la déclaration contenante
Presse-papiers multiples Historique du presse-papiers avec aperçu des éléments
Infos de paramètre Infos de paramètre
Pas de fonctionnalité correspondante Conseils pour l'éditeur
Coloration de la syntaxe améliorée (6 types d'identification différents) / Symboles stables en italiques / Symboles locaux en gras Mise en évidence des éléments syntaxiques (20 types d'identification différents)
Mise en évidence des références au symbole sous le curseur Mise en évidence des utilisations dans le fichier
Sélection de l'entourage Entourer avec / Commenter avec commentaire de ligne ou de bloc
Insérer automatiquement les jetons de fermeture Insérer automatiquement le délimiteur et format correspondants
Informations rapides avec documentation Infobulles de documentation pour la syntaxe surlignée
Étendre automatiquement les commentaires sur plusieurs lignes avec Entrée Extension automatique sur plusieurs lignes des commentaires /**/ et /// en appuyant sur Entrée
Insérer un tiret bas après m et Maj Pas de fonctionnalité correspondante
Zones de liste améliorés Pas de fonctionnalité correspondante
Mise en évidence des mots correspondants (code et commentaires) Pas de fonctionnalité correspondante
Indicateur de colonne (marge de droite) Pas de fonctionnalité correspondante
Trier les lignes Pas de fonctionnalité correspondante
Insertion de chemin Pas de fonctionnalité correspondante
Aperçu des fichiers à partir des commentaires Pas de fonctionnalité correspondante
Réinitialiser le zoom de l'éditeur Pas de fonctionnalité correspondante
Pas de fonctionnalité correspondante Dupliquer la ligne ou sélection actuelle
Pas de fonctionnalité correspondante Complétion postfix
Pas de fonctionnalité correspondante Modèles postfix
Pas de fonctionnalité correspondante Documentation rapide
Pas de fonctionnalité correspondante Mise en évidence automatique des sorties de fonction

Assistance au style de code

Mise en forme après collage (les règles de mise en forme sont héritées de Visual Studio) Appliquer les règles de mise en forme dans n'importe quelle portée (avec le jeu complet de règles de mise en forme propre à ReSharper C++)
Pas de fonctionnalité correspondante Apprendre les règles de mise en forme à partir du code existant
Pas de fonctionnalité correspondante Prise en charge d'Editor Config
Pas de fonctionnalité correspondante Prise en charge de Clang-Format
Pas de fonctionnalité correspondante Appliquer des styles de code et supprimer les redondances de code dans n'importe quelle portée avec le nettoyage de code
Pas de fonctionnalité correspondante Style d'en-tête de fichier configurable
Pas de fonctionnalité correspondante Style de dénomination configurable avec des schémas prédéfinis (STL, Google, LLVM, CamelCase, Microsoft)
Pas de fonctionnalité correspondante Style configurable pour les const et les modificateurs volatiles dans le code généré
Pas de fonctionnalité correspondante Style configurable pour la directive include dans le code généré
Pas de fonctionnalité correspondante Style configurable pour les initialiseurs de pointeur par défaut (0|nullptr|NULL) dans le code généré

Refactorisations et transformations de code

Accès aux commandes de refactorisation Refactoriser ceci
Rename Rename
Signature de changement Signature de changement
Introduire la variable Introduire la variable
Encapsuler le champ Encapsuler le champ (avec l'action Generate getters and setters)
Extraire la méthode Extraire la méthode
Ajouter/supprimer les crochets Ajouter/supprimer les crochets
Renommer les fichiers Renommer le fichier
Déplacer l'implémentation dans le fichier source Déplacer l'implémentation hors de la portée de la classe
Déplacer l'implémentation dans le fichier d'en-tête / la déclaration de la classe Pas de fonctionnalité correspondante
Déplacer la sélection dans un nouveau fichier Pas de fonctionnalité correspondante
Extraits pour les refactorisations (modifiable) Pas de fonctionnalité correspondante
Convertir l'instance en pointeur et vice versa Pas de fonctionnalité correspondante
Simplifier la déclaration de l'instance Pas de fonctionnalité correspondante
Pas de fonctionnalité correspondante Introduire un champ
Pas de fonctionnalité correspondante Incorporer une variable
Pas de fonctionnalité correspondante Introduire un alias d'espace de nom
Pas de fonctionnalité correspondante Introduire/incorporer un typedef
Pas de fonctionnalité correspondante Ajouter un spécificateur = default, = delete, pure ou virtual à une fonction
Pas de fonctionnalité correspondante Convertir ?: en if et vice versa
Pas de fonctionnalité correspondante Convertir une directive #include entre crochets en citation et inversement
Pas de fonctionnalité correspondante Convertir une déclaration typedef en déclaration d'alias et vice versa
Pas de fonctionnalité correspondante Convertir en définition d'espace de nom incorporée
Pas de fonctionnalité correspondante Convertir le type de retour régulier en type de retour de fin et vice versa
Pas de fonctionnalité correspondante Créer un type dérivé : class, interface, struct, interface class, interface struct, ref class, ref struct
Pas de fonctionnalité correspondante Inverser l'opérateur relationnel
Pas de fonctionnalité correspondante Inverser les arguments d'opérateur
Pas de fonctionnalité correspondante Initialiser le champ à partir du paramètre de constructeur
Pas de fonctionnalité correspondante Inverser l'instruction if
Pas de fonctionnalité correspondante Fusionner les instructions if imbriquées
Pas de fonctionnalité correspondante Annuler l'expression logique
Pas de fonctionnalité correspondante Supprimer les crochets
Pas de fonctionnalité correspondante Remplacer 'auto' par une déclaration de type explicite
Pas de fonctionnalité correspondante Remplacer 'decltype' par le type sous-jacent
Pas de fonctionnalité correspondante Remplacer 'decltype(auto)' par une déclaration de type explicite
Pas de fonctionnalité correspondante Diviser ou joindre une déclaration avec plusieurs déclarations
Pas de fonctionnalité correspondante Remplacer l'appel de macro
Pas de fonctionnalité correspondante Remplacer l'alias de type de modèle
Pas de fonctionnalité correspondante Spécifier explicitement les arguments du modèle
Pas de fonctionnalité correspondante Substituer typedef (et, optionnellement, tous les typedefs imbriqués)

Génération de code

Implémenter une interface / des méthodes virtuelles Générer des membres manquants / prépondérants
Créer une implémentation Générer une implémentation + Générer une implémentation inline
Créer des implémentations de méthode Générer des définitions
Ajouter des instructions Case manquantes Générer des instructions Case manquantes pour enum
Documenter une méthode Documenter un symbole
Ajouter une déclaration anticipée Ajouter une déclaration anticipée
Ajouter un membre Pas de fonctionnalité correspondante
Ajouter un membre similaire Pas de fonctionnalité correspondante
Pas de fonctionnalité correspondante Générer des constructeurs
Pas de fonctionnalité correspondante Générer des opérateurs copier et déplacer
Pas de fonctionnalité correspondante Générer des getters et setters
Pas de fonctionnalité correspondante Générer des opérateurs d'égalité
Pas de fonctionnalité correspondante Générer des opérateurs relationnels
Pas de fonctionnalité correspondante Générer des opérations de flux (y compris des fonctions Boost.Serialization)
Pas de fonctionnalité correspondante Générer une fonction de hachage
Pas de fonctionnalité correspondante Générer une fonction de permutation
Pas de fonctionnalité correspondante Générer des méthodes Google Mock
Pas de fonctionnalité correspondante Générer une fonction qui convertit enum en chaîne (modifiable)
Pas de fonctionnalité correspondante Créer un type dérivé

Extraits/modèles de code

Extraits VA 30 modèles dynamiques intégrés + modèles dynamiques personnalisés
Entourer avec des extraits 19 modèles d'encapsulation intégrés + modèles d'encapsulation personnalisés
Créer un fichier (doit être appelé deux fois pour l'en-tête et cpp) Modèles de fichier intégrés pour class et struct (crée le header et le ccp en même temps) + modèles de fichier personnalisés
Chaînes réservées /emplacements réservés d'environnement dans les extraits Macros dans les modèles de code
Editeur d'extraits Éditeur de modèle
Créer un extrait à partir d'une sélection Créer un modèles dynamique à partir d'une sélection
Pas de fonctionnalité correspondante Modèles multi-fichiers

Navigation et recherche

Aller à la déclaration (with Goto) Aller à la déclaration (prenant en compte l'utilisation)
Aller à l'implémentation (avec Goto) Aller à l'implémentation
Structure VA Structure du fichier
Fichiers récents (vue VA) Aller aux fichiers récents
Ouvrir le fichier dans la solution Accéder à un fichier
Trouver le symbole dans la solution Accéder à un symbole
Aller à associé Go to Related Files
Aller au membre Accéder au membre du fichier
Changer la portée Aller au membre suivant/précédent
Rechercher les références Rechercher les utilisations
Trouver à partir du contexte Aller à la mise en évidence suivante/précédente / Fenêtre Rechercher les résultats
Ouvrir le fichier correspondant Basculer entre l'en-tête et la source
Naviguer en arrière et en avant Se déplacer dans l'historique de navigation
Hashtags VA Marque-pages
Liens de source Éléments à faire avec modèles d'URL externes
Lister les méthodes dans le fichier Pas de fonctionnalité correspondante
Barre de navigation VA Pas de fonctionnalité correspondante
Navigateur de classe en survol Pas de fonctionnalité correspondante
Mettre en évidence les fichiers de projet dans la fenêtre Output Pas de fonctionnalité correspondante
Mettre en évidence les résultats de la recherche Pas de fonctionnalité correspondante
Pas de fonctionnalité correspondante Rechercher partout
Pas de fonctionnalité correspondante Aller au texte
Pas de fonctionnalité correspondante Aller aux modifications récentes
Pas de fonctionnalité correspondante Aller à la modification précédente
Pas de fonctionnalité correspondante Naviguer à
Pas de fonctionnalité correspondante Accéder aux symboles de base
Pas de fonctionnalité correspondante Accéder aux symboles dérivés
Pas de fonctionnalité correspondante Aller au type de symbole
Pas de fonctionnalité correspondante Aller au fichier proche
Pas de fonctionnalité correspondante Hiérarchie de type
Pas de fonctionnalité correspondante Hiérarchie des includes
Pas de fonctionnalité correspondante Accéder au modèle primaire/aux spécialisations
Pas de fonctionnalité correspondante Localiser le fichier actuel dans l'explorateur de solutions
Pas de fonctionnalité correspondante Rechercher les actions et les paramètres
Pas de fonctionnalité correspondante Navigation et fenêtre d'outils des points de rupture
Pas de fonctionnalité correspondante Analyseur d'includes

Débogage

Filtres d'étapes Filtres d'étapes
Désactiver temporairement tous les points de rupture activés Pas de fonctionnalité correspondante
Lier temporairement tous les points de rupture au thread actuel Pas de fonctionnalité correspondante
Pas de fonctionnalité correspondante Surveillances inline
Pas de fonctionnalité correspondante DataTips avec recherche

Unreal Engine

Prise en charge des projets UE4 Prise en charge des projets UE4
Suggestions intelligentes pour les spécificateurs de réflexion UE4 Saisie semi-automatique pour les spécificateurs de réflexions UE4
Pas de fonctionnalité correspondante Documentation rapide pour les spécificateurs de réflexion UE4
Prise en charge des appels de procédure distants UE4 Prise en charge des appels de procédure distants UE4
Pas de fonctionnalité correspondante Renommage et modification des refactorisations de signatures pour les fonctions RPC d'UE4
Exclure la source du moteur de la navigation Pas de fonctionnalité correspondante
Pas de fonctionnalité correspondante Indexation retardée du code du moteur
Pas de fonctionnalité correspondante Prise en charge des conventions de nommage UE4
Pas de fonctionnalité correspondante Inspections de code propres à UE4

Test unitaire

Pas de fonctionnalité correspondante Assistance aux tests unitaires pour les frameworks Google Test, Catch 2.5, Boost.Test et doctest

Gestion des paramètres

Importation/exportation des paramètres Synchronisation automatique multicouche des paramètres et des modèles personnalisés