-- 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}", }, }