aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configs/nvim/init.lua4
-rw-r--r--configs/nvim/lua/crupest/constants.lua9
-rw-r--r--configs/nvim/lua/crupest/nvim/plugins/format.lua116
-rw-r--r--configs/nvim/lua/crupest/nvim/plugins/lint.lua10
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)