Nouveautés de ReSharper C++ 2023.2

ReSharper C++ 2023.2 introduit la refactorisation Safe Delete, qui permet de supprimer des symboles dans le code source en toute sécurité. Plusieurs nouvelles fonctionnalités de C++20 et de C++23 sont désormais prises en charge, notamment les modules de la bibliothèque standard C++23. Cette version apporte également l'AI Assistant de ReSharper, spécialement conçu pour vous aider dans vos tâches de programmation.

Télécharger

Essai gratuit de 30 jours disponible

AI Assistant Accès limité

L'AI Assistant n'est pas directement fourni avec ReSharper et doit être installé séparément. L'accès à la fonctionnalité AI Assistant est limité pour le moment et nous avons mis en place une liste d'attente.

Vous trouverez plus d'informations sur l'AI Assistant et la façon de l'installer avec Toolbox App ou le programme d'installation de dotUltimate dans notre aide web.

ReSharper C++ 2023.2 introduit l'AI Assistant, qui consiste en un un chat assisté par IA conçu pour répondre aux questions de programmation et apporter une aide au niveau des workflows de développement essentiels, par notamment pour la résolution de problèmes, la refactorisation ou encore la documentation.

L'AI Assistant de ReSharper tient compte du langage et des technologies utilisés dans votre projet. Cette connaissance du contexte lui permet de fournir des réponses adaptées, ce qui fait gagner du temps.

N'hésitez pas à inclure des parties du code source dans vos requêtes. ReSharper détectera le code que vous avez envoyé ou collé dans le chat et le mettra correctement en forme, tandis que le modèle d'IA expliquera la logique derrière le code et vous aidera à le refactoriser, à trouver les problèmes ou à le documenter.

Prise en charge de C++23

L'instruction if consteval est une nouvelle fonctionnalité d'évaluation des constantes en C++23 qui fait évoluer le concept consteval et std::is_constant_evaluated() de C++20. Si l'évaluation de l'instruction if consteval a lieu pendant l'évaluation d'une constante, l'instruction composée suivante est exécutée. Dans le cas contraire, la branche else est exécutée.

ReSharper C++ introduit une prise en charge pour if consteval et apporte un ensemble d'inspections associées :

  • consteval if est toujours une constante.
  • std::is_constant_evaluated a toujours pour résultat une expression constante.
  • if peut être remplacé par if consteval.

ReSharper C++ prend maintenant en charge les modules nommés std et std.compat introduits dans la bibliothèque standard C++23. Si vous utilisez Visual Studio 17.6 ou une version ultérieure, vous pouvez désormais utiliser import std ou import std.compat pour importer l'ensemble de la bibliothèque standard au lieu d'utiliser un en-tête précompilé ou d'inclure des en-têtes spécifiques de la bibliothèque standard.

Avant C++23, tous les opérateurs devaient être des fonctions membres non statiques. Cependant, les opérateurs d'appel sont souvent utilisés avec des objets de fonctions sans membres et dans ce cas, permettre aux opérateurs d'être statiques améliore l'efficacité du code. C++23 permet à operator() et operator[] d'être statiques.

Prise en charge de C++20

Nous avons amélioré la prise en charge des modules C++20 et corrigé plusieurs problèmes dans des projets concrets utilisant des modules. Lors du traitement des modules en interne, ReSharper C++ ignore désormais les déclarations qui ne sont pas accessibles à partir d'autres déclarations, ce qui améliore considérablement les performances des modules ayant un grand nombre de fichiers d'en-tête dans le fragment de module global.

De plus, nous avons en implémenté plusieurs modifications pour une meilleure prise en charge des modules dans les projets CMake. ReSharper C++ reconnaît maintenant les fichiers .cppm en tant qu'interfaces de module et fournit une prise en charge expérimentale pour les modules situés en dehors du dossier du projet.

