78 lines
1.5 KiB
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 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,
|
|
},
|
|
}
|