81 lines
2.3 KiB
Lua
81 lines
2.3 KiB
Lua
local lsp_attach = require "alpha.lsp.attach"
|
|
local lsp_flags = require "alpha.lsp.flags"
|
|
|
|
local function phpactor_attach(_, bufnr)
|
|
vim.api.nvim_buf_create_user_command(bufnr, "LspPhpactorReindex", function()
|
|
vim.lsp.buf_notify(bufnr, "phpactor/index/reindex", {})
|
|
end, {})
|
|
|
|
vim.api.nvim_buf_create_user_command(bufnr, "LspPhpactorStatus", function()
|
|
local results, _ = vim.lsp.buf_request_sync(bufnr, "phpactor/status", { ["return"] = true })
|
|
|
|
local content = ""
|
|
|
|
for _, res in pairs(results or {}) do
|
|
if res ~= nil and res["result"] ~= nil then
|
|
content = content .. res["result"]
|
|
end
|
|
end
|
|
|
|
local Popup = require "nui.popup"
|
|
local event = require("nui.utils.autocmd").event
|
|
|
|
local popup = Popup {
|
|
enter = true,
|
|
focusable = true,
|
|
border = {
|
|
style = "rounded",
|
|
},
|
|
position = "50%",
|
|
size = {
|
|
width = "80%",
|
|
height = "60%",
|
|
},
|
|
}
|
|
|
|
-- mount/open the component
|
|
popup:mount()
|
|
|
|
-- unmount component when cursor leaves buffer
|
|
popup:on(event.BufLeave, function()
|
|
popup:unmount()
|
|
end)
|
|
local out = {}
|
|
for match in string.gmatch(content, "[^\n]+") do
|
|
table.insert(out, match)
|
|
end
|
|
|
|
vim.api.nvim_buf_set_option(popup.bufnr, "filetype", "markdown")
|
|
vim.api.nvim_buf_set_lines(popup.bufnr, 0, 1, false, out)
|
|
end, {})
|
|
end
|
|
|
|
return function(ops)
|
|
return vim.tbl_extend("force", {
|
|
on_attach = function(client, bufnr)
|
|
lsp_attach(client, bufnr)
|
|
phpactor_attach(client, bufnr)
|
|
end,
|
|
flags = lsp_flags,
|
|
filetypes = { "php", "blade" },
|
|
init_options = {
|
|
["language_server_worse_reflection.inlay_hints.enable"] = true,
|
|
["language_server_worse_reflection.inlay_hints.params"] = true,
|
|
-- ["language_server_worse_reflection.inlay_hints.types"] = true,
|
|
["language_server_configuration.auto_config"] = false,
|
|
["code_transform.import_globals"] = true,
|
|
["language_server_phpstan.enabled"] = true,
|
|
["language_server_phpstan.level"] = 7,
|
|
["language_server_phpstan.bin"] = "phpstan",
|
|
},
|
|
handlers = {
|
|
["textDocument/inlayHint"] = function(err, result, ...)
|
|
for _, res in ipairs(result) do
|
|
res.label = res.label .. ": "
|
|
end
|
|
vim.lsp.handlers["textDocument/inlayHint"](err, result, ...)
|
|
end,
|
|
},
|
|
}, ops)
|
|
end
|