Halo, Habr! Artikel ini adalah tentang plugin Rainbow CSV yang saya tulis untuk 5 editor teks:
Kode VS , Vim , Teks Sublime 3 , Atom , Gedit
Saya pikir banyak pembaca artikel ini secara berkala menemukan CSV (dipisahkan koma), TSV (dipisahkan tab) dan file serupa. Jika Anda mencoba membukanya di editor teks (tapi bagaimana lagi untuk mencari tahu apa yang ada di dalamnya?), Gambar yang benar-benar polos akan terbuka seperti di sisi kiri gambar. Melihat itu, sulit untuk mengatakan berapa banyak kolom dalam tabel. Di sisi kanan gambar adalah file yang sama dengan RainbowCSV dihidupkan, keterbacaan ditingkatkan secara signifikan karena penyorotan sintaksis.

Anehnya, sintaks untuk penyorotan semacam itu diatur menggunakan hanya satu (meskipun panjang) garis ekspresi reguler:
((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?
Aturan penyorotan dapat ditemukan sepenuhnya, misalnya, di sini (versi untuk Kode VS), tetapi, terlepas dari ekspresi reguler itu sendiri, sama sekali tidak ada yang perlu dilihat.
Sebagai perbandingan, file sintaks adalah untuk bahasa tujuan umum seperti Python, JS, C ++, dll. Biasanya mengambil beberapa ratus baris kode yang sangat esoteris.
Agar tidak memuat artikel secara terperinci, untuk menebak bagian dasar apa itu terdiri dan bagaimana ungkapan reguler ini bekerja ditawarkan kepada pembaca.
Petunjuk: Ini adalah ungkapan sederhana ([^,]*,)?([^,]*,)?
- Sorot file CSV dalam 2 warna bergantian yang berbeda, tetapi tidak akan berfungsi dengan benar pada koma di dalam bidang yang diloloskan dengan tanda kutip.
By the way, selanjutnya versi Rainbow CSV untuk Visual Studio Code dijelaskan, karena Ini adalah versi plugin yang saat ini paling canggih secara teknis dan populer (lebih dari 500 ribu unduhan).
Jadi, selain fakta bahwa Rainbow CSV menyoroti kolom, itu juga dapat:
- Beri tahu kolom mana yang kursornya tunjuk saat ini: nomor kolom + nama dari baris judul pertama. Jika tidak ada baris tajuk di awal file (data langsung hilang), maka pengguna dapat mengatur tajuk "Virtual" -nya.
- Secara otomatis memeriksa file untuk sejumlah entri yang berbeda per baris atau untuk penggunaan karakter escape yang salah - "CSV Lint".
- Jalankan kueri seperti SQL menggunakan interpreter RBQL bawaan, yang memungkinkan Anda menerapkan kelas transformasi teks yang sangat luas ke tabel input.
RBQL mendukung hampir semua pernyataan SQL (SELECT, UPDATE, WHERE, ORDER BY, TOP / LIMIT, JOIN, GROUP BY) serta semua fungsi dan pernyataan standar dari JavaScript dan Python.
RBQL adalah teknologi yang terpisah, tetapi sangat cocok dengan konsep Rainbow CSV, dan karenanya integrasi ini memberikan banyak keuntungan.
Salah satu fitur terpenting dari plugin Rainbow CSV adalah deteksi otomatis file CSV berdasarkan kontennya. Fungsi ini sangat penting karena Seringkali file CSV (atau TSV) memiliki ekstensi file selain .csv (.tsv). Anda juga dapat menemukan file dengan ekstensi .csv di mana tanda titik koma sebenarnya digunakan sebagai pemisah ;
. Algoritma untuk menentukan file tabel berdasarkan konten sangat sederhana - cukup periksa bahwa jumlah sel di setiap baris ketika split'e untuk pemisah ini konstan> 1.
Perbandingan Rainbow CSV dengan penyelarasan grafis
Secara umum, cara tradisional untuk melihat data CSV adalah mengimpornya ke editor grafis seperti Excel.
Dibandingkan dengan metode ini, Rainbow CSV memiliki kelebihan dan kekurangan:
Keuntungan:
- Apa yang Anda Lihat Adalah Apa yang Anda Dapatkan - Anda dapat yakin bahwa apa yang terlihat di layar adalah isi file yang sebenarnya.
- Lingkungan akrab editor teks favorit Anda
- Abstraksi tanpa biaya: Penyorotan sintaksis sangat "murah" dari sudut pandang komputasi dibandingkan dengan penyelarasan grafis.
- Kepadatan informasi yang lebih tinggi: Lebih banyak data masuk ke satu layar - perataan grafik “memakan banyak ruang karena ruang perataan.
- Kemampuan untuk menautkan secara visual satu kolom (disorot dengan warna yang sama) dari jendela yang berbeda
Kekurangan:
- Implementasi standar menggunakan 10 warna berbeda, sehingga ketika jumlah kolom lebih dari 10 warna, warna mulai berulang dan efisiensi pengkodean warna kolom berkurang.
- Tidak ada dukungan untuk membungkus baris dalam sel yang lolos dengan tanda kutip ganda. Di sini Anda dapat membaca detail masalah ini. Namun, saya percaya bahwa CSV dengan line break di dalam sel adalah format yang sangat tidak praktis.
Perbandingan dengan perataan teks
Cara lain untuk meningkatkan keterbacaan file CSV adalah dengan menyelaraskannya dengan spasi, tetapi metode ini memodifikasi konten file, dan oleh karena itu penerapannya sangat terbatas.
Juga, menurut pendapat saya, keterbacaan file setelah highlight Rainbow sintaksis lebih baik daripada file yang telah disejajarkan dengan spasi.
Sedikit tentang proyek
Versi pertama Rainbow CSV ditulis 5 tahun yang lalu untuk Vim berdasarkan plugin rainbow_parentheses . Seperti yang Anda lihat, dari proyek ini saya meminjam tidak hanya bagian dari kode, tetapi juga setengah nama =)
Versi untuk VSCode, Atom, dan Sublime Text 3 muncul setahun yang lalu.
Banyak fitur dan peningkatan kritis telah diusulkan oleh pengguna plugin.
Perbandingan proses pengembangan plug-in untuk editor yang berbeda
Sebagai kesimpulan, saya dapat membuat perbandingan kecil dari API editor teks populer.
API untuk plugin untuk VSCode, Atom, dan Sublime Text 3 sangat mirip, perbedaan utamanya adalah bahwa ekstensi untuk VS Code dan Atom ditulis dalam JavaScript, dan untuk Sublime Text 3 dengan Python.
Ketiga editor menggunakan mesin regex yang sama untuk penyorotan sintaks, jadi memindahkan Rainbow CSV antara editor ini hanya membutuhkan adaptasi minimal dari pelanggan tetap.
Secara umum, saya dapat mengatakan bahwa proses pengembangan plug-in yang paling menyenangkan dan nyaman disediakan oleh VS Code. Di sisi lain, itu karena beberapa alasan bahwa awalnya tidak memiliki beberapa fungsi yang diperlukan untuk operasi penuh Rainbow CSV, tetapi tim VS Code dengan senang hati menerima dan meningkatkan PR saya, yang menambahkan metode yang saya butuhkan.
Menulis plugin untuk Vim sangat berbeda dari 3 editor baru ini. Vim menggunakan bahasa VimScript sendiri, serta berbagai perintah untuk memanipulasi konten file yang terbuka. Model sintaks yang digunakan Vim untuk menyoroti juga sangat berbeda dari apa yang disediakan VSCode, Atom, dan Sublime.
Referensi: