ReSharper C++ 2023.2 disponible avec la prise en charge de plusieurs nouvelles fonctionnalités de C++20 et de C++23
une assistance par IA, et bien d'autres nouveautés et améliorations

ReSharper C++ 2023.2 est disponible. Il s'agit de la deuxième mise à jour majeure de l'année de l'extension Visual Studio de JetBrains pour les développeurs C++. Cette version introduit la refactorisation Safe Delete pour supprimer des symboles du code source en toute sécurité. Pour les projets C++ modernes, plusieurs nouvelles fonctionnalités C++20 et C++23 sont désormais prises en charge, notamment les modules de la bibliothèque standard C++23. Cette version comprend également l'AI Assistant de ReSharper, spécialement conçu pour vous aider dans vos tâches de programmation.

AI Assistant (accès limité)

ReSharper C++ 2023.2 introduit l'AI Assistant de ReSharper, un chat avec une IA spécialement conçu pour répondre aux questions de programmation et vous aider à résoudre des problèmes, à refactoriser, à documenter et dans vos autres workflows de développement.

L'AI Assistant de ReSharper tient compte du langage et des technologies utilisés dans votre projet. Cette connaissance du contexte permet d'adapter les réponses dès le départ, pour gagner du temps et de l'énergie.

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.


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

Prise en charge de C++23

L'instruction if consteval est une nouvelle fonctionnalité d'évaluation des constantes en C++23 qui poursuit l'idée de 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 la prise en charge de if consteval et apporte un ensemble d'inspections connexes :

  • consteval if est toujours une constante.
  • std::is_constant_evaluated évalue toujours à une constante.
  • if peut être remplacé par if consteval.


ReSharper C++ prend désormais 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 aux membres non statiques. Les opérateurs d'appel sont toutefois souvent utilisés avec des objets de fonctions sans membres. 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

JetBrains a 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, JetBrains a 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 supprimer des symboles de 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 vous permet de prévisualiser les modifications apportées au code source. Vous avez ainsi la certitude que toutes les suppressions sont intentionnelles. Si vous essayez de supprimer une entité complexe comme une classe ou un espace de noms, ReSharper C++ vérifiera récursivement les occurrences 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 tous vos actifs Blueprint pour activer des fonctionnalités telles que Find Usages et afficher les valeurs des données sérialisées directement dans l'éditeur de texte.

Auparavant, ReSharper C++ indexait ces actifs avec la même priorité que votre code C++. Le projet mettait donc plus de temps à être prêt pour le travail. ReSharper C++ 2023.2 indexera les actifs en arrière-plan après avoir indexé votre code C++ sans interférer avec votre travail.


JetBrains a amélioré la saisie semi-automatique intelligente pour les types wrapper avec une sémantique d'affectation standard. Par exemple, lors de l'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, JetBrains a 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 inline dans votre module afin d'améliorer le temps de compilation.

Assistance au codage

Avec l'amélioration de la saisie semi-automatique pour le code dépendant, vous obtiendrez désormais des éléments de saisie semi-automatique 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, ainsi que du trait TIsSame d'Unreal Engine.

ReSharper C++ extrait maintenant aussi les exigences de type et de valeur des clauses requires, 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 un modèle de contrainte de paramètre vers une clause requires et de convertir une clause requires en modèle de contrainte de paramètre.

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

La liste de saisie semi-automatique du code filtre désormais les identifiants réservés et ne les propose qu'après _. Vous n'avez donc plus besoin de faire défiler les suggestions des bibliothèques standard si vous n'en avez pas besoin.

ReSharper C++ 2023.1 a inauguré une mise en évidence et une mise en forme appropriées pour la substitution des macros dans la fenêtre contextuelle Quick Documentation et dans les infobulles au survol du curseur. Dans la version 2023.2, ces améliorations fonctionneront également pour les définitions de macros et pour Parameter Info dans la saisie semi-automatique du code.

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

L'éditeur de logiciels a également amélioré la compatibilité avec les compilateurs GCC et Clang et les bibliothèques standard libc++/libstdc++. Cela inclut le support de nouveaux builtins comme __integer_pack, __is_convertible/__is_nothrow_convertible, et des mises à jour pour ceux qui étaient pris en charge précédemment.

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 déréférencements redondants et les opérateurs address-of. Il vous propose plusieurs correctifs rapides pour simplifier l'accès aux membres et supprimer les 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 avertit des déclarations forward d'enums de style C sans type sous-jacent, qui sont interdites par la norme C++, mais acceptées par MSVC, ce qui peut empêcher la portabilité du code.

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

JetBrains a également mis à jour le binaire clang-tidy intégré vers Clang 16, et propose de nouvelles vérifications et de nouveaux correctifs.

MSVC peut utiliser le préprocesseur traditionnel ou le nouveau préprocesseur conforme aux normes en fonction de la valeur de l'argument du compilateur /Zc:preprocessor. 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 plus cohérente et plus directe dans le code, sans étapes supplémentaires :

  • Lorsqu'il est appelé sur un nom de classe dans un appel de constructeur, Go to declaration navigue désormais vers le constructeur au lieu de la classe qui le contient.
  • Go to declaration navigue désormais vers la première déclaration typedef ou d'alias de type au lieu d'afficher un menu comportant 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 désormais disponible pour les symboles en dehors des déclarations. Le fonctionnement est similaire à celui de Go to declaration.


Aide à la mise en forme et à la saisie

Lors de la génération de commentaires de documentation, ReSharper C++ adaptera 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 permettant d'aligner les initialisateurs et les noms de déclaration dans les colonnes prennent désormais en charge les champs de bits. Il existe également deux nouveaux paramètres de mise en forme pour les espaces avant et après les deux points dans les déclarations de champs de bits et pour l'alignement 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).

JetBrains a également mis à jour le binaire clang-format intégré et corrigé le moteur clang-format pour l'empêcher de supprimer la nouvelle ligne à la fin d'un fichier.

Nouveautés et téléchargement de ReSharper C++ 2023.2