diff options
Diffstat (limited to 'lua/core/formatter.lua')
-rw-r--r-- | lua/core/formatter.lua | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/lua/core/formatter.lua b/lua/core/formatter.lua new file mode 100644 index 00000000..ad40dd21 --- /dev/null +++ b/lua/core/formatter.lua @@ -0,0 +1,61 @@ +-- autoformat +if O.format_on_save then + require("lv-utils").define_augroups { + autoformat = { + { + "BufWritePost", + "*", + ":silent FormatWrite", + }, + }, + } +end + +-- check if formatter has been defined for the language or not +local function formatter_exists(lang_formatter) + if lang_formatter == nil then + return false + end + if lang_formatter.exe == nil or lang_formatter.args == nil then + return false + end + return true +end + +-- returns default formatter for given language +local function formatter_return(lang_formatter) + return { + exe = lang_formatter.exe, + args = lang_formatter.args, + stdin = not (lang_formatter.stdin ~= nil), + } +end + +-- fill a table like this -> {rust: {exe:"sth",args:{"a","b"},stdin=true},go: {}...} +local formatter_filetypes = {} +for k, v in pairs(O.lang) do + if formatter_exists(v.formatter) then + local keys = v.filetypes + if keys == nil then + keys = { k } + end + for _, l in pairs(keys) do + formatter_filetypes[l] = { + function() + return formatter_return(v.formatter) + end, + } + end + end +end + +require("formatter").setup { + logging = false, + filetype = formatter_filetypes, +} + +if not O.format_on_save then + vim.cmd [[if exists('#autoformat#BufWritePost') + :autocmd! autoformat + endif]] +end |