166 lines
4.4 KiB
Lua
166 lines
4.4 KiB
Lua
-- textDocument/diagnostic support until 0.10.0 is released
|
|
_timers = {}
|
|
local function setup_diagnostics(client, buffer)
|
|
if require("vim.lsp.diagnostic")._enable then
|
|
return
|
|
end
|
|
|
|
local diagnostic_handler = function()
|
|
local params = vim.lsp.util.make_text_document_params(buffer)
|
|
client.request("textDocument/diagnostic", { textDocument = params }, function(err, result)
|
|
if err then
|
|
local err_msg = string.format("diagnostics error - %s", vim.inspect(err))
|
|
vim.lsp.log.error(err_msg)
|
|
end
|
|
local diagnostic_items = {}
|
|
if result then
|
|
diagnostic_items = result.items
|
|
end
|
|
vim.lsp.diagnostic.on_publish_diagnostics(
|
|
nil,
|
|
vim.tbl_extend("keep", params, { diagnostics = diagnostic_items }),
|
|
{ client_id = client.id }
|
|
)
|
|
end)
|
|
end
|
|
|
|
diagnostic_handler() -- to request diagnostics on buffer when first attaching
|
|
|
|
vim.api.nvim_buf_attach(buffer, false, {
|
|
on_lines = function()
|
|
if _timers[buffer] then
|
|
vim.fn.timer_stop(_timers[buffer])
|
|
end
|
|
_timers[buffer] = vim.fn.timer_start(200, diagnostic_handler)
|
|
end,
|
|
on_detach = function()
|
|
if _timers[buffer] then
|
|
vim.fn.timer_stop(_timers[buffer])
|
|
end
|
|
end,
|
|
})
|
|
end
|
|
|
|
-- adds ShowRubyDeps command to show dependencies in the quickfix list.
|
|
-- add the `all` argument to show indirect dependencies as well
|
|
local function add_ruby_deps_command(client, bufnr)
|
|
vim.api.nvim_buf_create_user_command(bufnr, "ShowRubyDeps",
|
|
function(opts)
|
|
|
|
local params = vim.lsp.util.make_text_document_params()
|
|
|
|
local showAll = opts.args == "all"
|
|
|
|
client.request("rubyLsp/workspace/dependencies", params,
|
|
function(error, result)
|
|
if error then
|
|
print("Error showing deps: " .. error)
|
|
return
|
|
end
|
|
|
|
local qf_list = {}
|
|
for _, item in ipairs(result) do
|
|
if showAll or item.dependency then
|
|
table.insert(qf_list, {
|
|
text = string.format("%s (%s) - %s",
|
|
item.name,
|
|
item.version,
|
|
item.dependency),
|
|
|
|
filename = item.path
|
|
})
|
|
end
|
|
end
|
|
|
|
vim.fn.setqflist(qf_list)
|
|
vim.cmd('copen')
|
|
end, bufnr)
|
|
end, {nargs = "?", complete = function()
|
|
return {"all"}
|
|
end})
|
|
end
|
|
|
|
|
|
|
|
--Enable (broadcasting) snippet capability for completion
|
|
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
|
capabilities.textDocument.completion.completionItem.snippetSupport = true
|
|
|
|
-- LSP servers
|
|
-- Stimulus
|
|
require'lspconfig'.stimulus_ls.setup{}
|
|
-- Ruby
|
|
require("lspconfig").ruby_ls.setup({
|
|
on_attach = function(client, buffer)
|
|
setup_diagnostics(client, buffer)
|
|
add_ruby_deps_command(client, buffer)
|
|
end,
|
|
})
|
|
-- CSS
|
|
require'lspconfig'.cssls.setup {
|
|
capabilities = capabilities,
|
|
}
|
|
-- SQL
|
|
require'lspconfig'.sqlls.setup{}
|
|
-- JavaScript
|
|
require'lspconfig'.eslint.setup{}
|
|
-- HTML
|
|
require'lspconfig'.html.setup {
|
|
capabilities = capabilities,
|
|
}
|
|
-- JSON
|
|
require'lspconfig'.jsonls.setup {
|
|
capabilities = capabilities,
|
|
}
|
|
-- BASH
|
|
require'lspconfig'.bashls.setup{}
|
|
-- Cucumber
|
|
require'lspconfig'.cucumber_language_server.setup{}
|
|
-- Docker
|
|
require'lspconfig'.dockerls.setup{}
|
|
require'lspconfig'local dap, dapui = require("dap"), require("dapui")
|
|
dap.listeners.after.event_initialized["dapui_config"] = function()
|
|
dapui.open()
|
|
end
|
|
dap.listeners.before.event_terminated["dapui_config"] = function()
|
|
dapui.close()
|
|
end
|
|
dap.listeners.before.event_exited["dapui_config"] = function()
|
|
dapui.close()
|
|
end
|
|
|
|
require("dapui").setup()
|
|
dap.adapters.ruby = function(callback, config)
|
|
callback {
|
|
type = "server",
|
|
host = "127.0.0.1",
|
|
port = "${port}",
|
|
executable = {
|
|
command = "bundle",
|
|
args = { "exec", "rdbg", "-n", "--open", "--port", "${port}",
|
|
"-c", "--", "bundle", "exec", config.command, config.script,
|
|
},
|
|
},
|
|
}
|
|
end
|
|
|
|
dap.configurations.ruby = {
|
|
{
|
|
type = "ruby",
|
|
name = "debug current file",
|
|
request = "attach",
|
|
localfs = true,
|
|
command = "ruby",
|
|
script = "${file}",
|
|
},
|
|
{
|
|
type = "ruby",
|
|
name = "run current spec file",
|
|
request = "attach",
|
|
localfs = true,
|
|
command = "rspec",
|
|
script = "${file}",
|
|
},
|
|
}
|
|
|