CLion 2019.1: ClangFormat, mise en évidence du code via Clangd, vue mémoire, prise en charge initiale des microcontrôleurs

Bonjour, Habr!

L'équipe CLion a beaucoup de bonnes nouvelles - la partie de l'équipe de Saint-Pétersbourg, avec d'autres collègues, a déménagé avec succès dans un nouveau bureau, de nouveaux développeurs sympas nous ont rejoint, et plus important encore, l'autre jour, nous avons publié la première grande mise à jour cette année, CLion 2019.1 !

Le travail dans la nouvelle version s'est déroulé sur plusieurs fronts à la fois:

  • Améliorations de la prise en charge du langage C ++ : mise en évidence du code via Clangd, améliorations de la refactorisation d'extraction et de renommage, nouvelle vérification qu'une fonction membre d'une classe peut être déclarée statique.
  • Plus d'options pour définir le style d'écriture du code : intégration avec ClangFormat, prise en charge des styles de dénomination des variables en C / C ++, prise en charge de différents styles pour les gardes d'en-tête.
  • Nouvelles fonctionnalités et améliorations du débogueur : affichage de l'état de la mémoire - Affichage de la mémoire - pour les pointeurs, affichage du code désassemblé dans le cas de LLDB, accélération du travail de débogage étape par étape.
  • CLion pour microcontrôleurs , les premières étapes.
  • Possibilité de créer des cibles de construction et des configurations pour le lancement / débogage dans CLion, qui ne sont en aucun cas liées au modèle de projet.
  • Travailler avec d'autres langages de programmation dans des littéraux de chaîne en C / C ++.
  • Nouveaux thèmes visuels et autres fonctionnalités de la plateforme.

Sortie de CLion 2019.1

En savoir plus sur ces innovations et d'autres ci-dessous. Et pour essayer de nouvelles fonctionnalités et améliorations, téléchargez la version gratuite de 30 jours de CLion sur notre site Web .

Prise en charge du langage C ++


Clangd


Comme vous le savez déjà, dans CLion, il existe deux outils pour prendre en charge le langage C ++ - l'un est entièrement le sien et le second est basé sur Clangd. Ils travaillent ensemble, se complètent et partagent les informations nécessaires. Dans le même temps, si les performances et le critère d'exhaustivité fonctionnelle le permettent, nous essayons maintenant de transférer des outils intelligents pour travailler avec du code C ++ dans CLion vers un outil basé sur Clangd. Nous ne parlons pas encore de refactorisation de code, mais la mise en évidence du code en 2019.1 se fait déjà sur la base de Clangd. Cela a considérablement amélioré la réactivité de l'éditeur.

Quelques versions en arrière, nous avons changé CLion en un outil basé sur Clangd lors de l'affichage des erreurs dans l'éditeur. Le texte d'erreur est maintenant affiché plus en détail. Ceci est utile, par exemple, lors du débogage des erreurs liées à la surcharge de fonctions:

Erreurs de bruit

À cela s'ajoute la possibilité de calculer la position d'un correctif possible (correction rapide) également via Clangd. Le correctif lui-même est fourni directement par le propre outil de CLion.

Un autre domaine intéressant de notre travail consiste à écrire de nouvelles vérifications sur l'outil d'analyse de code Clangd. À partir de CLion 2019.1, une nouvelle vérification du code C ++ vous indiquera quand une fonction membre d'une classe peut être déclarée statique:

Vérification des membres statiques

Soit dit en passant, la gestion des paramètres de cet outil alternatif sur Clangd se trouve dans Paramètres / Préférences | Langues et cadres | C / C ++ | Clangd.

Outil d'analyse de code personnalisé


La productivité des éditeurs est l'une de nos principales priorités. Outre de nombreuses petites améliorations, dans cette version, il convient de noter une amélioration significative du temps d'indexation initial du projet. Cela ne se produit pas toujours, mais dans les cas où vous utilisez les mêmes bibliothèques pour vos projets: alors CLion peut automatiquement le remarquer et réutiliser les symboles de ces bibliothèques pour un nouveau projet ouvert qui les utilise. En ce qui concerne STL ou Boost, les améliorations sont très visibles!

