ClangFormat dan Notepad ++ Integrasi

ClangFormat adalah salah satu alat terbaik untuk memformat kode sumber secara otomatis dalam C, C ++, Java, JavaScript, Objective-C, C #. Ada plugin untuk lingkungan pengembangan populer (IDE), tetapi sering kali Anda perlu memformat file atau bagian dari file sumber dengan cepat tanpa meluncurkan IDE yang rumit, bereksperimen dengan pengaturan format dan berbagai versi ClangFormat dengan kemampuan untuk cepat membatalkan perubahan. Menggunakan versi konsol ClangFormat untuk tujuan ini tidak nyaman. Solusi yang mungkin adalah dengan menelepon ClangFormat dari editor teks. Situs web resmi menjelaskan metode integrasi dengan Vim, Emacs dan beberapa lainnya, tetapi tidak ada informasi tentang integrasi dengan Notepad ++. Berikut ini adalah instruksi sederhana untuk Notepad ++ (untuk Windows).

Persyaratan awal


  • memformat file yang dibuka di Notepad ++ dengan ClangFormat;
  • memformat fragmen yang dipilih dalam file;
  • buang perubahan;
  • beralih format (set aturan);
  • Beralih ke versi lain dari ClangFormat
  • gunakan alat standar bila memungkinkan, tanpa membangun kembali ClangFormat dan tanpa menulis plugin baru untuk Notepad ++.

Instalasi dan pengaturan


1. Jika Notepad ++ belum diinstal, unduh dan instal


https://notepad-plus-plus.org

2. Di Notepad ++ instal plugin NppExec


NppExec memungkinkan Anda memanggil aplikasi pihak ketiga dari Notepad ++ dan berinteraksi dengan komponen pustaka Scintilla, tempat Notepad ++ ditulis.

Plugins –> Plugin Admin... –> NppExec –> Install
Notepad ++ akan restart, setelah itu <Notepad++>/plugins/NppExec/ dan Plugins –> NppExec item menu Plugins –> NppExec akan Plugins –> NppExec

3. Unduh ClangFormat yang dapat dieksekusi


Untuk melakukan ini, pada halaman https://llvm.org/builds/ kami menemukan dan mengunduh file instalasi untuk Windows, misalnya LLVM-XXX-rYYYYYY-win64.exe . Anda tidak dapat menginstal seluruh paket, cukup ekstrak file clang-format.exe oleh clang-format.exe . Anda dapat menggunakan 7-zip: hapus ekstensi .exe dari .exe , buka file dengan 7-zip dan ekstrak clang-format.exe dari bin/ subdirektori. Kami clang-format.exe di clang-format.exe <Notepad++>/plugins/NppExec/clang-format/ .

4. Tambahkan file konfigurasi untuk ClangFormat


File konfigurasi harus dinamai .clang-format atau _clang-format . Mereka berisi seperangkat aturan pemformatan (gaya), format yang dijelaskan dalam panduan Opsi Gaya ClangFormat .

Sebagai contoh, kami menggunakan file dari proyek Linux Kernel dan Qt .

.clang-format diunduh dari GitHub ditempatkan di direktori yang sesuai:
<Notepad++>/plugins/NppExec/clang-format/LINUX_KERNEL/
<Notepad++>/plugins/NppExec/clang-format/QT/


5. Buat skrip untuk NppExec


Buka jendela untuk mengedit dan menjalankan skrip NppExec Plugins –> NppExec –> Execute... atau tekan F6 . Salin dan tempel teks skrip di bawah ini ke dalam jendela dan simpan skrip yang disebut clang-format dengan tombol 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)" 


Setelah memulai skrip, berdasarkan gaya pemformatan terpilih yang ditentukan dalam variabel style , memilih file .clang-format diinginkan, memeriksa tanggal perubahannya dan, jika perlu, menyalinnya ke direktori sementara. Di sana, fragmen yang dipilih dari kode sumber disalin ke file sementara, setelah clang-format.exe . Fragmen yang diformat disalin kembali ke jendela Notepad ++. Kemudian file sementara dihapus.

Di ClangFormat tidak ada cara untuk menentukan path ke file konfigurasi .clang-format . ClangFormat akan mencarinya di direktori file yang diformat dan, jika tidak menemukannya, ia akan mencari di direktori induk. Setelah skrip .clang-format file .clang-format akan tetap berada di direktori sementara agar tidak menyalinnya setiap kali pemformatan dimulai.

Pada semua tahap skrip, kesalahan diperiksa, dan ketika terjadi, jendela konsol NppExec terbuka, di mana pesan ditampilkan.

6. Di Notepad ++, tambahkan item menu baru untuk menjalankan skrip


Buka Plugins –> NppExec –> Advanced Options... , dalam daftar drop-down Associated script , pilih nama skrip clang-format dan klik pada tombol Add/Modify .

Kami me-restart Notepad ++, setelah itu item menu Plugins –> NppExec –> clang-format akan muncul.

gambar

7. Di Notepad ++, konfigurasikan pintasan keyboard untuk menjalankan skrip


Kami akan menggunakan kombinasi Ctrl + I dengan analogi dengan QtCreator. Buka Settings –> Shortcut Mapper .

Secara default, kombinasi Ctrl + I sibuk, jadi Anda harus melepaskannya dengan tombol Clear di tab Main Menu (baris 38 Split Lines dalam Notepad ++ versi saat ini). Setelah itu, di tab Plugin commands , tetapkan kombinasi Ctrl + I ke skrip clang-format .

Selesai, kita bisa menggunakannya!

Instruksi untuk digunakan


Buka file sumber di Notepad ++, pilih fragmen yang diinginkan atau semua teks dan tekan Ctrl + I Jika tidak ada yang dipilih, baris saat ini akan diformat.

gambar

Untuk membatalkan perubahan, gunakan alat editor standar ( Ctrl + Z ).
Untuk mengubah aturan pemformatan, edit file konfigurasi .clang-format di direktori <Notepad++>/plugins/NppExec/clang-format/
Jika Anda perlu menggunakan versi lain dari ClangFormat, maka ubah jalur ke file yang dapat dieksekusi dalam skrip
set clangformat = "\path\to\clang-format.exe"
Untuk memilih gaya pemformatan yang berbeda, tekan F6 dan dalam teks skrip clang-format pilih gaya yang diinginkan dengan menghapus komentar salah satu baris
set style = STYLE_NAME .

Semua file yang diperlukan ada di arsip .

Pemformatan bagus!

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


All Articles