refactor: use default settings in place of conditionals

- instead of checking for the existence of
      an option whenever that option may be
      accessed, initialize default settings and
      merge them with user-provided settings.

    - instead of looping through all excluded
      filetypes and comparing them to the current
      filetype, create a set from excluded
      filetypes and check if the current filetype
      is present.
main
McAuley Penney 2 years ago
parent 3d6f0c7d9f
commit 889dc71f20

@ -1,25 +1,30 @@
local M = {} local M = {}
local function is_excluded_ft(opts) local function list_to_set(list)
if not opts or not opts.filetype_exclude then local set = {}
return false
end
local ft = vim.api.nvim_buf_get_option(0, "filetype") for _, item in ipairs(list) do
set[item] = true
end
for _, entry in ipairs(opts.filetype_exclude) do return set
if entry == ft then end
return true
end
end
local function is_excluded_ft(opts)
if not opts.filetype_exclude then
return false return false
end
local ft = vim.api.nvim_buf_get_option(0, "filetype")
local ft_set = list_to_set(opts.filetype_exclude)
return ft_set[ft]
end end
local function reset_cursor_pos(pos) local function reset_cursor_pos(pos)
local num_rows = vim.api.nvim_buf_line_count(0) local num_rows = vim.api.nvim_buf_line_count(0)
--[[ --[[
if the row value in the original cursor if the row value in the original cursor
position tuple is greater than the position tuple is greater than the
line count after empty line deletion line count after empty line deletion
@ -28,33 +33,42 @@ local function reset_cursor_pos(pos)
the file when they were deleted), set the file when they were deleted), set
the cursor row to the last line. the cursor row to the last line.
]] ]]
if pos[1] > num_rows then if pos[1] > num_rows then
pos[1] = num_rows pos[1] = num_rows
end end
vim.api.nvim_win_set_cursor(0, pos) vim.api.nvim_win_set_cursor(0, pos)
end end
function M.setup(opts) function M.setup(opts)
local tidy_grp = vim.api.nvim_create_augroup("tidy", { clear = true })
vim.api.nvim_create_autocmd("BufWritePre", { local defaults = {
group = tidy_grp, filetype_exclude = {},
callback = function() newline_at_eof = false
if is_excluded_ft(opts) then }
return false
end opts = vim.tbl_extend("force", defaults, opts or {})
local tidy_grp = vim.api.nvim_create_augroup("tidy", { clear = true })
vim.api.nvim_create_autocmd("BufWritePre", {
group = tidy_grp,
callback = function()
if is_excluded_ft(opts) then
return false
end
local cursor_pos = vim.api.nvim_win_get_cursor(0) local cursor_pos = vim.api.nvim_win_get_cursor(0)
vim.cmd([[:keepjumps keeppatterns %s/\s\+$//e]]) -- delete trailing whitespace
vim.cmd([[:keepjumps keeppatterns %s/\s\+$//e]])
-- delete all lines at end of buffer, see source 2 -- delete lines @ eof
vim.cmd([[:keepjumps keeppatterns silent! 0;/^\%(\n*.\)\@!/,$d]]) vim.cmd([[:keepjumps keeppatterns silent! 0;/^\%(\n*.\)\@!/,$d]])
reset_cursor_pos(cursor_pos) reset_cursor_pos(cursor_pos)
end, end,
}) })
end end
return M return M

Loading…
Cancel
Save