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:

  1. Context-aware autocompletion
  2. Documentation for the Ruby core
  3. Gem support
  4. Linting and diagnostics
  5. 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

  1. https://solargraph.org/
    Diakses tanggal: 2023/07/08

  2. https://github.com/castwide/solargraph
    Diakses tanggal: 2023/07/08

  3. https://github.com/iftheshoefritz/solargraph-rails
    Diakses tanggal: 2023/07/08


Penulis

bandithijo

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

944e8edeccab170ecee65673676b75514b2f62ed