Intégration de ClangFormat et Notepad ++

ClangFormat est l'un des meilleurs outils pour formater automatiquement les codes source en C, C ++, Java, JavaScript, Objective-C, C #. Il existe des plugins pour les environnements de développement populaires (IDE), mais souvent vous devez formater rapidement un fichier ou une partie d'un fichier source sans exécuter un IDE encombrant, expérimenter avec des options de formatage et différentes versions de ClangFormat avec la possibilité d'annuler rapidement les modifications. L'utilisation de la version console de ClangFormat à cette fin n'est pas pratique. Une solution possible consiste à appeler ClangFormat à partir d'un éditeur de texte. Le site officiel décrit les méthodes d'intégration avec Vim, Emacs et quelques autres, mais il n'y a aucune information sur l'intégration avec Notepad ++. Ce qui suit est une instruction simple pour Notepad ++ (pour Windows).

Exigences initiales


  • formatage d'un fichier ouvert dans Notepad ++ avec ClangFormat;
  • formater le fragment sĂ©lectionnĂ© dans le fichier;
  • ignorer les modifications;
  • changement de style (ensemble de rĂšgles) formatage;
  • Passer Ă  une autre version de ClangFormat
  • utilisez des outils standard dans la mesure du possible, sans reconstruire ClangFormat et sans Ă©crire un nouveau plugin pour Notepad ++.

Installation et configuration


1. Si Notepad ++ n'est pas déjà installé, téléchargez-le et installez-le


https://notepad-plus-plus.org

2. Dans Notepad ++ installez le plugin NppExec


NppExec vous permet d'appeler des applications tierces à partir de Notepad ++ et d'interagir avec les composants de la bibliothÚque Scintilla, sur la base desquels Notepad ++ est écrit.

Plugins –> Plugin Admin... –> NppExec –> Install
Notepad ++ redĂ©marrera, aprĂšs quoi le <Notepad++>/plugins/NppExec/ et l'Ă©lĂ©ment de menu Plugins –> NppExec

3. Téléchargez l'exécutable ClangFormat


Pour ce faire, sur la page https://llvm.org/builds/ nous trouvons et téléchargeons le fichier d'installation pour Windows, par exemple LLVM-XXX-rYYYYYY-win64.exe . Vous ne pouvez pas installer le package complet, il suffit d'extraire le fichier clang-format.exe par clang-format.exe . Vous pouvez utiliser 7-zip: supprimez l'extension .exe du .exe , ouvrez le fichier avec 7-zip et extrayez clang-format.exe du sous bin/ répertoire bin/ . Nous clang-format.exe dans le clang-format.exe <Notepad++>/plugins/NppExec/clang-format/ .

4. Ajouter des fichiers de configuration pour ClangFormat


Les fichiers de configuration doivent ĂȘtre nommĂ©s .clang-format _clang-format ou au .clang-format _clang-format . Ils contiennent un ensemble de rĂšgles de mise en forme (styles), dont le format est dĂ©crit dans le guide Options de style de ClangFormat .

Par exemple, nous utilisons des fichiers des projets Linux Kernel et Qt .

Les fichiers au .clang-format téléchargés depuis GitHub sont placés dans les répertoires appropriés:
<Notepad++>/plugins/NppExec/clang-format/LINUX_KERNEL/
<Notepad++>/plugins/NppExec/clang-format/QT/


5. Créez un script pour NppExec


Ouvrez la fenĂȘtre de modification et d'exĂ©cution des scripts Plugins –> NppExec –> Execute... NppExec Plugins –> NppExec –> Execute... ou appuyez sur F6 . Copiez et collez le texte du script ci-dessous dans la fenĂȘtre et enregistrez le script appelĂ© clang-format avec le bouton Save...

