2022-11-06 23:46:45 -05:00
local setup , null_ls = pcall ( require , " null-ls " )
if not setup then
2022-11-07 17:33:59 -05:00
return
2022-11-06 23:46:45 -05:00
end
local formatting = null_ls.builtins . formatting
2023-01-02 16:20:08 -05:00
local conditional = function ( fn )
local utils = require ( " null-ls.utils " ) . make_conditional_utils ( )
return fn ( utils )
end
2022-11-06 23:46:45 -05:00
local augroup = vim.api . nvim_create_augroup ( " LspFormatting " , { } )
null_ls.setup ( {
2022-11-07 17:33:59 -05:00
sources = {
formatting.prettier ,
formatting.stylua ,
2023-01-02 16:20:08 -05:00
-- Here we set a conditional to call the rubocop formatter. If we have a Gemfile in the project, we call "bundle exec rubocop", if not we only call "rubocop".
conditional ( function ( utils )
return utils.root_has_file ( " Gemfile " )
and null_ls.builtins . formatting.rubocop . with ( {
command = " bundle " ,
args = vim.list_extend ( { " exec " , " rubocop " } , null_ls.builtins . formatting.rubocop . _opts.args ) ,
} )
or null_ls.builtins . formatting.rubocop
end ) ,
-- Same as above, but with diagnostics.rubocop to make sure we use the proper rubocop version for the project
conditional ( function ( utils )
return utils.root_has_file ( " Gemfile " )
and null_ls.builtins . diagnostics.rubocop . with ( {
command = " bundle " ,
args = vim.list_extend ( { " exec " , " rubocop " } , null_ls.builtins . diagnostics.rubocop . _opts.args ) ,
} )
or null_ls.builtins . diagnostics.rubocop
end ) ,
2022-11-07 17:33:59 -05:00
} ,
-- format on save
on_attach = function ( client , bufnr )
if client.supports_method ( " textDocument/formatting " ) then
vim.api . nvim_clear_autocmds ( { group = augroup , buffer = bufnr } )
vim.api . nvim_create_autocmd ( " BufWritePre " , {
group = augroup ,
buffer = bufnr ,
callback = function ( )
2022-11-16 19:37:03 -05:00
vim.lsp . buf.format ( { bufnr = bufnr , timeout_ms = 10000 } )
2022-11-07 17:33:59 -05:00
end ,
} )
end
end ,
2022-11-06 23:46:45 -05:00
} )