Lompat ke konten
Kembali ke modul

Testing, Debugging, dan Kualitas Kode · 6/7

Linter, formatter, dan CI

Biarkan mesin berdebat soal titik koma supaya manusianya bisa berdebat soal desain.

Baca 25 menit

Setelah pelajaran ini kamu bisa

  • Menjelaskan apa yang ditangkap linter yang tidak ditangkap type checker
  • Mengatur format sekali lalu berhenti mendiskusikannya
  • Membaca dan memperbaiki error lint alih-alih mematikannya
  • Menyiapkan CI supaya tidak ada yang belum diperiksa masuk ke main

Tiga alat berbeda memeriksa tiga hal berbeda, dan mencampuradukkannya menghabiskan banyak sekali perdebatan.

AlatMemeriksaContoh
FormatterTampilan kodenyaIndentasi, panjang baris, gaya tanda kutip
Type checkerApakah type-nya sepakatstring dikirim di tempat yang mengharapkan number
LinterPola yang sah tapi salahVariable tak terpakai, await yang hilang, pemakaian hook yang salah

Linter-nya yang menarik. Ia menangkap kode yang berhasil compile, lolos type-check, dan tetap sebuah bug.

Coba sendiri

Dua aturan lint sungguhan, diimplementasikan atas baris-baris kode. Keduanya menemukan bug yang tidak bisa ditemukan type checker.

Hasil

Tekan Jalankan untuk melihat hasilnya.

Ini jalan di browser kamu, di dalam sandbox. Apa pun yang kamu tulis di sini tidak bisa merusak situs.

Format bukan bahan diskusi

Pilih sebuah formatter, commit konfigurasinya, jalankan saat menyimpan, dan jangan lagi mendiskusikan gaya. Setiap menit yang dihabiskan soal gaya tanda kutip di code review adalah menit yang tidak dipakai memikirkan apakah kodenya benar.

CI

Continuous integration menjalankan pemeriksaanmu di setiap push, di mesin yang bukan milikmu. Bagian terakhir itulah yang membuatnya bernilai: ia tidak punya sisa node_modules, tidak punya file yang belum di-commit, dan tidak punya environment variable yang kamu lupa sudah kamu atur.

yaml
# .github/workflows/ci.yml
name: CI
on: [push, pull_request]

jobs:
  verify:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: oven-sh/setup-bun@v2
      - run: bun install --frozen-lockfile   # fail if the lockfile is stale
      - run: bun run lint
      - run: bunx tsc --noEmit               # types are NOT checked by the build
      - run: bun run test
      - run: bun run build
--frozen-lockfile adalah yang penting: ia gagal alih-alih diam-diam memperbarui dependency, jadi CI menguji tepat apa yang kamu commit.

Tugas praktik

Tambahkan script verify ke proyek ini — bun run lint && bunx tsc --noEmit && bun run test — lalu jalankan. Lalu masukkan sebuah variable tak terpakai di file mana pun dan jalankan lagi; catat langkah mana yang gagal dan bahwa langkah setelahnya tidak pernah jalan. Lalu tulis file workflow CI di atas dan push ke sebuah branch.

Hasil yang diharapkan

Lint gagal lebih dulu, dan `&&` menghentikan sisanya.