1
0
Files
dotfiles/.config/nvim/lua/plugins/format.lua

78 lines
1.5 KiB
Lua

local common = require('BluePlum.lazy')
---@param exe string
---@param args { [number]: string, path: boolean? }
local function formatter(exe, args)
return {
function()
local argv = {}
for _, val in ipairs(args) do
table.insert(argv, val)
end
if not args.path == false then
table.insert(argv, vim.fn.shellescape(vim.api.nvim_buf_get_name(0)))
end
return {
exe = exe,
args = argv,
stdin = true,
}
end,
}
end
local prettier = formatter('prettier', {
'--config-precedence prefer-file',
'--single-quote',
'--use-tabs',
'--trailing-comma es5',
'--bracket-same-line',
'--stdin-filepath',
})
return {
{
'mhartington/formatter.nvim',
event = common.event.BufWritePost,
opts = {
filetype = {
javascript = prettier,
typescript = prettier,
markdown = prettier,
css = prettier,
json = prettier,
html = prettier,
scss = prettier,
rust = formatter('rustfmt', { path = false }),
lua = formatter('stylua', {
'--indent-type Tabs',
'--line-endings Unix',
'--quote-style AutoPreferSingle',
'--column-width' .. ' ' .. vim.o.columns,
'-',
}),
['*'] = {
function()
if vim.lsp.buf.formatting then
vim.lsp.buf.format()
end
end,
},
},
},
config = function(lazy)
require('formatter').setup(lazy.opts)
vim.api.nvim_create_augroup('__formatter__', { clear = true })
vim.api.nvim_create_autocmd(common.event.BufWritePost, {
group = '__formatter__',
command = ':FormatWriteLock',
})
end,
},
}