Le nouvel attribut [[no_unique_address]] de C++20 indique qu'une adresse unique n'est pas nécessaire pour un membre de données non statique d'une classe, ce qui permet au compilateur d'organiser les membres de la classe avec plus d'efficacité. ReSharper C++ prend désormais en compte [[no_unique_address]] lors du calcul de la taille d'un objet.

ReSharper C++ 2023.2 implémente également le rapport de défauts C++20 récemment adopté, qui permet l'initialisation d'un tableau de char ou unsigned char avec un littéral de chaîne UTF-8.

Refactorisation Safe Delete

ReSharper C++ introduit la refactorisation Safe Delete pour vous permettre de supprimer des symboles dans votre code source en toute sécurité. Cette refactorisation est disponible pour les classes, les fonctions, les variables, les énumérateurs, les espaces de noms et même les concepts.

Pour appeler la refactorisation, placez le curseur sur le symbole à supprimer et appuyez sur Alt+Suppr, ou sélectionnez Safe Delete dans le menu Refactor This.

Avant de supprimer un symbole, ReSharper C++ recherche ses occurrences et fournit une prévisualisation des modifications du code afin d'éviter toute suppression non intentionnelle. Si vous essayez de supprimer une entité complexe comme une classe ou un espace de nom, ReSharper C++ vérifiera récursivement les utilisations de tous ses membres.

Unreal Engine

Cette version améliore les performances d'indexation des Blueprints. La première fois que vous ouvrez un projet, ReSharper C++ indexe toutes vos ressources Blueprint afin que vous puissiez utiliser des fonctionnalités comme Find Usages et affiche les valeurs des données sérialisées directement dans l'éditeur de texte.

Auparavant, ReSharper C++ indexait ces ressources en même temps que le code C++, la préparation du projet pour le travail prenait donc plus de temps. ReSharper C++ 2023.2 indexe les ressources en arrière-plan après l'indexation de votre code C++ sans interférer avec votre travail.

Nous avons amélioré la saisie semi-automatique intelligente pour les types wrapper avec une sémantique d'affectation standard. Par exemple, en cas d'affectation à une variable de type TEnumAsByte, la saisie semi-automatique proposera les énumérateurs du type d'énumération sous-jacent.

Pour les projets Unreal Engine 5.1, nous avons introduit la prise en charge de la macro UE_INLINE_GENERATED_CPP_BY_NAME, qui vous permet d'intégrer les fichiers générés dans votre module afin d'améliorer le temps de compilation.

Assistance au codage

Grâce à l'amélioration de la saisie semi-automatique pour le code dépendant, vous disposerez maintenant d'éléments de complétion lorsque le type est restreint par un concept ou un trait. ReSharper C++ tient désormais compte des traits de type standard std::is_same/std::is_base_of, de leurs alias de valeur _v, des concepts std::same_as/std::derived_from correspondants et du trait TIsSame d'Unreal Engine.

De plus, ReSharper C++ extrait maintenant les exigences de type et de valeur des clauses requires, de if constexpr et SFINAE afin d'améliorer la pertinence des suggestions de saisie semi-automatique du code.

Deux nouvelles actions contextuelles complémentaires permettent de déplacer une contrainte de paramètre de modèle vers une clause requires et de convertir une clause requires en contrainte de paramètre de modèle.

Si vous avez un appel récursif, ReSharper C++ le signalera dans la gouttière pour le rendre plus visible.

Dans la liste de saisie semi-automatique, les identifiants réservés sont désormais filtrés et suggérés uniquement après _. Vous n'avez donc plus besoin de faire défiler la liste des suggestions des bibliothèques standard si vous n'en avez pas besoin.

La version précédente, ReSharper C++ 2023.1 , a apporté une mise en évidence et une mise en forme correctes pour la substitution de macros dans la fenêtre contextuelle Quick Documentation et dans les infobulles au survol du curseur. Dans la version 2023.2, ces améliorations s'appliquent aussi aux définitions de macros et à Parameter Info dans la saisie semi-automatique du code.

Nous avons amélioré le moteur d'évaluation pour prendre en charge l'initialisation agrégée des tableaux constexpr.

