Jawaban singkat untuk pertanyaan yang paling sering diajukan pembaca tentang topik ini.
01Apa yang ditambahkan plugin LSP ke Claude Code?
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.
02Apakah plugin LSP Claude Code memasangkan language server-nya untuk saya?
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.
03Bahasa apa saja yang punya plugin LSP resmi Claude Code?
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.
04Kenapa LSP server kustom saya tidak muncul di mana pun?
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.
05Apakah plugin LSP memperlambat Claude Code?
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.
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.
Apa yang benar-benar didapat Claude
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.
Sebelas bahasa, dan biner yang Anda sediakan
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.
Ketika server-nya tak mau start
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.
Menulis sendiri untuk bahasa yang belum didukung
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.
Kenapa ia mengubah perilaku lebih dari kedengarannya
Membaca daftar kemampuannya meremehkan ini, karena bagian menariknya adalah apa yang berhenti terjadi ketimbang apa yang mulai terjadi:
Claude berhenti menebak apakah sebuah simbol adalah yang dimaksudnya. Penggantian nama yang menyentuh nama yang dipakai dua tipe berbeda adalah kasus klasik ketika pencarian teks diam-diam melakukan hal yang salah.
Umpan baliknya memendek dari sebuah build menjadi sebuah suntingan. Error dikoreksi di dalam giliran yang menyebabkannya, yang mencegah refactor panjang menumpuk setumpuk kegagalan untuk diurai di akhir.
Penjelajahan jadi lebih murah. Mengikuti hierarki panggilan adalah satu operasi ketimbang serangkaian pencarian yang hasilnya harus dibaca dan disaring.
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.
Monorepo, dan diagnostik yang keliru
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.
Menyimpan yang memang Anda pakai
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.