Last active
February 8, 2025 15:35
-
-
Save synic/7ad5d738f99e845516c4b202b72d861b to your computer and use it in GitHub Desktop.
Autosort alias block on elixir file save
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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