LogicScope JS
Analisis statis untuk kualitas logika kode JavaScript — bukan sekadar gaya penulisan.
LogicScope JS membaca kode Anda melalui Abstract Syntax Tree (AST), mendeteksi 31 pola kesalahan logika dan kompleksitas, lalu merangkumnya menjadi satu skor kualitas 0–100 yang bisa Anda pantau saat mengetik.
Setiap temuan tidak hanya memberi tahu apa yang salah, tetapi juga mengapa itu bermasalah dan bagaimana memperbaikinya.
Kenapa LogicScope JS?
Linter umumnya menjawab "aturan mana yang dilanggar?". LogicScope JS menjawab "seberapa sehat logika kode ini?".
|
Linter umum |
LogicScope JS |
| Keluaran |
Daftar pelanggaran |
Daftar pelanggaran + skor kualitas |
| Pesan |
Satu baris |
Masalah → Penyebab → Saran → Pratinjau perbaikan |
| Perbaikan |
Semua atau tidak sama sekali |
Dipilih satu per satu, dikelompokkan menurut risiko |
| Konfigurasi |
Perlu berkas konfigurasi |
Langsung jalan tanpa setup |
Instalasi
- Buka Visual Studio Code
- Tekan
Ctrl+Shift+X untuk membuka panel Extensions
- Cari LogicScope JS
- Klik Install
Tidak ada konfigurasi tambahan yang diperlukan.
Memulai dalam 30 Detik
1. Buka berkas JavaScript
Berkas berekstensi .js atau .jsx.
2. Klik ikon LogicScope JS di Activity Bar
Ikon kaca pembesar di sisi kiri layar.
3. Tekan tombol ANALYSIS CORRECTION
Panel akan menampilkan skor kualitas beserta seluruh temuan.
4. Telusuri temuan
Klik teks Ln 12, Col 5 pada temuan mana pun untuk melompat ke lokasinya di editor.
5. Terapkan perbaikan
Centang perbaikan yang diinginkan, lalu tekan REPAIR CODE. Skor akan langsung diperbarui.
Setelah langkah ketiga, analisis berjalan otomatis setiap kali Anda mengetik. Tidak perlu menekan tombol lagi.
Mengenal Panel Analisis
┌────────────────────────────────┐
│ contoh.js 10:42:31 │ ← nama berkas & waktu analisis
│ │
│ 49 /100 · Kurang │ ← skor kualitas logika
│ ▓▓▓▓▓▓▓▓▓░░░░░░░░░░ │
│ │
│ 4 2 3 │
│ Error Warning Saran │ ← rekap tingkat keparahan
│ │
│ TEMUAN (9) │
│ ┌────────────────────────────┐ │
│ │ ☑ Pilih semua (6) │ │ ← seleksi perbaikan massal
│ │ [✔ Hanya aman] [Bersihkan] │ │
│ └────────────────────────────┘ │
│ │
│ ☑ ❌ LS001 · constant-condition│
│ Kondisi selalu bernilai... │ ← MASALAH
│ Ln 8, Col 3 [Logika] │
│ Ekspresi kondisi berupa... │ ← PENYEBAB
│ 💡 Ganti dengan kondisi... │ ← SARAN
│ ✔ Aman diterapkan otomatis │
│ ┌──────────────────────┐ │
│ │ total = total + 1000;│ │ ← PRATINJAU PERBAIKAN
│ └──────────────────────┘ │
│ │
│ ───────────────────────────── │
│ 🔍 ANALYSIS CORRECTION │
│ 🔧 REPAIR CODE (3) │
│ ● LIVE 3 dipilih · aman │
└────────────────────────────────┘
Memahami Skor Kualitas
Skor dimulai dari 100 dan dikurangi berdasarkan temuan yang ditemukan:
Penalti = (Error × 10) + (Warning × 4) + (Saran × 1)
Skor = 100 − Penalti (minimum 0)
| Skor |
Predikat |
Artinya |
| 90–100 |
Sangat Baik |
Nyaris tanpa masalah logika |
| 75–89 |
Baik |
Beberapa hal kecil perlu dirapikan |
| 60–74 |
Cukup |
Ada masalah yang sebaiknya ditangani |
| 40–59 |
Kurang |
Beberapa kesalahan logika perlu diperbaiki |
| 0–39 |
Perlu Refactor |
Kualitas logika bermasalah serius |
Bobot mencerminkan kepastian, bukan besarnya dampak. Temuan Error hampir pasti merupakan bug, sedangkan Saran adalah praktik yang lebih baik.
Tiga Jenis Perbaikan
Ini pembeda utama LogicScope JS. Tidak semua perbaikan sama amannya, jadi setiap usulan diberi klasifikasi risiko:
| Tampilan |
Klasifikasi |
Arti |
| ☑ |
Aman |
Tidak mengubah perilaku program. Tercentang otomatis. |
| ☐ |
Usulan |
Perbaikan benar, tetapi mengubah perilaku atau berpotensi menutupi bug asli. Perlu Anda tinjau. |
| (tanpa kotak) |
Manual |
Perbaikan memerlukan keputusan desain yang tidak bisa disimpulkan otomatis. |
Contoh klasifikasi Usulan: mengganti == menjadi === memang benar, tetapi bisa mengubah hasil perbandingan jika kode lama mengandalkan konversi tipe. Karena itu tidak diterapkan tanpa persetujuan Anda.
Contoh klasifikasi Manual: pada if (a.stok === a.stok), LogicScope JS tahu perbandingan ini selalu bernilai true — tetapi tidak tahu operand mana yang seharusnya ditulis. Hanya Anda yang tahu.
Daftar Aturan Deteksi
🔴 Logika (13 aturan)
| Kode |
Aturan |
Contoh yang terdeteksi |
LS001 |
constant-condition |
if (true) { ... } |
LS002 |
assignment-in-condition |
if (status = cek()) |
LS003 |
duplicate-condition |
if (a) ... else if (a) ... |
LS005 |
loose-equality |
harga == "0" |
LS012 |
nan-comparison |
nilai === NaN |
LS013 |
self-comparison |
a.stok === a.stok |
LS014 |
duplicate-object-key |
{ kurir: "a", kurir: "b" } |
LS015 |
identical-branches |
if (x) { f() } else { f() } |
LS021 |
duplicate-case |
case 1: ... case 1: ... |
LS022 |
self-assign |
o.stok = o.stok |
LS023 |
duplicate-params |
function f(a, b, a) |
LS028 |
return-assign |
return total = 100 |
LS029 |
sparse-array |
[1, , 3] |
LS030 |
unsafe-negation |
if (!kunci in objek) |
🟡 Kompleksitas (6 aturan)
| Kode |
Aturan |
Ambang |
LS006 |
deep-nesting |
Lebih dari 3 tingkat |
LS007 |
high-complexity |
Cyclomatic complexity di atas 10 |
LS008 |
too-many-params |
Lebih dari 3 parameter |
LS017 |
long-function |
Lebih dari 50 baris |
LS020 |
nested-ternary |
Ternary di dalam ternary |
LS026 |
function-in-loop |
Fungsi dideklarasikan di dalam perulangan |
LS027 |
await-in-loop |
await dijalankan berurutan dalam perulangan |
🔵 Alur Kendali (4 aturan)
| Kode |
Aturan |
Contoh yang terdeteksi |
LS004 |
unreachable-code |
Kode setelah return |
LS009 |
empty-block |
catch (e) { } |
LS018 |
switch-fallthrough |
case tanpa break |
LS019 |
else-after-return |
else setelah cabang yang selalu return |
⚪ Gaya Penulisan (5 aturan)
| Kode |
Aturan |
Contoh yang terdeteksi |
LS010 |
no-var |
var nama = ... |
LS011 |
no-console |
console.log(...) tertinggal |
LS016 |
boolean-comparison |
akun.aktif === true |
LS024 |
lonely-if |
else { if (...) { ... } } |
LS025 |
debugger-statement |
debugger; tertinggal |
⚫ Sintaks (1 aturan)
| Kode |
Aturan |
Keterangan |
LS000 |
syntax-error |
Kode gagal diurai; analisis aturan lain dihentikan |
Analisis Real-Time
Setelah analisis pertama dijalankan, LogicScope JS memantau perubahan kode secara otomatis.
- Indikator hijau berdenyut pada panel dan status bar menandakan mode ini aktif
- Analisis berjalan 500 ms setelah Anda berhenti mengetik, bukan setiap ketukan tombol
- Klik indikator pada status bar untuk menyalakan atau mematikannya
Kalau sedang bekerja pada berkas sangat besar dan terasa berat, matikan mode ini atau naikkan nilai jeda pada pengaturan.
Perintah
Dapat diakses melalui Command Palette (Ctrl+Shift+P):
| Perintah |
Fungsi |
LogicScope JS: Analysis Correction |
Menjalankan analisis pada berkas aktif |
LogicScope JS: Repair Code |
Menerapkan seluruh perbaikan berklasifikasi aman |
LogicScope JS: Aktifkan / Nonaktifkan Analisis Real-time |
Mengubah mode pemantauan otomatis |
LogicScope JS: Tampilkan Laporan Lengkap |
Membuka laporan teks lengkap di Output Channel |
Perbaikan juga tersedia lewat Quick Fix — arahkan kursor ke baris bermasalah lalu tekan Ctrl+.
Pengaturan
| Pengaturan |
Bawaan |
Keterangan |
logicscope-js.liveAnalysis |
true |
Analisis otomatis saat kode berubah |
logicscope-js.analysisDelay |
500 |
Jeda sebelum analisis dijalankan (milidetik, 100–5000) |
logicscope-js.analyzeOnOpen |
true |
Analisis otomatis saat berkas dibuka |
Pertanyaan Umum
Apakah kode saya dikirim ke server?
Tidak. Seluruh analisis berjalan sepenuhnya di komputer Anda, tanpa koneksi internet dan tanpa mengirim data ke mana pun.
Apakah bisa dipakai bersamaan dengan ESLint?
Bisa. Keduanya menggunakan sistem Diagnostic bawaan VS Code, sehingga temuan tampil berdampingan tanpa saling mengganggu.
Kenapa sebagian temuan tidak punya tombol perbaikan?
Karena perbaikannya memerlukan keputusan yang hanya Anda yang tahu jawabannya. Memaksakan perbaikan otomatis pada kasus seperti itu justru berisiko menyembunyikan bug alih-alih memperbaikinya.
Apakah mendukung TypeScript?
Belum. Saat ini hanya JavaScript (.js) dan JSX (.jsx).
Saat mengetik muncul error sintaks sesaat, apakah normal?
Ya. Kode yang sedang diketik sering belum lengkap, sehingga LS000 muncul sebentar lalu hilang sendiri. Naikkan analysisDelay bila terasa mengganggu.
Keterbatasan
LogicScope JS melakukan analisis berbasis AST tanpa data-flow analysis, type inference, maupun symbol table. Konsekuensinya:
- Konstanta tidak dilacak lintas baris —
const AKTIF = true; if (AKTIF) tidak terdeteksi sebagai kondisi tetap
- Analisis keterjangkauan hanya berlaku dalam satu blok, belum lintas blok
- Aturan
loose-equality tidak memeriksa tipe operand, sehingga bisa memberi peringatan pada perbandingan yang sebenarnya aman
Keterbatasan ini disampaikan secara terbuka agar Anda tahu persis apa yang bisa dan tidak bisa diandalkan dari alat ini.
Lisensi
MIT — lihat berkas LICENSE.