Script NppExec
 // Hide console NPP_CONSOLE 0 //------------------------------------------------------------------------------ // Uncomment a line to select a style //set style = LINUX_KERNEL set style = QT //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ set clangformatexe = $(CWD)\plugins\NppExec\clang-format\clang-format.exe set clangformatcfgdir = $(CWD)\plugins\NppExec\clang-format set tmpdir = $(SYS.TEMP) set clangformatcfgfile = $(clangformatcfgdir)\$(style)\.clang-format set srcfiletmp = $(tmpdir)\~src.tmp //------------------------------------------------------------------------------ cmd.exe /c if exist "$(clangformatexe)" (exit 0) else (exit 1) if $(EXITCODE) != 0 then NPP_CONSOLE 1 echo ERROR: "$(clangformatexe)" not found exit endif cmd.exe /c if exist "$(clangformatcfgfile)" (exit 0) else (exit 1) if $(EXITCODE) != 0 then NPP_CONSOLE 1 echo ERROR: "$(clangformatcfgfile)" not found exit endif // Copy $(clangformatcfgfile) to $(tmpdir)\.clang-format if their temestamps are different cmd.exe /v /c " for %i in ("$(clangformatcfgfile)") do set date1="%~ti" && for %i in ("$(tmpdir)\.clang-format") do set date2="%~ti" && if not "!date1!"=="!date2!" ( echo !date1! != !date2! && echo COPYING $(clangformatcfgfile) to $(tmpdir)\ && copy "$(clangformatcfgfile)" "$(tmpdir)\" /Y )" if $(EXITCODE) != 0 then NPP_CONSOLE 1 echo ERROR copying "$(clangformatcfgfile)" to "$(tmpdir)" exit endif // Get selected text length sci_sendmsg SCI_GETSELTEXT // If nothing is selected - select the current line if $(MSG_RESULT) == 1 then sci_sendmsg SCI_VCHOMEWRAP sci_sendmsg SCI_LINEENDWRAPEXTEND endif // Save selected text to $(srcfiletmp) sel_saveto "$(srcfiletmp)" :a cmd.exe /c if exist "$(srcfiletmp)" (exit 0) else (exit 1) if $(EXITCODE) != 0 then NPP_CONSOLE 1 echo ERROR: "$(srcfiletmp)" not found exit endif // Run ClangFormat $(clangformatexe) -i -style=file "$(srcfiletmp)" if $(EXITCODE) != 0 then NPP_CONSOLE 1 echo ERROR running "$(clangformatexe)" exit endif // Replace selected text with $(srcfiletmp) sel_loadfrom "$(srcfiletmp)" // Delete $(srcfiletmp) file cmd.exe /c del "$(srcfiletmp)" 


AprĂšs avoir dĂ©marrĂ© le script, en fonction du style de mise en forme sĂ©lectionnĂ© spĂ©cifiĂ© dans la variable de style , sĂ©lectionne le fichier au .clang-format souhaitĂ©, vĂ©rifie la date de sa modification et, si nĂ©cessaire, le copie dans un rĂ©pertoire temporaire. LĂ , le fragment sĂ©lectionnĂ© du code source est copiĂ© dans le fichier temporaire, aprĂšs quoi clang-format.exe . Le fragment formatĂ© est recopiĂ© dans la fenĂȘtre Notepad ++. Ensuite, le fichier temporaire est supprimĂ©.

Dans ClangFormat, il n'y a aucun moyen de spécifier le chemin d'accÚs au fichier de configuration au .clang-format . ClangFormat le recherchera dans le répertoire du fichier formaté et, s'il ne le trouve pas, il ira le chercher dans les répertoires parents. Une fois le script .clang-format fichier au .clang-format restera dans le répertoire temporaire afin de ne pas le copier à chaque démarrage du formatage.

À toutes les Ă©tapes du script, les erreurs sont vĂ©rifiĂ©es et lorsqu'elles se produisent, la fenĂȘtre de la console NppExec s'ouvre, dans laquelle un message s'affiche.

6. Dans Notepad ++, ajoutez un nouvel élément de menu pour exécuter le script


Ouvrez Plugins –> NppExec –> Advanced Options... , dans la liste dĂ©roulante Associated script , sĂ©lectionnez le nom du script au clang-format et cliquez sur le bouton Add/Modify .

Nous redĂ©marrons Notepad ++, aprĂšs quoi l'Ă©lĂ©ment de menu Plugins –> NppExec –> clang-format apparaĂźtra.

image

7. Dans Notepad ++, configurez le raccourci clavier pour exécuter le script


Nous utiliserons la combinaison Ctrl + I par analogie avec QtCreator. Ouvrez Settings –> Shortcut Mapper .

Par défaut, la combinaison Ctrl + I occupée, vous devez donc la libérer avec le bouton Clear dans l'onglet Main Menu (ligne 38 Split Lines de Split Lines dans la version actuelle de Notepad ++). AprÚs cela, dans l'onglet Plugin commands du Plugin commands , affectez la combinaison Ctrl + I au script au clang-format .

Terminé, nous pouvons l'utiliser!

Instruction d'utilisation


Ouvrez le fichier source dans Notepad ++, sélectionnez le fragment souhaité ou tout le texte et appuyez sur Ctrl + I Si rien n'est sélectionné, la ligne actuelle sera formatée.

image

Pour annuler les modifications, utilisez les outils d'édition standard ( Ctrl + Z ).
Pour modifier les rÚgles de formatage, modifiez les fichiers de configuration au .clang-format dans le répertoire <Notepad++>/plugins/NppExec/clang-format/
Si vous devez utiliser une autre version de ClangFormat, modifiez le chemin d'accÚs au fichier exécutable dans le script
set clangformat = "\path\to\clang-format.exe"
Pour sélectionner un style de mise en forme différent, appuyez sur F6 et dans le texte du script au clang-format sélectionnez le style souhaité en décommentant l'une des lignes
set style = STYLE_NAME .

Tous les fichiers nécessaires sont dans l' archive .

Bon formatage!

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


All Articles