ReSharper C++ 2020.1 : nouvelles fonctionnalités C++20, assistance au codage améliorée, prise en charge du HLSL et plus encore
Nous avons le plaisir de vous présenter notre première version majeure de l’année ! Depuis le début du programme d’accès anticipé, nous avons publié une série d’articles pour partager les améliorations et nouvelles fonctionnalités au fur et à mesure. Voici maintenant un récapitulatif de tout ce que cette nouvelle version vous propose !
ReSharper C++ 2020.1 suit les dernières mises à jour de C++20, améliore l’assistance au codage et la navigation, et vous aide à être plus productif avec Unreal Engine 4 et HLSL.
Lisez ce qui suit pour plus de détails sur tous changements apportés par cette version 2020.1.
Effectuez une mise à jour vers cette version ou demandez un essai gratuit de 30 jours. La toute nouvelle build est disponible sur notre site et dans la Toolbox App.
TÉLÉCHARGER RESHARPER C++ 2020.1
Prise en charge de C++20
Lors de sa réunion à Prague en février dernier, le comité ISO C++ a terminé ses travaux techniques sur C++20 , complétant ainsi le travail du comité C++20. ReSharper C++ 2020.1 introduit la prise en charge de plusieurs nouvelles fonctionnalités du dernier standard du langage.
C++20 améliore les déclarations using
pour permettre l’intégration d’énumérateurs spécifiques dans la portée locale (voir P1099). La nouvelle syntaxe using enum
vous permet d’ajouter tous les énumérateurs de l’énumération cible et d’omettre les répétitions de noms. ReSharper C++ 2020.1 ajoute la prise en charge des déclarations using enum
et une nouvelle refactorisation, Introduce Using Enum, vous aide à ajouter des déclarations using enum
au code existant.
Pour les concepts de C++20, nous avons ajouté la prise en charge de la nouvelle syntaxe pour les espaces réservés de type contraint et les modèles de fonctions abrégés (voir P1141). Vous pouvez maintenant contraindre un type auto
avec un concept et déclarer une fonction modèle avec un espace réservé auto
ou concept auto
dans la liste des paramètres. De plus, nous avons amélioré les messages d’erreur sur les contraintes non respectées pour vous aider à comprendre facilement ce qui s’est passé lors de la substitution de modèle.
ReSharper C++ propose un nouveau correctif rapide pour utiliser le modèle syntaxique C++20 pour les lambdas (voir P0428) lorsque cela permet de simplifier votre code. Par exemple, vous pouvez maintenant utiliser la syntaxe habituelle de transmission parfaite pour les lambdas sans avoir à utiliser decltype
sur le paramètre du lambda :
Nous prévoyons de poursuivre notre travail sur la prise en charge du C++20. En ce moment, nous améliorons l’évaluation des fonctions constexpr
et étendons la prise en charge de l’opérateur de comparaison trilatérale “spaceship”. Alors, restez à l’écoute !
Unreal Engine 4
ReSharper C++ 2020.1 améliore la conformité aux standards de codage d’Unreal Engine. Nous avons mis à jour les règles de nommage pour gérer les variables de console et les catégories de journaux, et l’inspection Use auto est maintenant masquée par défaut dans les projets UE4.
Lors du renommage d’une classe ou d’un fichier, la refactorisation Rename met désormais à jour les directives Include *.generated.h
correspondantes et les fichiers associés avec les préfixes A, F, E, T, S et U.
Les fichiers Unreal Engine USF sont désormais pris en charge avec leurs chemins d’accès aux fichiers virtuels :
Une petite amélioration qui rend la navigation plus agréable : vous pouvez désormais naviguer vers des espaces de noms qui contiennent une énumération dans le style d’Unreal Engine depuis Search Everywhere/Go to.
ReSharper C++ 2020.1 introduit la prise en charge du GDK SpatialOS, un fork Unreal Engine 4 qui vous aide à exécuter et gérer des jeux en ligne dans le Cloud :
Enfin, nous avons fait en sorte que ReSharper C++ 2020.1 soit compatible avec la future version Unreal Engine 4.25. Notez que si vous souhaitez travailler sur un projet UE 4.25 avec une version antérieure de ReSharper C++, vous devez désactiver le paramètre « Read project properties asynchronously » dans ReSharper | Options | Code Editing | C++ | Performance.
Prise en charge du HLSL
ReSharper C++ 2020.1 prend en charge nativement un aspect supplémentaire du développement de jeux : le High Level Shading Language. Regardez cette brève démo de notre prise en charge du HLSL :
ReSharper C++ met en évidence le code HLSL en fonction de votre palette de couleurs par défaut et affiche des conseils d’incrustation et des infobulles pour les éléments de code, contenant des informations de type et de la documentation :
Vous pouvez également rechercher des structs, des fonctions ou des paramètres dans l’ensemble de votre solution et y accéder rapidement, ainsi que des fichiers référencés et des bibliothèques standard.
Et pour parfaire l’expérience HLSL, ReSharper C++ fournit des suggestions intelligentes dans les listes de saisie automatique, met en évidence la signature compatible avec les paramètres saisis, insère automatiquement les délimiteurs correspondants et plus encore.
La prise en charge du HLSL n’en est qu’à ses débuts, il existe donc encore quelques limitations. Dans la prochaine version, nous prévoyons de nous occuper de la saisie automatique du code pour les fonctions intrinsèques intégrées et d’améliorer la recherche et la navigation pour les tampons de constantes et de textures.
Analyse de code et correctifs rapides
Les nouvelles inspections détectent davantage de cas pour lesquels static_cast
est préférable et proposent les correctifs rapides correspondants pour vous aider à mettre à jour votre code :
reinterpret_cast
utilisé au lieu d’unstatic_cast
lors d’une conversion versvoid*
.- Cast de style fonctionnel utilisé à la place d’un cast C++.
De plus, il y a deux nouvelles inspections avec des correctifs rapides pour les expressions lambda :
- Unused lambda capture : si une variable locale est capturée par un lambda mais n’est pas utilisée à l’intérieur du corps du lambda, ReSharper C++ vous en informe et vous suggère de supprimer la capture non utilisée.
- Lambda can be rewritten to use explicit template parameters : ReSharper C++ vous suggère d’utiliser le nouveau modèle de syntaxe С++20 pour les lambdas afin d’améliorer la lisibilité du code.
Et deux autres fonctionnalités vous aident à adopter l’attribut maybe_unused
de C++ 17 :
- Une action contextuelle pour remplacer les annotations
UNREFERENCED_PARAMETER
etQ_UNUSED
par[[maybe_unused]]
. - Un correctif rapide pour ajouter
[[maybe_unused]]
à un paramètre ou une variable inutilisé(e).
Nous avons également mis à jour le binaire Clang-Tidy intégré vers Clang 10, ce qui ajoute plus de 70 nouveaux contrôles et diagnostics du compilateur.
Assistance au codage
Deux fonctionnalités bien connues de ReSharper pour .NET sont maintenant disponibles dans ReSharper C++ : Rearrange Code et Complete Statement.
Rearrange Code déplace rapidement les éléments de code, élargit ou réduit la portée actuelle, et plus encore. Pour réorganiser le code, appuyez sur Ctrl+Maj+Alt
sur l’élément de code ou la sélection que vous voulez déplacer, puis sur n’importe quelle touche fléchée :
- Les commandes pour déplacer vers le haut et vers le bas réorganisent les éléments d’une portée spécifique vers le haut et vers le bas par rapport aux autres éléments de cette portée, ou entre des portées voisines.
- Les commandes pour déplacer vers la gauche et vers la droite permettent de réorganiser des éléments qui sont normalement écrits sur une seule ligne et peuvent déplacer une déclaration dans la région qui la suit directement ou en dehors de la région actuelle.
Complete Statement insère les éléments syntaxiques nécessaires pour terminer la déclaration en cours et place le caret au bon endroit. Utilisez le raccourci Ctrl+Maj+Entrée
au lieu d’avoir à effectuer de nombreuses petites actions :
La nouvelle action d’éditeur, Document, liée à Ctrl+/
dans la keymap Visual Studio, vous permet de générer rapidement un commentaire de documentation pour l’élément de code à proximité, au lieu d’utiliser l’action contextuelle :
La liste de la saisie semi-automatique propose désormais les attributs C++ standard, les noms de libellés pour l’instruction goto
, le nouveau modèle postfix std::forward
et des arguments pour les appels à une fonction de base. De plus, la saisie semi-automatique du code fonctionne désormais dans les définitions de macro.
Les indications de paramètres et de noms de types sont devenues un aspect inhérent à l’expérience de développement avec ReSharper C++ (consultez notre article sur toutes les indications disponibles). Et maintenant, elles sont également disponibles dans le code dépendant :
Aussi, grâce à une aide à la frappe améliorée, vous pouvez désormais sélectionner n’importe quel morceau de code et saisir une parenthèse, une accolade, un crochet ou des guillemets pour entourer la sélection des caractères correspondants.
Style de code et mise en forme
En plus des nombreux correctifs, le moteur de mise en forme de ReSharper C++ 2020.1 prend pleinement en charge la syntaxe des concepts C++20. Nous avons également ajouté plusieurs nouvelles options de mise en forme, notamment une option pour la double indentation des membres de classe et une option pour contrôler les espaces avant les parenthèses dans les paramètres lambda.
Dans ReSharper C++ 2019.3, nous avions introduit la prise en charge du tri des directives #include
. Dans cette version, nous avons ajouté la possibilité d’importer les paramètres de tri à partir d’un fichier .clang-format. Assurez-vous que Read code style from . clang-format style est coché sur la page des paramètres de ReSharper | Options | Code Editing | General Formatter Style, et ReSharper C++ utilisera les paramètres de IncludeBlocks, IncludeCategories, IncludeIsMainRegex et SortIncludes de votre fichier . clang-format
pour trier les directives #include
de la même manière que le clang-format.
De plus, ReSharper C++ 2020.1 fournit deux paramètres supplémentaires pour une meilleure configurabilité du comportement de tri des #includes
:
- Case-sensitive sort : utilisé pour placer toutes les directives include commençant par des lettres majuscules avant celles commençant par des lettres minuscules.
- Group headers by directory : utilisé pour créer des groupes d’en-têtes en fonction de leur chemin d’accès au fichier.
Refactorisations des enums
Nous avons ajouté deux nouvelles refactorisations pour vous aider à moderniser votre utilisation de enum
conformément aux changements du langage liés aux standards C++11 et C++20.
La refactorisation Convert to Scoped Enum convertit une déclaration d’énumération de type C en une énumération de type C++11 :
Cette refactorisation permettra de mettre à jour toutes les déclarations d’énumération et de qualifier les références des énumérateurs. De plus, si une valeur de type énumération est implicitement castée vers un type intégral, ReSharper C++ vous en avertira et insérera automatiquement un static_cast
au type correspondant.
La refactorisation Introduce Using Enum ajoute une déclaration C++20 using enum à la portée actuelle et raccourcit les références de l’énumérateur :
Améliorations de la navigation
Dans ReSharper C++ 2020.1, vous pouvez naviguer vers la déclaration de tout symbole à partir d’un mot correspondant à l’intérieur d’un commentaire. Il suffit de cliquer sur le nom tout en maintenant la touche Ctrl
enfoncée ou de cliquer sur le nom avec le bouton de défilement de la souris. La navigation au moyen du bouton de défilement est également une nouveauté.
Search Everywhere/Go to inclut deux nouvelles catégories de filtres : les concepts et les espaces de noms. Saisissez « / » dans la zone de recherche pour voir tous les filtres disponibles.
La fenêtre File Structure fournit désormais plus de détails pour une navigation rapide dans les fichiers grâce aux icônes suivantes :
- Accessibilité des membres de classe.
- Des spécificateurs virtuels, statiques et purs.
- Informations sur l’héritage pour les membres de la classe lorsqu’une fonction remplace, implémente ou masque une fonction de base.
Tests unitaires
Le générateur de méthodes Mock prend désormais en charge la macro MOCK_METHOD introduite dans GTest 1.10. La famille des macros MOCK_(const_)METHODn()
utilisées dans les précédentes versions de GTest est désormais obsolète.
Le testeur dans ReSharper C++ utilise des canaux nommés pour communiquer avec les processus de tests enfants afin de lire le flux sortie n’ayant pas de tampon. Cependant, dans certains environnements, les canaux nommées peuvent présenter des erreurs de comportement en raison des logiciels de sécurité. Avec le nouveau paramètre Use named pipes to communicate with child processes, vous pouvez maintenant désactiver cette option et utiliser des fichiers temporaires à la place.
La liste complète des nouvelles fonctionnalités et corrections de bugs de cette version, disponible dans notre outil de suivi, concerne plus de 230 tickets. N’hésitez pas à faire une demande de nouvelle fonctionnalité ou à voter pour une demande existante. Vos commentaires sont toujours les bienvenus !
De plus, d’autres changements proviennent de la plateforme ReSharper, alors visitez sa page Nouveautés pour en savoir plus.
Téléchargez ReSharper C++ 2020.1 et dites-nous ce que vous en pensez !
TÉLÉCHARGER RESHARPER C++ 2020.1
L’Équipe ReSharper C++
JetBrains
The Drive to Develop
Auteur de l’article original en anglais : Elvira Mustafina
L’article ReSharper C++ 2020.1 : nouvelles fonctionnalités C++20, assistance au codage améliorée, prise en charge du HLSL et plus encore a été publié pour la première fois sur le blog ReSharper C++.