neovim: remove unused imports in ts files on save

This commit is contained in:
2023-02-19 16:23:34 +03:00
parent 089f0ae574
commit dfe900468a
2 changed files with 58 additions and 10 deletions

View File

@@ -1,7 +1,12 @@
local git = require("daniil.git") local git = require("daniil.git")
local u = require("daniil.utils")
vim.api.nvim_create_user_command("OrganizeImports", function() vim.api.nvim_create_user_command("OrganizeImports", function()
require("daniil.utils").lsp_organize_imports() u.lsp_organize_imports()
end, {})
vim.api.nvim_create_user_command("AddMissingImports", function()
u.addMissingImports(0)
u.lsp_format(0)
end, {}) end, {})
vim.api.nvim_create_user_command("GitShowCommit", function() vim.api.nvim_create_user_command("GitShowCommit", function()

View File

@@ -1,5 +1,22 @@
local M = {} local M = {}
M.objectAssign = function(target, ...)
local sources = { ... }
for i = 1, #sources do
local source = sources[i]
for key in pairs(source) do
target[key] = source[key]
end
end
return target
end
M.get_lsp_client = function(name, bufnr)
local clients = vim.lsp.get_active_clients({ bufnr = bufnr, name = name })
return clients[1]
end
M.yank = function(message) M.yank = function(message)
vim.cmd(":!echo -n '" .. message .. "' | wl-copy") vim.cmd(":!echo -n '" .. message .. "' | wl-copy")
end end
@@ -40,18 +57,42 @@ M.copy_diagnostic_message = function()
print("Diagnostic message was yanked") print("Diagnostic message was yanked")
end end
M.lsp_organize_imports = function(bufnr, timeout) M.run_lsp_codeaction = function(codeAction, bufnr, timeout, clientName)
if not bufnr then local params = M.objectAssign({}, vim.lsp.util.make_range_params(), {
bufnr = vim.api.nvim_get_current_buf() context = {
only = { codeAction },
diagnostics = vim.diagnostic.get(bufnr),
},
})
local client = M.get_lsp_client(clientName, bufnr)
if not client then
return
end end
local params = { local res = client.request_sync("textDocument/codeAction", params, timeout, bufnr)
command = "_typescript.organizeImports", if not res.result[1] then
arguments = { vim.api.nvim_buf_get_name(bufnr) }, return
title = "", end
}
vim.lsp.buf_request_sync(bufnr, "workspace/executeCommand", params, timeout or 500) local edits = res.result[1].edit.documentChanges[1].edits
vim.lsp.util.apply_text_edits(edits, bufnr, client.offset_encoding)
end
M.removeUnusedImports = function(bufnr, timeout)
M.run_lsp_codeaction("source.removeUnusedImports.ts", bufnr, timeout, "tsserver")
end
M.addMissingImports = function(bufnr, timeout)
M.run_lsp_codeaction("source.addMissingImports.ts", bufnr, timeout, "tsserver")
end
M.lsp_organize_imports = function(bufnr, timeout)
if not bufnr then
bufnr = 0
end
M.removeUnusedImports(bufnr, timeout)
end end
M.open_url_in_browser = function(url) M.open_url_in_browser = function(url)
@@ -63,6 +104,8 @@ end
function M.lsp_format(bufnr) function M.lsp_format(bufnr)
bufnr = bufnr or 0 bufnr = bufnr or 0
M.lsp_organize_imports(bufnr)
vim.lsp.buf.format({ vim.lsp.buf.format({
filter = function(client) filter = function(client)
if client.name == "tsserver" then if client.name == "tsserver" then