Skip to content

Instantly share code, notes, and snippets.

@synic
Last active February 8, 2025 15:35
Show Gist options
  • Save synic/7ad5d738f99e845516c4b202b72d861b to your computer and use it in GitHub Desktop.
Save synic/7ad5d738f99e845516c4b202b72d861b to your computer and use it in GitHub Desktop.
Autosort alias block on elixir file save
local function sort_alias_block(args)
local bufnr = args.buf
local saved_view
vim.api.nvim_buf_call(bufnr, function()
saved_view = vim.fn.winsaveview()
end)
local lines = vim.api.nvim_buf_get_lines(bufnr, 0, -1, false)
local alias_start = nil
local alias_end = nil
for i, line in ipairs(lines) do
if line:match("[%s\t]*alias%s+[A-Z]") then
if not alias_start then
alias_start = i - 1
end
alias_end = i - 1
elseif alias_start and not line:match("[%s\t]*alias%s+[A-Z]") then
break
end
end
if alias_start and alias_end and alias_end > alias_start then
local alias_lines = vim.api.nvim_buf_get_lines(bufnr, alias_start, alias_end + 1, false)
table.sort(alias_lines)
pcall(function()
vim.cmd.undojoin()
vim.api.nvim_buf_set_lines(bufnr, alias_start, alias_end + 1, false, alias_lines)
end)
end
vim.api.nvim_buf_call(bufnr, function()
vim.fn.winrestview(saved_view)
end)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment