Plugin LSP Claude Code: Kecerdasan Kode Sungguhan

Dua hal. Setelah tiap suntingan file yang dibuat Claude, language server-nya melaporkan error dan peringatan balik, jadi error tipe dan import yang hilang muncul tanpa menjalankan compiler. Dan Claude bisa menavigasi kode dengan benar — lompat ke definisi, cari referensi, dapat info tipe saat hover, daftar simbol, dan telusuri hierarki panggilan — alih-alih bersandar pada pencarian teks.
Tidak. Plugin-nya mengonfigurasi sambungannya; binernya Anda pasang sendiri. Kalau ia hilang, tab Errors plugin menunjukkan bahwa eksekutabelnya tak ditemukan di path Anda, persis seperti bunyinya. Pasang biner untuk bahasa Anda lalu mulai ulang.
C dan C++, C#, Go, Java, Kotlin, Lua, PHP, Python, Rust, Swift, dan TypeScript masing-masing punya plugin di marketplace resmi. Untuk selainnya, Anda bisa menulis sendiri dengan menambahkan file konfigurasi LSP ke sebuah plugin berisi perintah server-nya, argumennya, dan pemetaan ekstensi file ke bahasa.
Entri dengan konfigurasi tidak sah dilewati diam-diam ketimbang dilaporkan, jadi ia tidak muncul di daftar server yang jalan maupun di tab Errors. Jalankan Claude Code dengan flag debug untuk melihat kenapa ia ditolak. Server yang terkonfigurasi benar tapi binernya hilang memang muncul di tab Errors.
Biayanya memori ketimbang kecepatan, dan tergantung proyeknya. Server seperti rust-analyzer dan pyright bisa memakai banyak di repository besar. Kalau itu menimbulkan masalah, mematikan plugin-nya masuk akal — Claude jatuh ke tool pencarian bawaannya. Monorepo juga bisa menghasilkan diagnostik import tak terselesaikan yang palsu kalau workspace-nya salah konfigurasi.