Nous avons amélioré la compatibilité avec les compilateurs GCC et Clang et les bibliothèques standard libc++/libstdc++. Cela inclut la prise en charge de nouvelles built-ins comme __integer_pack et __is_convertible/__is_nothrow_convertible, et des mises à jour pour celles qui étaient pris en charge.

Lorsque vous spécifiez la direction du paramètre avec l'attribut [in], [in,out] ou [out] de la commande param de Doxygen, les infobulles les récupèrent désormais dans votre commentaire.

Analyse du code

ReSharper C++ 2023.2 ajoute une nouvelle inspection qui détecte les opérateurs de déréférencement et les opérateurs address-of redondants. Il fournit plusieurs correctifs rapides pour simplifier l'accès aux membres et la suppression des opérateurs redondants.

Une autre nouvelle inspection met en évidence les arguments de modèle redondants qui correspondent à l'argument de modèle par défaut et peuvent être omis.

Une nouvelle inspection de compatibilité vous signale les déclarations avancées d'enums de style C sans type sous-jacent, ce qui est interdit par la norme C++ mais accepté par MSVC, et peut empêcher la portabilité du code.

ReSharper C++ met maintenant en évidence les directives de diagnostic du préprocesseur #error et #warning en fonction de leur niveau de gravité.

Nous avons également mis à jour le binaire clang-tidy intégré vers Clang 16 pour fournir des vérifications et correctifs supplémentaires.

Selon la valeur de l'argument du compilateur /Zc:preprocessor, MSVC peut utiliser le préprocesseur traditionnel ou le nouveau préprocesseur conforme aux normes. ReSharper C++ lit désormais la valeur de cet argument dans les propriétés du projet et ajuste le comportement du préprocesseur intégré en conséquence.

Navigation

ReSharper C++ 2023.2 apporte plusieurs améliorations à Go to declaration pour une navigation dans le code plus cohérente et directe, sans étapes supplémentaires :

  • Lorsqu'il est appelé sur un nom de classe dans un appel de constructeur, Go to déclaration amène désormais au constructeur et non à la classe contenante.
  • Go to declaration navigue désormais vers la première déclaration typedef ou d'alias de type au lieu d'afficher le menu avec toutes les déclarations.
  • Go to declaration sur un nom de module permet de passer de l'unité d'interface à l'unité d'implémentation pour ce module.
  • Go to declaration sur un dossier dans un chemin #include ouvre ce dossier.

De plus, Type of symbol est maintenant disponible pour les symboles non déclarateurs. Cela fonctionne de la même manière que Go to declaration.

Aide au formatage et à la saisie

Lors de la génération de commentaires de documentation, ReSharper C++ adapte désormais le modèle de documentation au style de commentaire de l'éditeur. Pour /**, l'assistance à la saisie générera le commentaire dans le style /** */, et pour ///, le commentaire sera dans le style ///.

Cette version apporte plusieurs améliorations à la mise en forme des membres des champs de bits. Les options d'alignement des initialiseurs et des noms des déclarations dans les colonnes prennent désormais en charge les champs de bits. Il y a également deux nouveaux paramètres de formatage pour placer des espaces avant et après les deux points dans les déclarations de champs de bits et pour aligner des tailles de champs de bits dans les colonnes.

Une nouvelle option d'aide à la saisie vous permet de désactiver la génération de commentaires de documentation afin d'éviter des conflits avec le générateur intégré de Visual Studio (ReSharper | Options | Environment | Editor | Behavior | C++, C, HLSL | Generate documentation comments).

Nous avons aussi mis à jour le binaire clang-format intégré et corrigé le moteur clang-format pour l'empêcher de supprimer la ligne vide à la fin d'un fichier.

Consultez la page Nouveautés de ReSharper pour en savoir plus sur les autres évolutions apportées par cette version. Par exemple, ReSharper introduit un débogueur prédictif, qui prévoit tous les états possibles déclenchés par l'exécution d'un programme sans avoir à l'exécuter.

Télécharger

Essai gratuit de 30 jours disponible