Perjalanan membuat plugin di nvim part 1

posted at 2024-07-06 • updated at -

Resources untuk membuat plugin di nvim menggunakan lua script itu tidak banyak yang saya temukan. Semoga catatan ini bisa membantu developer yang lain juga yang ingin membuat plugin nvim sendiri.

Nama plugin yang akan dibuat adalah muhfaris/devtools.nvim, yang berisi beberapa fungsi yang dapat mempermudah pekerjaan as developer. Kita akan menggunakan folke/lazy.nvim sebagai package managernya.

Struktur plugin

Diambil dari website resmi neovim, struktur plugin ini memiliki struktur seperti berikut:

~/.config/nvim
|-- after/
|-- ftplugin/
|-- lua/
|   |-- myluamodule.lua
|   |-- other_modules/
|       |-- anothermodule.lua
|       |-- init.lua
|-- plugin/
|-- syntax/
|-- init.vim

Buat direktori plugin

Buat direktori baru dengan nama devtools.nvim, beserta subdirektori yang dibutuhkan. Buat file init.lua didalam direktori lua/devtools dan devtools.lua didalam folder plugin.

.
├── lua
│   └── devtools
│       └── init.lua
├── plugin
│   └── devtools.lua
└── README.md

/Plugin

Direktori plugin menjadi entrypoint di nvim, yang akan dieksekusi ketika nvim dijalankan. Tahap pertama coba tambahkan kode simple print

print("muhfaris/devtools.nvim loaded")

/lua

Dalam folder lua terdapat devtools folder yang berisi kode plugin. Script-script lua yang dibuat dapat di organize disini.

Tambahkan kode berikut pada file lua/devtools/init.lua

local M = {}

function M.setup()
    print("heello from devtools")
end

Install Plugin

Sekarang pindah pada lazy.nvim, silahkan tambahkan plugin devtools pada lazy.nvim. dir adalah path direktori plugin, kamu dapat menggantinya dengan path direktori plugin kamu.

return {
  dir = "/home/muhfaris/Documents/projects/sourcecode/src/github.com/muhfaris/devtools.nvim",
 }

Output dari plugin muhfaris/devtools.nvim seperti berikut:

muhfaris/devtools.nvim loaded
heello from devtools
Press ENTER or type command to continue

Check IP Address

Kita akan membuat plugin muhfaris/devtools.nvim yang berfungsi untuk mengecek publik IP Address yang digunakan. Web yang akan digunakan beralamat di https://api.ipify.org, web ini akan memberikan response ip public yang kita gunakan.

Jika menggunakan curl, perintah yang digunakan seperti berikut:

curl https://api.ipify.org

devtools.lua

Update kode di devtools.lua dengan kode berikut:

require("devtools")

lua/devtools/init.lua

Ubah kode init.lua untuk melakukan call request ke web API https://api.ipify.org menjadi seperti berikut:

local M = {}

function M.setup(opts)
    local handle = io.popen("curl -s https://api.ipify.org")
    if handle == nil then
        vim.api.nvim_out_write("Failed to execute curl command.\n")
        return
    end

    local result = handle:read("*a")
    handle:close()

    if result then
        vim.api.nvim_out_write("Your public IP address is: " .. result .. "\n")
    else
        vim.api.nvim_out_write("Failed to retrieve IP address.\n")
    end
end

Output

Silahkan buka tab pada terminal kalian dan buka nvim, maka akan ditampilkan ip public yang kalian gunakan. Contoh hasil plugin seperti berikut:

Your public IP address is: xx3.1xx.10.9
Press ENTER or type command to continue

Keybinding

Disini kita akan menambahkan keybinding Leader + ip untuk memunculkan ip public yang kita gunakan dari pada menampilkannya ketika menjalankan nvim.

Ubah fungsi setup pada kode init.lua dengan kode berikut:

function M.setup(opts)
    opts = opts or {}

    vim.keymap.set("n", "<Leader>ip", function()
        M.fetch_ip()
    end, { desc = "Fetch your public IP address" })
end

Buat fungsi baru fetch_ip pada init.lua dengan kode berikut:

function M.fetch_ip()
    local handle = io.popen("curl -s https://api.ipify.org")
    if handle == nil then
        vim.api.nvim_out_write("Failed to execute curl command.\n")
        return
    end

    local result = handle:read("*a")
    handle:close()

    if result then
        vim.api.nvim_out_write("Your public IP address is: " .. result .. "\n")
    else
        vim.api.nvim_out_write("Failed to retrieve IP address.\n")
    end
end

Output

Buka nvim dan tekan tombol Leader + ip untuk memunculkan ip public yang kita gunakan.

Public IP Public IP