Sejak memasang "dark" theme, saya cenderung menjadi malas menulis. Untuk sementara, dark theme saya disable dulu yaa. Terima kasih (^_^) (bandithijo, 2024/09/15) ●
Pendahuluan
Language Server Protocol sangat membantu developer saat proses membangun aplikasi. Solargraph adalah salah satu LSP yang populer digunakan dikalangan Ruby programmer dan Rails developer. Catatan ini akan mendokumentasikan cara saya melakukan setup terhadap Solargraph pada Rails project di Neovim.
Sekilas tentang Solargraph
Dikutip dari halaman official site dari solargraph,
Solargraph is a Ruby language server and suite of static analysis tools. The language server provides intellisense, autocompletion, diagnostics, and other language features for editors and IDEs with language client capabilities. The static analysis tools check code for type safety.
Fitur yang ditawarkan, antara lain:
- Context-aware autocompletion
- Documentation for the Ruby core
- Gem support
- Linting and diagnostics
- Type checking
Ruby programmer atau Rails developer pasti sudah familiar dengan gem ini.
Setup
Setup Solargraph di Neovim (Lua)
Saya menggunakan Neovim dengan konfiguasi lua.
local on_attach = function(client, bufnr)
if client.server_capabilities.documentSymbolProvider then
navic.attach(client, bufnr)
end
end
require("lspconfig").solargraph.setup({
on_attach = on_attach
})
Solargraph belum akan berjalan karena kita perlu memasang Solargraph gem terlebih dahulu.
Setup Solargraph di Rails project
Install solargraph & solargraph-rails
Gem yang diperlukan tentu saja solargraph
dan juga solargraph-rails
. Namun, kita tidak perlu memasukkannya ke dalam Gemfile
project kita.
Cukup install sendiri di dalam lokal project kita. Karena bisa jadi anggota tim kita tidak menggunakan Solargraph.
$ gem install solargraph solargraph-rails
Initialize file konfigurasi dengan menjalankan perintah di bawah pada direktori root dari Rails project.
$ solargraph config
Perintah di atas, akan otomatis membuatkan kita file .solargraph.yml
di Root Rails project dan sudah memiliki default template di dalamnya.
Modifikasi isinya seperti di bawah ini
---
include:
- "**/*.rb"
exclude:
- spec/**/*
- test/**/*
- vendor/**/*
- ".bundle/**/*"
require:
- rails
domains: []
reporters:
- rubocop
- require_not_found
formatter:
rubocop:
cops: safe
except: []
only: []
extra_args: []
require_paths: []
plugins:
- solargraph-rails
max_files: 5000
Yang saya tambahkan adalah bagian,
require:
- rails
dan
plugins:
- solargraph-rails
Rubocop sebagai Linter
Secara default Solargraph menggunakan Rubocop sebagai linter. Pasang juga.
$ gem install rubocop
Kalau mau menginisialisasi file confignya gunakan perintah di bawah ini
$ rubocop --auto-gen-config
Perintah di atas akan mengenerate konfigurasi default untuk Rubocop yaitu file .rubocop.yml
dan .rubocop_todo.yml
di Root Rails prject kita.
Sip!
Konfigurasi sudah selesai, dengan begini kita sudah dapat memanfaatkan kemampuan LSP Solargraph di Neovim kita.
Keymap | Action |
---|---|
g+d | Jump to definition |
shift+k | Show hover documentation |
g+r | Open quickfix with all references to method |
r+n | Rename method and update references |
Daftarkan .solargraph.yml, .rubocop.yml, dan .rubocop_todo.yml ke .gitignore
Agar tidak mengganggu isi dari direktori Root Rails project, kita perlu mendaftarkan file-file konfigurasi yaml yang telah dibuat ke dalam file .gitignore
.
/.rubocop*.yml
/.solargraph.yml
Pesan Penulis
Terima kasih sudah mampir yaa.
Referensi
-
https://solargraph.org/
Diakses tanggal: 2023/07/08 -
https://github.com/castwide/solargraph
Diakses tanggal: 2023/07/08 -
https://github.com/iftheshoefritz/solargraph-rails
Diakses tanggal: 2023/07/08
Lisensi
Atribusi-NonKomersial-BerbagiSerupa 4.0 Internasional (CC BY-NC-SA 4.0)
Penulis
My journey kicks off from reading textbooks as a former Medical Student to digging bugs as a Software Engineer – a delightful rollercoaster of career twists. Embracing failure with the grace of a Cat avoiding water, I've seamlessly transitioned from Stethoscope to Keyboard. Armed with ability for learning and adapting faster than a Heart Beat, I'm on a mission to turn Code into a Product.
- Rizqi Nur Assyaufi