diff options
| -rw-r--r-- | configs/nvim/init.lua | 4 | ||||
| -rw-r--r-- | configs/nvim/lua/crupest/constants.lua | 9 | ||||
| -rw-r--r-- | configs/nvim/lua/crupest/nvim/plugins/format.lua | 116 | ||||
| -rw-r--r-- | configs/nvim/lua/crupest/nvim/plugins/lint.lua | 10 | 
4 files changed, 48 insertions, 91 deletions
| diff --git a/configs/nvim/init.lua b/configs/nvim/init.lua index b57c0bf..09d3885 100644 --- a/configs/nvim/init.lua +++ b/configs/nvim/init.lua @@ -95,7 +95,7 @@ require('gitsigns').setup()  -- setup format  local format = require("crupest.nvim.plugins.format") -format.setup_formatter() +format.setup_format()  -- setup lint  local lint = require("crupest.nvim.plugins.lint") @@ -169,7 +169,7 @@ vim.api.nvim_create_autocmd('LspAttach', {          vim.keymap.set({ 'n', 'v' }, '<space>ca', vim.lsp.buf.code_action, opts)          vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) -        vim.keymap.set('n', '<space>f', format.run_formatter, opts) +        vim.keymap.set('n', '<space>f', format.do_format, opts)      end,  }) diff --git a/configs/nvim/lua/crupest/constants.lua b/configs/nvim/lua/crupest/constants.lua index c8238e7..89ae968 100644 --- a/configs/nvim/lua/crupest/constants.lua +++ b/configs/nvim/lua/crupest/constants.lua @@ -20,12 +20,13 @@ local config_patterns = {      }  } -local filetypes = { -    js_ts = { 'javascript', 'javascriptreact', 'typescript', 'typescriptreact' } - +local filetype_collections = { +    js_ts = { 'javascript', 'javascriptreact', 'typescript', 'typescriptreact' }, +    html_css = { 'html', 'css' }, +    frontend = { 'javascript', 'javascriptreact', 'typescript', 'typescriptreact', 'html', 'css' },  }  return {      config_patterns = config_patterns, -    filetypes = filetypes, +    filetype_collections = filetype_collections,  } diff --git a/configs/nvim/lua/crupest/nvim/plugins/format.lua b/configs/nvim/lua/crupest/nvim/plugins/format.lua index 9f6138f..0e3320a 100644 --- a/configs/nvim/lua/crupest/nvim/plugins/format.lua +++ b/configs/nvim/lua/crupest/nvim/plugins/format.lua @@ -1,78 +1,45 @@ -local fs = require("crupest.system.fs") -local find_npm_exe = require("crupest.system.find").find_npm_exe; - -local prettier_formatter = function() -    local current_buffer = vim.api.nvim_buf_get_name(0) -    local prettier_exe = find_npm_exe(current_buffer, "prettier") or "prettier" - -    if vim.fn.has("win32") ~= 0 then -        local escape = fs.escape_space -        current_buffer = escape(current_buffer) -        prettier_exe = escape(prettier_exe) -    end +local find = require("crupest.system.find") +local constants = require("crupest.constants") + +local function wrap_formatter_with_exe(name, exe) +    local formatter = require('formatter.defaults.' .. name) +    formatter = formatter() +    formatter.try_node_modules = false +    formatter.exe = exe +    return formatter +end -    return { -        exe = prettier_exe, -        args = { -            "--stdin-filepath", -            current_buffer -        }, -        stdin = true, -    } +local function set_formatters_for_filetype(filetype, formatters) +    require('formatter.config').values.filetype[filetype] = formatters  end -local formatters_for_filetype = { -    html = { -        prettier_formatter -    }, -    css = { -        prettier_formatter -    }, -    javascript = { -        prettier_formatter +local my_formatters = { +    { +        name = "prettier", +        exe_places = { "npm" }, +        filetypes = constants.filetype_collections.frontend, +        config_files = constants.config_patterns.nodejs,      }, -    javascriptreact = { -        prettier_formatter -    }, -    typescript = { -        prettier_formatter -    }, -    typescriptreact = { -        prettier_formatter -    }  } -local function get_formatter_name(formatter) -    if formatter == prettier_formatter then return "prettier" end -    return nil -end +local function find_custom_formatter(opts) +    if opts == nil then opts = {} end +    if opts.buf == nil then opts.buf = 0 end -local function get_formatter_name_list(formatters) -    local result = {} -    for _, formatter in ipairs(formatters) do -        table.insert(result, get_formatter_name(formatter)) +    for _, f in ipairs(my_formatters) do +        local r = find.find_exe_for_buf(opts.buf, f) +        if r ~= nil then +            local formatter = wrap_formatter_with_exe(r.name, r.exe_path) +            set_formatters_for_filetype(r.filetype, { formatter }) +            return r.name +        end      end -    return result -end -local function setup_formatter() -    require("formatter").setup { -        filetype = formatters_for_filetype -    } +    return nil  end -local function get_custom_formatters(bufnr) -    local filetype = vim.api.nvim_buf_get_option(bufnr, "filetype") -    for ft, formatters in pairs(formatters_for_filetype) do -        if filetype == ft then -            return true, get_formatter_name_list(formatters) -        end -    end -    return false, {} -end - -local function run_formatter(opt) +local function do_format(opt)      if not opt then          opt = {}      end @@ -81,19 +48,10 @@ local function run_formatter(opt)          opt.buf = 0      end -    local has_custom_formatter, formatter_names = get_custom_formatters(opt.buf) +    local custom_formatter = find_custom_formatter(opt) -    local formatter_name_str = "" -    for i, name in ipairs(formatter_names) do -        if i == 1 then -            formatter_name_str = name -        else -            formatter_name_str = formatter_name_str .. " " .. name -        end -    end - -    if has_custom_formatter then -        print("Use custom formatters: " .. formatter_name_str .. ".") +    if custom_formatter then +        print("Use custom formatters: " .. custom_formatter .. ".")          vim.cmd("Format")          return      end @@ -108,7 +66,11 @@ local function run_formatter(opt)      vim.notify("No formatters found.", vim.log.levels.ERROR);  end +local function setup_format() +    require("formatter").setup {} +end +  return { -    setup_formatter = setup_formatter, -    run_formatter = run_formatter +    setup_format = setup_format, +    do_format = do_format,  } diff --git a/configs/nvim/lua/crupest/nvim/plugins/lint.lua b/configs/nvim/lua/crupest/nvim/plugins/lint.lua index 1db4d32..2ba3e36 100644 --- a/configs/nvim/lua/crupest/nvim/plugins/lint.lua +++ b/configs/nvim/lua/crupest/nvim/plugins/lint.lua @@ -12,15 +12,9 @@ local my_linters = {      {          name = "eslint",          exe_places = { "npm" }, -        filetypes = constants.filetypes.js_ts, -        config_files = { "package.json" } +        filetypes = constants.filetype_collections.js_ts, +        config_files = constants.config_patterns.nodejs,      }, -    { -        name = "deno", -        exe_places = { "global" }, -        filetypes = constants.filetypes.js_ts, -        config_files = { "deno.json", "deno.jsonc" } -    }  }  local function run_lint(opt) | 
