Files
lua-config-vim/current_config/lua/alpha/lsp/servers/phpactor.lua
2023-12-13 00:27:19 +03:00

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