From 8c9db7eeb9c84f0b018504ccd8f112970a717bb2 Mon Sep 17 00:00:00 2001 From: CPea Date: Mon, 7 Apr 2025 22:13:47 +0700 Subject: [PATCH 1/5] fix: options cannot be set by user --- lua/relative-toggle/init.lua | 45 +++++++++++++----------------------- 1 file changed, 16 insertions(+), 29 deletions(-) diff --git a/lua/relative-toggle/init.lua b/lua/relative-toggle/init.lua index 03d9ad8..77c05ed 100644 --- a/lua/relative-toggle/init.lua +++ b/lua/relative-toggle/init.lua @@ -1,26 +1,13 @@ local M = {} -local config = require "relative-toggle.config" -local logs = require "relative-toggle.logs" - ----creates an autocommand event handler. ----@param event object ----@param opts? table -local function create_autocmd(event, opts) - local event_ok, error = pcall(vim.api.nvim_create_autocmd, event, opts) - - if not event_ok then - logs.error(error) - end -end - --- to keep the combination of number and relativenumber +-- To keep the combination of number and relativenumber local current_number = vim.o.number ----@param relative boolean #whether relativenumber should be set ----@param redraw boolean #whether to redraw the screen +---Set relative number +---@param relative boolean #Whether relative number should be set +---@param redraw boolean #Whether to redraw the screen local function set_relativenumber(relative, redraw) - -- ignore for buffer or window with these off by default + -- Ignore for buffer or window with number and relative number off by default if not vim.o.number and not vim.o.relativenumber then return end @@ -31,33 +18,33 @@ local function set_relativenumber(relative, redraw) vim.opt.relativenumber = relative and not in_insert_mode if redraw then - vim.cmd "redraw" + vim.cmd.redraw() end end function M.setup(user_config) - local events = config.events - local augroup = vim.api.nvim_create_augroup("relative-toggle", {}) + local config = require "relative-toggle.config" + local augroup = vim.api.nvim_create_augroup("relative-toggle", { clear = true }) vim.opt.relativenumber = true config:extend(user_config) - create_autocmd(events.on, { + vim.api.nvim_create_autocmd(config.events.on, { pattern = config.pattern, group = augroup, - desc = "turn relative number on", - callback = function(ev) - set_relativenumber(true, ev.event == "CmdlineEnter") + desc = "Turn relative number on", + callback = function(args) + set_relativenumber(true, args.event == "CmdlineEnter") end, }) - create_autocmd(events.off, { + vim.api.nvim_create_autocmd(config.events.off, { pattern = config.pattern, group = augroup, - desc = "turn relative number off", - callback = function(ev) - set_relativenumber(false, ev.event == "CmdlineEnter") + desc = "Turn relative number off", + callback = function(args) + set_relativenumber(false, args.event == "CmdlineEnter") end, }) end From 9c01f4bd158ec2ee579d8371240e2ca8f96289c1 Mon Sep 17 00:00:00 2001 From: CPea Date: Mon, 7 Apr 2025 22:17:32 +0700 Subject: [PATCH 2/5] docs: bump minimum neovim version to `0.8.0` --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 75d26f6..56b82a3 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ use "cpea2506/relative-toggle.nvim" ### Requirements -- Neovim >= 0.7.2 +- Neovim >= 0.8.0 ## ⚙️ Setup From c693133994559d0bcadf086e0f311ba25a0f0ab3 Mon Sep 17 00:00:00 2001 From: CPea Date: Mon, 7 Apr 2025 22:38:30 +0700 Subject: [PATCH 3/5] refactor: move current number value into setup function --- lua/relative-toggle/init.lua | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lua/relative-toggle/init.lua b/lua/relative-toggle/init.lua index 77c05ed..20c01dc 100644 --- a/lua/relative-toggle/init.lua +++ b/lua/relative-toggle/init.lua @@ -1,12 +1,10 @@ local M = {} --- To keep the combination of number and relativenumber -local current_number = vim.o.number - ---Set relative number ---@param relative boolean #Whether relative number should be set +---@param number boolean #Whether number should be set ---@param redraw boolean #Whether to redraw the screen -local function set_relativenumber(relative, redraw) +local function set_relativenumber(relative, number, redraw) -- Ignore for buffer or window with number and relative number off by default if not vim.o.number and not vim.o.relativenumber then return @@ -14,7 +12,7 @@ local function set_relativenumber(relative, redraw) local in_insert_mode = vim.api.nvim_get_mode().mode == "i" - vim.opt.number = not relative or in_insert_mode or current_number + vim.opt.number = not relative or in_insert_mode or number vim.opt.relativenumber = relative and not in_insert_mode if redraw then @@ -28,6 +26,9 @@ function M.setup(user_config) vim.opt.relativenumber = true + -- To keep the combination of number and relativenumber + local current_number = vim.o.number + config:extend(user_config) vim.api.nvim_create_autocmd(config.events.on, { @@ -35,7 +36,7 @@ function M.setup(user_config) group = augroup, desc = "Turn relative number on", callback = function(args) - set_relativenumber(true, args.event == "CmdlineEnter") + set_relativenumber(true, current_number, args.event == "CmdlineEnter") end, }) @@ -44,7 +45,7 @@ function M.setup(user_config) group = augroup, desc = "Turn relative number off", callback = function(args) - set_relativenumber(false, args.event == "CmdlineEnter") + set_relativenumber(false, current_number, args.event == "CmdlineEnter") end, }) end From 7945a9a0c72e8c374dd24417f11b905be41f3041 Mon Sep 17 00:00:00 2001 From: CPea Date: Mon, 7 Apr 2025 23:57:41 +0700 Subject: [PATCH 4/5] test: update tests --- neovim.yml | 6 +++++ tests/spec/config_spec.lua | 51 ++++++++++++++++++++++++++++++-------- 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/neovim.yml b/neovim.yml index 31614c0..18602ba 100644 --- a/neovim.yml +++ b/neovim.yml @@ -7,6 +7,12 @@ globals: args: - type: any - type: ... + assert.is_true: + args: + - type: any + assert.is_false: + args: + - type: any assert.is_not.equal: args: - type: any diff --git a/tests/spec/config_spec.lua b/tests/spec/config_spec.lua index 47d58f0..88bd7c6 100644 --- a/tests/spec/config_spec.lua +++ b/tests/spec/config_spec.lua @@ -1,18 +1,47 @@ +local config = require "relative-toggle.config" +local relative_toggle = require "relative-toggle" + +describe("Config options", function() + it("could be indexed without options field", function() + assert.equal("*", config.pattern) + assert.are.same(config.events.on, { "BufEnter", "FocusGained", "InsertLeave", "WinEnter", "CmdlineLeave" }) + assert.are.same(config.events.off, { "BufLeave", "FocusLost", "InsertEnter", "WinLeave", "CmdlineEnter" }) + end) +end) + describe("Override config", function() - local relative_toggle = require "relative-toggle" - local config = require "relative-toggle.config" + local expected = { + pattern = "*.toml", + events = { + on = "BufWinEnter", + off = "BufWinLeave", + }, + } + + relative_toggle.setup(expected) it("should change default config", function() - local expected = { - pattern = "*.toml", - events = { - on = "BufWinEnter", - off = "BufWinLeave", - }, - } + assert.equal(expected.pattern, config.pattern) + assert.are.same(expected.events, config.events) + end) + + it("should change default autocmds", function() + local function tbl_contains(table, value) + return vim.tbl_contains(table, function(v) + for k, _ in pairs(value) do + if v[k] ~= value[k] then + return false + end + end + + return true + end, { predicate = true }) + end - relative_toggle.setup(expected) + local autocmds = vim.api.nvim_get_autocmds { group = "relative-toggle" } - assert.are.same(expected, config.options) + assert.is_true(tbl_contains(autocmds, { pattern = "*.toml", event = "BufWinEnter" })) + assert.is_true(tbl_contains(autocmds, { pattern = "*.toml", event = "BufWinLeave" })) + assert.is_false(tbl_contains(autocmds, { pattern = "*.toml", event = "InsertEnter" })) end) end) From 6f1438c66111e547d0709f7794f5022d962a984b Mon Sep 17 00:00:00 2001 From: CPea Date: Tue, 8 Apr 2025 00:08:38 +0700 Subject: [PATCH 5/5] test: add tests for relative number --- tests/spec/config_spec.lua | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/tests/spec/config_spec.lua b/tests/spec/config_spec.lua index 88bd7c6..fe960eb 100644 --- a/tests/spec/config_spec.lua +++ b/tests/spec/config_spec.lua @@ -38,10 +38,29 @@ describe("Override config", function() end, { predicate = true }) end - local autocmds = vim.api.nvim_get_autocmds { group = "relative-toggle" } + local groupid = vim.api.nvim_create_augroup("relative-toggle", { clear = false }) + local autocmds = vim.api.nvim_get_autocmds { group = groupid } assert.is_true(tbl_contains(autocmds, { pattern = "*.toml", event = "BufWinEnter" })) assert.is_true(tbl_contains(autocmds, { pattern = "*.toml", event = "BufWinLeave" })) assert.is_false(tbl_contains(autocmds, { pattern = "*.toml", event = "InsertEnter" })) end) + + it("should change default relativenumber", function() + local groupid = vim.api.nvim_create_augroup("relative-toggle", { clear = false }) + + vim.api.nvim_exec_autocmds(config.events.on, { + group = groupid, + pattern = config.pattern, + }) + + assert.is_true(vim.o.relativenumber) + + vim.api.nvim_exec_autocmds(config.events.off, { + group = groupid, + pattern = config.pattern, + }) + + assert.is_false(vim.o.relativenumber) + end) end)