Nos plans pour cette année sont d'augmenter la précision et l'exactitude de notre refactoring pour C ++. Nous avons commencé avec les deux plus basiques - Renommer et Extraire. Pour Extract, nous avons corrigé de nombreux cas où le résultat de la refactorisation s'est avéré incorrect en raison de qualificatifs d'espace de noms incorrectement considérés (par exemple, std:: , de la spécialisation des modèles et des noms de type remplacés (alias de type).

En ce qui concerne Renommer, nous avons fait attention au cas où il y a un renommage d'une classe ou d'une structure qui correspond au nom du fichier dans lequel elles se trouvent. Auparavant, nous renommions toujours le fichier également, mais maintenant CLion vous demande quel est le résultat préféré lors du refactoring. Vous pouvez renommer ou laisser l'ancien nom de fichier. L'inverse fonctionne également - renommer le fichier ne conduit pas à renommer sans condition la classe. (Quelque part ici, il devrait y avoir des cris du public: "Enfin!")

Renommer la classe

Et au fait, un peu plus tard, je parlerai de la possibilité de définir des styles de protège-en-tête. Donc, si la protection d'en-tête utilisée dans le fichier suit le modèle de style spécifié et en même temps le nom du fichier renommé est dans son nom, alors CLion mettra également à jour la protection d'en-tête!

Styles de codage


Dans la version 2019.1, nous avons ajouté la possibilité de passer à ClangFormat pour formater le code dans CLion. Cela inclut non seulement l'action de formatage elle-même ( Ctrl+Alt+L sous Windows / Linux, ⌥⌘L sous macOS) ou la mise en forme automatique lors de l'impression de code, mais également la pré-validation du formatage lors de la génération de code à l'aide des outils CLion, lors de la refactorisation et de l'application de correctifs (correctifs rapides). En général, partout où l'IDE formate le code, ClangFormat sera appelé.

Vous pouvez basculer vers ClangFormat globalement - dans Paramètres / Préférences | Editeur | Style de code. Et vous ne pouvez que pour un projet spécifique. De plus, si un fichier de configuration au format .clang est trouvé dans le projet, CLion proposera de passer à ClangFormat en utilisant ce fichier de configuration:

Clangformat

Un peu plus de détails peuvent être trouvés sur notre blog (en anglais).

Nommer des variables, des types et d'autres caractères dans le code est un problème complexe, parfois même philosophique. Mais dans le monde de la programmation (pour améliorer la lisibilité du code), les styles de nommage ont longtemps été inventés. Il y a le style LLVM, il y a Qt, il y a Google. Par conséquent, dans les paramètres Paramètres CLion / Préférences | Editeur | Style de code | C / C ++ dispose désormais d'un nouvel onglet - Convention de dénomination, dans lequel vous pouvez choisir l'un des styles prédéfinis ou personnaliser le vôtre en définissant le style de dénomination pour différents types de caractères (macros, fonctions globales, membres de classe, paramètres, variables locales, etc.). La convention sélectionnée sera utilisée dans toutes les actions IDE - génération de code, refactorisation, corrections automatiques, etc. En outre, si vous souhaitez surveiller plus précisément la mise en œuvre des règles de dénomination, vous pouvez activer la nouvelle vérification de dénomination incohérente, qui affichera les noms qui ne correspondent pas aux règles, et suggérera l'option de changement de nom:

Convention de dénomination

Dans le même onglet, vous pouvez trouver les paramètres de style des protecteurs d'en-tête que j'ai mentionnés ci-dessus:

Protecteurs d'en-tête

Au fait, si vous préférez utiliser #pragma , ajustez simplement le modèle pour les nouveaux fichiers d'en-tête dans Paramètres / Préférences | Editeur | Modèles de fichiers et de codes.

Débogueur


Voir la mémoire Voir


Nous avons finalement mis la main sur l'affichage de la mémoire dans le débogueur. Dans la version actuelle, vous pouvez voir la mémoire par pointeur: il suffit de cliquer sur n'importe quel point du panneau Variables pendant le débogage et de demander une vue mémoire ( Ctrl+Enter sur Windows / Linux, ⌘Enter sur macOS). Et si l'onglet d'affichage de la mémoire est ouvert pendant le débogage étape par étape, vous pouvez voir les changements mis en évidence dans la mémoire:

Affichage de la mémoire

Des modifications UI / UX sont déjà prévues pour la prochaine version, mais je voudrais d'abord recueillir les commentaires des utilisateurs. Alors écris!

Démontage en cas de LLDB


Le code assembleur est maintenant divisé par fonction et, plus important encore, il est affiché non seulement dans le cas de GDB, mais aussi pour LLDB!

Démonteur LLDB

Il convient de noter, cependant, que le code assembleur n'est toujours affiché que dans les cas où il n'y a pas de code source pour la fonction. Le mode dit de démontage à la demande n'est pas encore pris en charge.

Performances de débogage étape par étape


Parfois, le débogage étape par étape est retardé en raison du long calcul des variables à chaque étape. Mais après tout, parfois, ces calculs ne sont nécessaires à personne - je veux parcourir rapidement une partie du code par étapes, en regardant de temps en temps les valeurs d'une paire de variables! Désormais, dans CLion, il est possible de désactiver le recomptage des variables pendant le débogage étape par étape - Mute Variables dans le menu contextuel du débogueur fait exactement cela. Et lorsque vous devez calculer et afficher les valeurs, vous pouvez cliquer sur Charger sur la variable:

Muettes variables

CLion pour microcontrôleurs


Ilya Motor ( elmot ) a déjà écrit ici sur Habré à propos de son plug-in pour l'intégration de CLion avec STM32CubeMX et la prise en charge du débogueur OpenOCD. À la fin de l'année dernière, Ilya a rejoint notre équipe et avait déjà réussi à mettre à jour de manière significative le plugin et à le déplacer dans CLion.

Intégration Cubemx

Un article de blog assez volumineux et détaillé sur le plugin mis à jour peut être trouvé sur notre blog . Ici, je décrirai la chose la plus importante qui peut maintenant être faite:

  • Dans la boîte de dialogue Nouveau projet, vous pouvez créer le projet STM32CubeMX ( .ioc ).
  • Directement à partir de CLion, exécutez STM32CubeMX pour le projet pour mettre à jour les paramètres du microcontrôleur et générer du code pour le projet.
  • CLion va générer le fichier CMake correct pour travailler avec ce projet.
  • CLion vous proposera de choisir un fichier de configuration pour le matériel (configuration de la carte).
  • Pour le débogage à l'aide d'OpenOCD, vous devez créer une configuration du type spécial «Téléchargement et exécution d'OpenOCD». Pour le projet STM32CubeMX, CLion en créera un seul. Après avoir spécifié tous les paramètres, vous pouvez déboguer sur le microcontrôleur directement depuis CLion!

Ilya a de nombreux plans ambitieux, donc vos commentaires sont très importants pour nous. Donc, si vous êtes intéressé par le développement de systèmes embarqués dans CLion, nous vous attendons dans les commentaires!

Concevoir des cibles et des configurations indépendantes


Il y a quelque temps, la liste des modèles de conception pris en charge dans CLion a été étendue par Gradle C ++ et la base de données de compilation. Il y avait des problèmes avec ce dernier, car le format n'inclut pas d'informations sur l'assemblage de l'ensemble du projet, donc ni l'assemblage, ni le lancement, ni le débogage du projet dans le cas d'une base de données de compilation n'étaient possibles. Oui, et juste dans le cas du modèle de projet CLion bien connu, parfois vous voulez avoir une cible qui est simplement assemblée par une équipe dans le terminal.

Maintenant, dans de tels cas, il existe des cibles personnalisées (Paramètres / Préférences | Générer, Exécution, Déploiement | Cibles de génération personnalisées) et des configurations d'exécution / de débogage personnalisées (Exécuter | Modifier les configurations ...). Dans le cas d'une cible, vous devez définir les paramètres des outils externes (outils externes), qui seront utilisés lors de l'assemblage et du nettoyage du projet:

Cibles personnalisées

Et dans le cas d'une configuration indépendante du projet, pour le lancement et le débogage, vous devez spécifier la cible, le fichier exécutable et les arguments souhaités à exécuter:

Configuration personnalisée

Langue injectée


Votre code contient-il des littéraux de chaîne contenant une requête SQL, du code HTML ou une expression régulière? Si c'est le cas, vous voudrez sûrement au moins mettre en évidence le code à l'intérieur du littéral en fonction de son origine. Maintenant c'est possible! Vous pouvez temporairement inclure une autre langue dans un littéral de chaîne en appuyant simplement sur Alt+Enter et en sélectionnant l'option «Injecter la langue ou la référence». Maintenant, nous sélectionnons la langue dont nous avons besoin et, plus récemment, dans le littéral de chaîne habituel, le surlignage de la langue sélectionnée apparaît, ainsi que toutes les actions spéciales. L'exemple le plus frappant est les expressions régulières et la possibilité de vérifier la conformité d'une chaîne directement dans l'IDE:

Langue injectée

Et bien plus


Les produits chez JetBrains sont généralement créés non pas par une petite équipe, mais par l'équipe de l'ensemble de la plateforme concernée. Par conséquent, CLion obtient des fonctionnalités d'IntelliJ IDEA, WebStorm, AppCode, DataGrip, PyCharm, etc. Dans cette version, ces améliorations incluent les éléments suivants:

  • Affichez tous les endroits du code du projet où le développeur a apporté des modifications ou lisez simplement le code - Popup des emplacements récents ( Shift+Ctrl+E sur Win / Lin, ⇧⌘E sur macOS).
  • Création de nouveaux thèmes pour l'IDE, en plus de la lumière standard, sombre (Darcula) et contraste (High-Contrast). Des exemples de ces plug-ins et un didacticiel pas à pas peuvent être trouvés dans notre documentation .
  • En parlant de plugins. Si vous écrivez en Rust, vous savez probablement qu'il existe un plugin IntelliJ Rust. Dans CLion, sa version inclut le support Cargo et un débogueur. Et avec la nouvelle version, le plugin a des outils pour profiler le code sous Linux et macOS, la possibilité de compléter automatiquement les caractères non encore importés, ainsi que d'autres améliorations.

C'est tout pour l'instant. Merci si vous lisez jusqu'au bout!

Démo


Eh bien, et la vidéo traditionnelle sur les nouvelles fonctionnalités de CLion 2019.1 (en anglais):


Des questions, des souhaits, des rapports de bugs et seulement des pensées exprimées dans les commentaires! Nous nous ferons un plaisir de vous répondre.

Votre équipe JetBrains CLion
La volonté de se développer

Source: https://habr.com/ru/post/fr445646/


All Articles