Ringkasan Utama
Plugin LSP menyambungkan sebuah language server ke Claude Code, yang memberi Claude dua hal yang selain itu tidak dimilikinya: diagnostik yang dilaporkan balik setelah tiap suntingan yang dibuatnya, dan navigasi yang menyelesaikan simbol ketimbang mencocokkan teks. Plugin-nya mengonfigurasi sambungannya; biner language server-nya Anda pasang sendiri.
Saya menyaksikan Claude mengganti nama sebuah method di seluruh basis kode TypeScript dengan mencari namanya, dan hasilnya lumayan — sampai di satu call site pada file di mana nama yang sama milik kelas berbeda. Grep tidak bisa membedakannya. Language server bisa, dan bedanya bukan peningkatan akurasi yang kecil melainkan jenis operasi yang berbeda.
Itulah seluruh argumen memasangnya, dan butuh sekitar dua menit. Tulisan ini membahas apa yang benar-benar didapat Claude, sebelas bahasa yang punya plugin resmi berikut biner yang dibutuhkan masing-masing, apa yang dilakukan ketika sebuah server tak mau start, menulis konfigurasi sendiri untuk bahasa yang belum ada, dan dua biaya sungguhannya — memori, serta positif palsu di monorepo yang konfigurasinya buruk.
Dua kemampuan, dan yang pertama mengubah perilaku lebih dari yang kedua. Begitu sebuah server berjalan, suntingan diperiksa saat terjadi ketimbang di ujung rantai perubahan yang panjang, artinya error yang muncul di langkah dua ketahuan di langkah dua ketimbang bertahan sampai kapan pun seseorang menjalankan build.
Dua kemampuannya:
| Kemampuan | Artinya dalam praktik |
|---|---|
| Diagnostik otomatis | Setelah tiap suntingan file yang dibuat Claude, language server-nya melaporkan error dan peringatan balik. Error tipe, import yang hilang, dan masalah sintaks muncul tanpa menjalankan compiler atau linter, dan Claude memperbaiki apa yang ia timbulkan di giliran yang sama |
| Navigasi kode | Lompat ke definisi, cari referensi, hover untuk info tipe, daftar simbol, cari implementasi, telusuri hierarki panggilan. Ketersediaannya bervariasi per bahasa dan lingkungan, tapi semuanya mengalahkan grep di basis kode tempat nama berulang |
Anda bisa membaca diagnostiknya sendiri. Ketika Claude Code menampilkan indikator semacam tiga isu diagnostik baru di dua file, tombol penampil transkrip membukanya. Itu layak dilakukan beberapa kali pertama, karena melihat apa yang dilaporkan server-nya memberi tahu apakah ia terkonfigurasi benar jauh lebih cepat ketimbang menunggu menyadari ketiadaannya.
Marketplace resmi membawa satu plugin untuk masing-masing. Polanya sama tiap kali: pasang plugin-nya, pasang binernya, mulai ulang. Tidak ada yang memasangkan binernya untuk Anda, dan kegagalannya ketika hilang bersifat jelas ketimbang misterius.
# Plugin Binary you install yourself
clangd-lsp clangd C / C++
csharp-lsp csharp-ls C#
gopls-lsp gopls Go
jdtls-lsp jdtls Java
kotlin-lsp kotlin-language-server Kotlin
lua-lsp lua-language-server Lua
php-lsp intelephense PHP
pyright-lsp pyright-langserver Python
rust-analyzer-lsp rust-analyzer Rust
swift-lsp sourcekit-lsp Swift
typescript-lsp typescript-language-server TypeScript
/plugin install typescript-lsp@claude-plugins-official
# The plugin configures the connection. It does NOT install the
# binary. "Executable not found in $PATH" in the /plugin Errors
# tab means exactly that and nothing worse.Dua kegagalan tampak mirip dan berarti hal berlawanan. Server yang start lalu gagal muncul di tab Errors plugin, paling sering dengan pesan bahwa eksekutabelnya tak ditemukan — artinya binernya tidak ada di path Anda dan perbaikannya adalah memasangnya. Entri dengan konfigurasi tidak sah justru dilewati diam-diam, jadi ia tidak muncul di mana pun.
Kasus kedua itulah yang membuang waktu. Kalau Anda sudah menambahkan sebuah server dan tak ada yang terjadi, serta tak ada yang muncul di tab Errors, anggap konfigurasinya salah ketimbang fiturnya tidak jalan, lalu jalankan Claude Code dengan flag debug untuk melihat alasannya. Memuat ulang plugin memungut perubahan tanpa mulai ulang, dan memang memuat ulang language server plugin bersama semua yang lain.
Untuk apa pun yang tak dicakup plugin resminya, sebuah language server adalah beberapa baris JSON di sebuah file di akar plugin Anda. Tiga field yang penting adalah perintah yang dijalankan, argumennya, dan pemetaan dari ekstensi file ke pengenal bahasa. Uji secara lokal dengan flag direktori sebelum Anda mengemasnya untuk orang lain.
// .lsp.json at the plugin root — NOT inside .claude-plugin/
{
"go": {
"command": "gopls",
"args": ["serve"],
"extensionToLanguage": {
".go": "go"
}
}
}
# Test it without installing anything:
claude --plugin-dir ./my-lsp-plugin
# Then check the /plugin Errors tab:
# "Executable not found in $PATH" -> the binary is missing
# nothing listed at all -> the entry was INVALID and
# silently skipped; run
# claude --debug to see why
# /reload-plugins picks up changes without restarting, and does
# reload plugin LSP servers along with everything else.Membaca daftar kemampuannya meremehkan ini, karena bagian menariknya adalah apa yang berhenti terjadi ketimbang apa yang mulai terjadi:
Biayanya adalah memori, dan di proyek besar itu nyata. Server seperti milik Rust dan Python bisa memakan sangat banyak di repository besar, sampai menimbulkan masalah di mesin yang sederhana. Kalau itu terjadi, mematikan plugin-nya dan membiarkan Claude jatuh ke tool pencarian bawaannya adalah jawaban yang sah, bukan kekalahan.
Di monorepo yang workspace-nya tidak dikonfigurasi seperti yang diharapkan language server-nya, Anda bisa mendapat error import tak terselesaikan untuk paket internal yang sebenarnya ter-build sempurna. Ini positif palsu dan tidak menghentikan Claude menyunting kodenya, tapi ia derau persis di kanal yang Anda pasangi server itu supaya bisa dipercaya — jadi lebih baik memperbaiki konfigurasi workspace-nya ketimbang belajar mengabaikan peringatannya.
Tiap plugin memakan sesuatu saat start dan di konteks, jadi nasihat jujurnya adalah memasang language server untuk bahasa yang benar-benar Anda kerjakan dan melewatkan sisanya. Claude Code membantu di sini: ia mendaftar plugin marketplace yang Anda pasang tapi tak Anda pakai setidaknya dua minggu sepanjang setidaknya sepuluh sesi, jadi plugin yang Anda tambahkan dengan optimistis akhirnya memberi tahu bahwa ia tak dibutuhkan.
Aktivitas language server dihitung sebagai pemakaian. Server yang mengirim diagnostik atau menjawab permintaan navigasi menandai plugin-nya sebagai terpakai, jadi plugin LSP yang diam-diam menjalankan tugasnya tidak akan ditandai tak terpakai — yang dulu tidak selalu benar, dan itulah alasan instalasi lama bisa tampak menganggur beberapa saat sebelum mulai dihitung dengan benar.
Pasang plugin untuk bahasa yang paling banyak Anda pakai, pasang binernya, lalu baca beberapa diagnostik pertama sendiri supaya Anda tahu sambungannya hidup. Kalau Anda bekerja di monorepo, perbaiki konfigurasi workspace-nya sejak awal ketimbang menoleransi positif palsu, karena kanal diagnostik yang sudah Anda biasakan abaikan lebih buruk daripada tidak ada. Dan kalau sebuah server memakan memori Anda di repository besar, matikan — tool pencarian bawaannya tidak lumpuh.
Sumber & bacaan lanjutan