mirror of
				https://github.com/tiyn/tidy.nvim.git
				synced 2025-10-31 11:11:23 +01:00 
			
		
		
		
	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.
			
			
This commit is contained in:
		| @@ -1,25 +1,30 @@ | |||||||
| local M = {} | local M = {} | ||||||
|  |  | ||||||
|  | local function list_to_set(list) | ||||||
|  |   local set = {} | ||||||
|  |  | ||||||
|  |   for _, item in ipairs(list) do | ||||||
|  |     set[item] = true | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   return set | ||||||
|  | end | ||||||
|  |  | ||||||
| local function is_excluded_ft(opts) | local function is_excluded_ft(opts) | ||||||
|     if not opts or not opts.filetype_exclude then |   if not opts.filetype_exclude then | ||||||
|         return false |  | ||||||
|     end |  | ||||||
|  |  | ||||||
|     local ft = vim.api.nvim_buf_get_option(0, "filetype") |  | ||||||
|  |  | ||||||
|     for _, entry in ipairs(opts.filetype_exclude) do |  | ||||||
|         if entry == ft then |  | ||||||
|             return true |  | ||||||
|         end |  | ||||||
|     end |  | ||||||
|  |  | ||||||
|     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 |  | ||||||
|  |  | ||||||
|             local cursor_pos = vim.api.nvim_win_get_cursor(0) |   opts = vim.tbl_extend("force", defaults, opts or {}) | ||||||
|  |  | ||||||
|             vim.cmd([[:keepjumps keeppatterns %s/\s\+$//e]]) |   local tidy_grp = vim.api.nvim_create_augroup("tidy", { clear = true }) | ||||||
|  |  | ||||||
|             -- delete all lines at end of buffer, see source 2 |   vim.api.nvim_create_autocmd("BufWritePre", { | ||||||
|             vim.cmd([[:keepjumps keeppatterns silent! 0;/^\%(\n*.\)\@!/,$d]]) |     group = tidy_grp, | ||||||
|  |     callback = function() | ||||||
|  |       if is_excluded_ft(opts) then | ||||||
|  |         return false | ||||||
|  |       end | ||||||
|  |  | ||||||
|             reset_cursor_pos(cursor_pos) |       local cursor_pos = vim.api.nvim_win_get_cursor(0) | ||||||
|         end, |  | ||||||
|     }) |       -- delete trailing whitespace | ||||||
|  |       vim.cmd([[:keepjumps keeppatterns %s/\s\+$//e]]) | ||||||
|  |  | ||||||
|  |       -- delete lines @ eof | ||||||
|  |       vim.cmd([[:keepjumps keeppatterns silent! 0;/^\%(\n*.\)\@!/,$d]]) | ||||||
|  |  | ||||||
|  |       reset_cursor_pos(cursor_pos) | ||||||
|  |     end, | ||||||
|  |   }) | ||||||
| end | end | ||||||
|  |  | ||||||
| return M | return M | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user