Mengubah Emacs menjadi IDE modern: memahami Language Server Protocol, menghidupkan Eglot dengan language server (pyright, clangd, typescript-language-server) untuk completion, jump-to-definition, dan diagnostics, serta memanfaatkan tree-sitter (*-ts-mode) untuk syntax highlighting akurat dengan grammar yang mudah diinstal.

Inilah episode yang menjawab pertanyaan paling umum: "Bisakah Emacs jadi IDE seperti VS Code?". Jawabannya: ya, dan bahkan lebih transparan — lewat Eglot (Language Server Protocol client bawaan Emacs sejak 29.1) dan tree-sitter untuk parsing sintaks.
Mengapa penting? Di dunia nyata, developer butuh completion yang pintar, jump-to-definition, rename yang aman, dan diagnosa error real-time. Sebelum LSP, Emacs menyediakan ini per-bahasa dengan setup manual yang berbeda-beda. LSP menyatukan semuanya: satu protokol, banyak bahasa, dan Eglot membuat setup-nya nyaris nol konfigurasi.
Language Server Protocol (LSP) memisahkan editor dari analisis bahasa:
Editor mengirim "file dibuka, file diubah"; server membalas "completion ini, definisi di sini, ada error di baris 5". Satu protokol → satu client (Eglot) → server per bahasa yang diinstall terpisah.
Keuntungan Eglot dibanding lsp-mode:
M-x eglot di buffer file.flymake (diagnostics) dan xref (jump-to-def).Eglot butuh language server eksternal — binary yang diinstall di sistem. Beberapa contoh:
pip install pyrightVerifikasi binary tersedia di PATH — Eglot menjalankannya sebagai proses eksternal:
pyright --version
clangd --version | head -1
gopls versionCara manual per buffer:
M-x eglot RET → mulai LSP pada file yang terbukaCara otomatis per bahasa (disarankan):
(use-package eglot
:ensure nil
:hook ((python-ts-mode . eglot-ensure)
(go-ts-mode . eglot-ensure)
(typescript-ts-mode . eglot-ensure)))
(setq eglot-autoshutdown t) ; matikan server saat buffer terakhir ditutupeglot-ensure di hook mode — setiap file bahasa itu terbuka, Eglot otomatis menyambung ke server. Perhatikan :ensure nil — Eglot sudah bawaan Emacs.
Setelah Eglot aktif (lihat *Messages* untuk log koneksi), kalian mendapat:
| Fitur | Shortcut | Aksi |
|---|---|---|
| Completion | C-M-i (atau otomatis via corfu) | Saran symbol & argumen |
| Jump to definition | M-. | Buka definisi (xref) |
| Kembali | M-, | Pop kembali dari definisi |
| Find references | M-? | Semua referensi symbol |
| Rename | C-x p r (project-rename) | Rename aman lintas file |
| Diagnostics | flymake otomatis | Error/peringatan di mode line |
| Hover | C-h . (describe-at-point) | Info type/penjelasan di point |
| Actions | M-x eglot-code-actions | Quick-fix (misal auto-import) |
| Format | M-x eglot-format | Format file dengan server |
Eglot menyalurkan errors ke flymake (bawaan). Buffer dengan error menampilkan marker di mode line; C-h e atau M-x flymake-show-buffer-diagnostics memperlihatkan detail. Penyelesaian cepat: M-x flymake-show-project-diagnostics untuk seluruh proyek.
Tip
Completion di Eglot membutuhkan frontend completion — di episode 19 kita pasang Corfu untuk menampilkan saran di dekat kursor, dan Vertico untuk minibuffer. Tanpa itu, completion tetap bekerja lewat C-M-i tapi tampilannya polos.
Tree-sitter menghasilkan parse tree penuh dari kode, sehingga highlight, indentation, dan struktur mengikuti syntax bahasa yang sebenarnya — bukan sekadar regex.
Mode tree-sitter Emacs memakai akhiran -ts-mode:
python-ts-mode go-ts-mode typescript-ts-mode
c-ts-mode ruby-ts-mode elixir-ts-mode
rust-ts-mode html-ts-mode php-ts-modeEmacs 30 menampilkan banyak bahasa ts secara otomatis jika grammar tersedia. Emacs 31 bahkan mengotomatiskan instalasi grammar dengan treesit-auto-install-grammar.
M-x treesit-available-p RET → t (jika tree-sitter tersedia)
C-h v treesit-language-source-alist RET → daftar grammar yang dikenalJika grammar bahasa belum ada, instal:
M-x treesit-install-language-grammar RET → pilih bahasa → Emacs build grammarSetelah grammar tersedia, file dibuka dengan mode ts otomatis.
Mode klasik (python-mode) | Mode ts (python-ts-mode) | |
|---|---|---|
| Parsing | Regex + teks | Parse tree (AST) |
| Highlight | Cukup akurat | Sangat akurat (nested scopes) |
| Indentation | Aturan template | Berdasarkan struktur |
| Manfaat ekstra | — | Pendukung struktur (misal untuk font-lock yang lebih detail) |
Emacs 30 default ke mode ts bila grammar ada. Kalian bisa memaksa:
M-x python-ts-mode RETatau mengatur treesit-preferred-language-alist di init.
Membangun setup IDE lengkap untuk dua bahasa:
(use-package eglot
:hook ((python-ts-mode . eglot-ensure)
(typescript-ts-mode . eglot-ensure)))
;; Pastikan mode ts dipakai
(add-to-list 'major-mode-remap-alist '(python-mode . python-ts-mode))
(add-to-list 'major-mode-remap-alist '(typescript-mode . typescript-ts-mode))
;; Tampilkan error di mode line dengan flymake
(add-hook 'prog-mode-hook #'flymake-mode)Sekarang buka app.py: Eglot otomatis menyambung ke pyright, completion & diagnosa bekerja, dan highlight memakai tree-sitter. Kalian punya IDE — di dalam editor yang sudah 40 tahun.
error in process sentinel: Couldn't connect — artinya binary server tidak ada di PATH. Install dulu, atau set eglot-server-programs untuk path eksplisit.eglot per buffer atau mode ts hanya untuk file wajar.treesit-language-source-alist; instal via treesit-install-language-grammar.C-M-i.Pada episode 16 ini, kalian telah mengubah Emacs menjadi IDE modern.
Inti yang harus dibawa pulang:
M-x eglot / eglot-ensure di hook mode; pyright, clangd, ts-server, gopls untuk bahasa masing-masing.M-. jump-to-def, M-? references, flymake diagnostics, eglot-rename.*-ts-mode.treesit-auto-install-grammar — instalasi grammar otomatis.Di episode 17 selanjutnya, kita mencari kode lintas proyek: project.el & ripgrep — project-find-file, project search dengan grep/ripgrep terintegrasi, dan workflow menjelajah codebase besar dari satu buffer. Sampai jumpa di episode 17!