home: create 'modules/home' folder
Consolidating all modules under the same path, to clear out the top-level directory.
This commit is contained in:
parent
c856933803
commit
65a8f7c481
119 changed files with 2 additions and 2 deletions
118
modules/home/vim/lua/ambroisie/lsp.lua
Normal file
118
modules/home/vim/lua/ambroisie/lsp.lua
Normal file
|
|
@ -0,0 +1,118 @@
|
|||
local M = {}
|
||||
|
||||
-- Simplified LSP formatting configuration
|
||||
local lsp_format = require("lsp-format")
|
||||
|
||||
--- Move to the next/previous diagnostic, automatically showing the diagnostics
|
||||
--- float if necessary.
|
||||
--- @param forward whether to go forward or backwards
|
||||
local function goto_diagnostic(forward)
|
||||
vim.validate({
|
||||
forward = { forward, "boolean" },
|
||||
})
|
||||
|
||||
local opts = {
|
||||
float = false,
|
||||
}
|
||||
|
||||
-- Only show floating diagnostics if they are otherwise not displayed
|
||||
local config = vim.diagnostic.config()
|
||||
if not (config.virtual_text or config.virtual_lines) then
|
||||
opts.float = true
|
||||
end
|
||||
|
||||
if forward then
|
||||
vim.diagnostic.goto_next(opts)
|
||||
else
|
||||
vim.diagnostic.goto_prev(opts)
|
||||
end
|
||||
end
|
||||
|
||||
--- Move to the next diagnostic, automatically showing the diagnostics float if
|
||||
--- necessary.
|
||||
M.goto_next_diagnostic = function()
|
||||
goto_diagnostic(true)
|
||||
end
|
||||
|
||||
--- Move to the previous diagnostic, automatically showing the diagnostics float
|
||||
--- if necessary.
|
||||
M.goto_prev_diagnostic = function()
|
||||
goto_diagnostic(false)
|
||||
end
|
||||
|
||||
--- shared LSP configuration callback
|
||||
--- @param client native client configuration
|
||||
--- @param bufnr int? buffer number of the attched client
|
||||
M.on_attach = function(client, bufnr)
|
||||
-- Format on save
|
||||
lsp_format.on_attach(client, bufnr)
|
||||
|
||||
-- Mappings
|
||||
local wk = require("which-key")
|
||||
|
||||
local function list_workspace_folders()
|
||||
local utils = require("ambroisie.utils")
|
||||
utils.dump(vim.lsp.buf.list_workspace_folders())
|
||||
end
|
||||
|
||||
local function cycle_diagnostics_display()
|
||||
-- Cycle from:
|
||||
-- * nothing displayed
|
||||
-- * single diagnostic at the end of the line (`virtual_text`)
|
||||
-- * full diagnostics using virtual text (`virtual_lines`)
|
||||
local text = vim.diagnostic.config().virtual_text
|
||||
local lines = vim.diagnostic.config().virtual_lines
|
||||
|
||||
-- Text -> Lines transition
|
||||
if text then
|
||||
text = false
|
||||
lines = true
|
||||
-- Lines -> Nothing transition
|
||||
elseif lines then
|
||||
text = false
|
||||
lines = false
|
||||
-- Nothing -> Text transition
|
||||
else
|
||||
text = true
|
||||
lines = false
|
||||
end
|
||||
|
||||
vim.diagnostic.config({
|
||||
virtual_text = text,
|
||||
virtual_lines = lines,
|
||||
})
|
||||
end
|
||||
|
||||
local function show_buffer_diagnostics()
|
||||
vim.diagnostic.open_float(nil, { scope = "buffer" })
|
||||
end
|
||||
|
||||
local keys = {
|
||||
K = { vim.lsp.buf.hover, "Show symbol information" },
|
||||
["<C-k>"] = { vim.lsp.buf.signature_help, "Show signature information" },
|
||||
["gd"] = { vim.lsp.buf.definition, "Go to definition" },
|
||||
["gD"] = { vim.lsp.buf.declaration, "Go to declaration" },
|
||||
["gi"] = { vim.lsp.buf.implementation, "Go to implementation" },
|
||||
["gr"] = { vim.lsp.buf.references, "List all references" },
|
||||
|
||||
["<leader>c"] = {
|
||||
name = "Code",
|
||||
a = { vim.lsp.buf.code_action, "Code actions" },
|
||||
d = { cycle_diagnostics_display, "Cycle diagnostics display" },
|
||||
D = { show_buffer_diagnostics, "Show buffer diagnostics" },
|
||||
r = { vim.lsp.buf.rename, "Rename symbol" },
|
||||
s = { vim.lsp.buf.signature_help, "Show signature" },
|
||||
t = { vim.lsp.buf.type_definition, "Go to type definition" },
|
||||
w = {
|
||||
name = "Workspace",
|
||||
a = { vim.lsp.buf.add_workspace_folder, "Add folder to workspace" },
|
||||
l = { list_workspace_folders, "List folders in workspace" },
|
||||
r = { vim.lsp.buf.remove_workspace_folder, "Remove folder from workspace" },
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
wk.register(keys, { buffer = bufnr })
|
||||
end
|
||||
|
||||
return M
|
||||
57
modules/home/vim/lua/ambroisie/utils.lua
Normal file
57
modules/home/vim/lua/ambroisie/utils.lua
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
local M = {}
|
||||
|
||||
--- pretty print lua object
|
||||
--- @param obj any object to pretty print
|
||||
M.dump = function(obj)
|
||||
print(vim.inspect(obj))
|
||||
end
|
||||
|
||||
--- checks if a given command is executable
|
||||
--- @param cmd string? command to check
|
||||
--- @return boolean executable
|
||||
M.is_executable = function(cmd)
|
||||
return cmd and vim.fn.executable(cmd) == 1
|
||||
end
|
||||
|
||||
--- return a function that checks if a given command is executable
|
||||
--- @param cmd string? command to check
|
||||
--- @return fun(cmd: string): boolean executable
|
||||
M.is_executable_condition = function(cmd)
|
||||
return function()
|
||||
return M.is_executable(cmd)
|
||||
end
|
||||
end
|
||||
|
||||
--- whether or not we are currently in an SSH connection
|
||||
--- @return boolean ssh connection
|
||||
M.is_ssh = function()
|
||||
local variables = {
|
||||
"SSH_CONNECTION",
|
||||
"SSH_CLIENT",
|
||||
"SSH_TTY",
|
||||
}
|
||||
|
||||
for _, var in ipairs(variables) do
|
||||
if string.len(os.getenv(var) or "") ~= 0 then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
--- list all active LSP clients for current buffer
|
||||
--- @param bufnr int? buffer number
|
||||
--- @return table all active LSP client names
|
||||
M.list_lsp_clients = function(bufnr)
|
||||
local clients = vim.lsp.buf_get_clients(bufnr)
|
||||
local names = {}
|
||||
|
||||
for _, client in ipairs(clients) do
|
||||
table.insert(names, client.name)
|
||||
end
|
||||
|
||||
return names
|
||||
end
|
||||
|
||||
return M
|
||||
Loading…
Add table
Add a link
Reference in a new issue