-
Notifications
You must be signed in to change notification settings - Fork 547
document how to setup RA for nvim automatically #2259
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It works for me.
Co-authored-by: DianQK <[email protected]>
any reason to not integrate this into |
this can't be done automatically. this goes in the global nvim/init.lua, not in a project specific file. if people want project-specific code, they need to use a plugin, and that's already recommended on the paragraph above. |
end, | ||
on_init = function(client) | ||
local path = client.workspace_folders[1].name | ||
local config = vim.fs.joinpath(path, "src/etc/rust_analyzer_zed.json") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm really curious how neovim handles the ${workspaceFolder}
variable. I've searched the codebases of neovim, nvim-lspconfig, and neoconf.nvim, but haven't found anything that seems to be processing it.
-- load rust-lang/rust settings | ||
local file = io.open(config) | ||
local json = vim.json.decode(file:read("*a")) | ||
client.config.settings["rust-analyzer"] = json.lsp["rust-analyzer"].initialization_options |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The code snippet is from https://github.com/mfussenegger/nvim-dap/blob/379cf26e9c457b66a0152cd5d018418c03720d47/lua/dap.lua#L375-L402.
local var_placeholders = {
['${workspaceFolder}'] = function(_)
return vim.fn.getcwd()
end,
}
local function expand_config_variables(option)
if type(option) == "table" then
local mt = getmetatable(option)
local result = {}
for k, v in pairs(option) do
result[expand_config_variables(k)] = expand_config_variables(v)
end
return setmetatable(result, mt)
end
if type(option) ~= "string" then
return option
end
local ret = option
for key, fn in pairs(var_placeholders) do
ret = ret:gsub(key, fn)
end
return ret
end
local options = expand_config_variables(json.lsp["rust-analyzer"].initialization_options)
client.config.settings["rust-analyzer"] = options
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is definitely not any part of base nvim. i am not sure why nvim-dap is trying to support this; you're welcome to add it to your config i guess but i don't think we should recommend it in the dev guide.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(note it's also doing it wrong, the working directory is not necessarily the same as the workspace folder)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is definitely not any part of base nvim. i am not sure why nvim-dap is trying to support this; you're welcome to add it to your config i guess but i don't think we should recommend it in the dev guide.
I think we should at least mention this? Otherwise, some people might not understand why rustfmt and proc macros aren't working?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(note it's also doing it wrong, the working directory is not necessarily the same as the workspace folder)
I believe this is the most commonly used. I think we just need to mention the replacement of ${workspaceFolder}
, and everyone can modify this variable in their own preferred way.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we should at least mention this? Otherwise, some people might not understand why rustfmt and proc macros aren't working?
oh i was confused, i'm sorry. you're right - the Zed file this is copying is using workspaceFolder
. this is a good solution to make that work without further configuration, thank you for researching it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe this is the most commonly used. I think we just need to mention the replacement of
${workspaceFolder}
, and everyone can modify this variable in their own preferred way.
i think we should suggest vim.lsp.buf.list_workspace_folders()[1]
, not getcwd().
No description provided.