Lint Kodemu!
Di masa Unix V7, sekitar tahun 1979, diperkenalkan sebuah program bernama Lint diluncurkan bersama dengan sistem operasi tersebut. Lint adalah program yang membantu programmer bahasa C menganalisis kode yang mereka tulis dan menunjukkan bagian-bagian kode yang mungkin dapat menyebabkan bug pada program. Nama Lint sendiri berasal dari kata benda dalam Bahasa Inggris yang artinya gumpalan bulu kecil-kecil yang tidak diinginkan pada produk bulu domba.
Sekarang, kata tersebut sudah menjadi istilah umum untuk alat-alat analisis terhadap source code pada beragam bahasa. Misalnya ESLint untuk Javascript, scss-lint untuk Sass, Pylint untuk Python, coffee-lint untuk Coffeescript dan lainnya. Kata lint sebagai kata kerja juga sudah menjadi istilah umum di kalangan programmer yang artnya melakukan analisis statis terhadap source code untuk menemukan kesalahan penulisan atau bahkan kesalahan pemrograman. Beberapa alat analisis statis tidak menggunakan kata lint dalam namanya, namun tetap menunjukkan perilaku mirip dengan Lint, seperti misalnya Rubocop untuk bahasa pemrograman Ruby.
Linter Beraksi
Untuk mencontohkan bagaimana umumnya linter bekerja, saya akan mendemonstrasikan penggunaan ESLint pada suatu file dalam proyek Node.js + Express saya. Instalasi lokal (hanya tersedia dalam proyek yang sedang aktif) dapat dilakukan dengan mengeksekusi npm i eslint --save-dev
dan diinisialisasi dengan menjalankan ./node_modules/.bin/eslint --init
.
Saat inisialisasi, kita dapat memilih untuk memakai konfigurasi yang populer. Konfigurasi yang berisi peraturan-peraturan penulisan kode tersebut nantinya akan menjadi panduan bagi linter dalam menganalisis kode kita. Dalam demonstrasi ini saya menggunakan konfigurasi Airbnb.
Penjelasan mendetail tentang konfigurasi Airbnb dapat dilihat di sini. Kemudian, berikut adalah file yang akan dievaluasi oleh ESLint, file Javascript ini adalah entry point untuk sebuah aplikasi Node.js berbasis Express.
Kode tersebut sudah berjalan dengan baik, tapi apakah sudah sesuai standar (tinggi) yang diterapkan Airbnb? Mari evaluasi dengan ESLint.
Ternyata terdapat 12 masalah dengan rincian 9 error dan 3 warning pada kode yang hanya beberapa baris tersebut. Selain menghitung jumlah 'pelanggaran' terhadap konfigurasi yang kita gunakan, ESLint juga memberitahu lokasi dan tipe pelanggaran yang ditemukannya dalam kode kita. Ini bisa menjadi ilustrasi cara kerja linter modern yang bisa kita dapati di jagat internet, kurang lebih semua linter bekerja dengan prinsip yang sama seperti ini.
Apakah Lint Wajib Dilakukan?
Menurut saya, lint wajib dilakukan terhadap sebesar mungkin proporsi kode yang kita tulis. Saya pribadi mewajibkan diri saya untuk memeriksa kode saya dengan linter setiap sebelum melakukan commit pada sebuah repositori Git. Hal itu perlu dilakukan terutama untuk meningkatkan kualitas kode yang kita tulis, mengurangi kemungkinan munculnya bug, dan mengajarkan diri kita untuk menulis kode yang rapi.
Namun, hal yang perlu diingat adalah linter hanya mengevaluasi penulisan dari kodenya saja, sementara kualitas logika program tetap ditentukan dari kapasitas programmer-nya. Bahkan, kadang kita menemukan kasus-kasus di mana saran dari linter malah akan merusak alur logika yang kita buat. Karena itu, kita masih harus mengutamakan kapasitas kita sebagai programmer dalam penulisan kode, dan tidak hanya berpatok kepada linter.
Automasi Proses Lint
Saya menyebutkan bahwa saya sedang membiasakan diri untuk melakukan lint terhadap kode saya setiap sebelum melakukan commit. Tentu cara yang paling mudah untuk membiasakan diri - menjaga dari lupa atau khilaf - adalah dengan meng-automasi proses tersebut. Git memungkinkan automasi tersebut untuk dicapai, dengan fitur Git Hooks.
Git Hooks memungkinkan kita untuk mengeksekusi script setiap sebelum atau sesudah event-event tertentu dalam workflow Git. Beberapa di antaranya yang adalah pre-commit yang dieksekusi setiap sebelum git-commit
, post-commit yang dieksekusi setelah git commit
, post-merge yang dieksekusi setelah git merge
, dan lain-lain, yang terdokumentasi beserta contohnya di sini.
Idenya adalah, kita dapat mengeksekusi linter dengan sebuah script yang ditempatkan sebagai pre-commit script. Dengan begitu, kode kita akan di-lint sebelum dapat di-commit, dan jika linter melaporkan terdapat pelanggaran pada kode kita (via exit code), proses commit akan dibatalkan oleh Git. Lebih detailnya akan saya bahas di lain tempat.
Dengan melakukan lint secara rutin, kita akan menyadari bahwa kode yang kita tulis semakin rapi dan bersih. Selain itu, kita juga dapat mengurangi beban bagi reviewer kode kita, dan juga mengurangi potensi munculnya bug pada program kita.