From a7fbe2415b474976b776c22696f2f1f15ca43ce5 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 16 Apr 2024 13:54:12 +0800 Subject: [PATCH] refactor(format): enable format function --- bundle/format.nvim/lua/format.lua | 12 +++++++++-- bundle/format.nvim/lua/format/ft/json.lua | 15 ++++++++++++++ bundle/format.nvim/lua/format/ft/lua.lua | 20 ++++++++++++++----- bundle/format.nvim/lua/format/ft/markdown.lua | 12 +++++++++-- bundle/format.nvim/plugin/format.lua | 13 +++++++++++- 5 files changed, 62 insertions(+), 10 deletions(-) create mode 100644 bundle/format.nvim/lua/format/ft/json.lua diff --git a/bundle/format.nvim/lua/format.lua b/bundle/format.nvim/lua/format.lua index ce865baee..1ab38da34 100644 --- a/bundle/format.nvim/lua/format.lua +++ b/bundle/format.nvim/lua/format.lua @@ -24,11 +24,19 @@ function M.format(bang, user_input, start_line, end_line) end if not formatter then - ok, formatter = pcall(require, 'format.ft.' .. filetype) + ok = pcall(function() + local default = require('format.ft.' .. filetype) + local formatname = default.enabled()[1] + formatter = default[formatname]({ + filepath = vim.fn.expand('%:p'), + start_line = start_line, + end_line = end_line, + }) + util.info('using default formatter:' .. formatname) + end) if not ok then return util.msg('no formatter for ' .. filetype) end - util.info('using default formatter:' .. formatter.exe) end task.run({ diff --git a/bundle/format.nvim/lua/format/ft/json.lua b/bundle/format.nvim/lua/format/ft/json.lua new file mode 100644 index 000000000..ee9969892 --- /dev/null +++ b/bundle/format.nvim/lua/format/ft/json.lua @@ -0,0 +1,15 @@ +local M = {} + +function M.enabled() + return {'prettier'} +end + +function M.prettier(opt) + return { + exe = 'prettier', + args = {'--stdin-filepath', opt.filepath}, + stdin = true, + } +end + +return M diff --git a/bundle/format.nvim/lua/format/ft/lua.lua b/bundle/format.nvim/lua/format/ft/lua.lua index f14a54a78..13d84670e 100644 --- a/bundle/format.nvim/lua/format/ft/lua.lua +++ b/bundle/format.nvim/lua/format/ft/lua.lua @@ -1,5 +1,15 @@ -return { - exe = 'stylua', - args = {'-'}, - stdin = true -} +local M = {} + +function M.enabled() + return { 'stylua' } +end + +function M.stylua(opt) + return { + exe = 'stylua', + args = { '-' }, + stdin = true, + } +end + +return M diff --git a/bundle/format.nvim/lua/format/ft/markdown.lua b/bundle/format.nvim/lua/format/ft/markdown.lua index 392a40bbd..2676488a1 100644 --- a/bundle/format.nvim/lua/format/ft/markdown.lua +++ b/bundle/format.nvim/lua/format/ft/markdown.lua @@ -1,8 +1,16 @@ -if vim.fn.executable('prettier') == 1 then +local M = {} + +function M.enabled() + return { 'prettier' } +end + +function M.prettier(opt) return { exe = vim.fn.exepath('prettier'), name = 'prettier', - args = {'--stdin-filepath', 't.md'}, + args = {'--stdin-filepath', opt.filepath}, stdin = true } end + +return M diff --git a/bundle/format.nvim/plugin/format.lua b/bundle/format.nvim/plugin/format.lua index 858382edf..f867dbf4f 100644 --- a/bundle/format.nvim/plugin/format.lua +++ b/bundle/format.nvim/plugin/format.lua @@ -4,5 +4,16 @@ end, { nargs = '*', range = '%', bang = true, - bar = true + bar = true, + complete = function(_, line) + local ft = vim.o.filetype + local l = vim.split(line, '%s+') + local ok, default = pcall(require, 'format.ft.' .. ft) + if ok then + return vim.tbl_filter(function(val) + return vim.startswith(val, l[#l]) + end, default.enabled()) + else + end + end, })