parent
4ae5670eaa
commit
178aaa60f1
@ -0,0 +1,49 @@ |
|||||||
|
{ runCommandNoCC, cargo, neovim, rust-analyzer, rustc }: |
||||||
|
runCommandNoCC "test-neovim-rust-analyzer" { |
||||||
|
nativeBuildInputs = [ cargo neovim rust-analyzer rustc ]; |
||||||
|
|
||||||
|
testRustSrc = /* rust */ '' |
||||||
|
fn main() { |
||||||
|
let mut var = vec![None]; |
||||||
|
var.push(Some("hello".to_owned())); |
||||||
|
} |
||||||
|
''; |
||||||
|
|
||||||
|
nvimConfig = /* lua */ '' |
||||||
|
vim.lsp.buf_attach_client(vim.api.nvim_get_current_buf(), vim.lsp.start_client({ |
||||||
|
cmd = { "rust-analyzer" }, |
||||||
|
handlers = { |
||||||
|
["$/progress"] = function(_, msg, ctx) |
||||||
|
if msg.token == "rustAnalyzer/Indexing" and msg.value.kind == "end" then |
||||||
|
vim.cmd("goto 23") -- let mut |var =... |
||||||
|
vim.lsp.buf.hover() |
||||||
|
end |
||||||
|
end, |
||||||
|
["textDocument/hover"] = function(_, msg, ctx) |
||||||
|
-- Keep newlines. |
||||||
|
io.write(msg.contents.value) |
||||||
|
vim.cmd("q") |
||||||
|
end, |
||||||
|
}, |
||||||
|
on_error = function(code) |
||||||
|
print("error: " .. code) |
||||||
|
vim.cmd("q") |
||||||
|
end |
||||||
|
})) |
||||||
|
''; |
||||||
|
|
||||||
|
} '' |
||||||
|
# neovim requires a writable HOME. |
||||||
|
export HOME="$(pwd)" |
||||||
|
|
||||||
|
cargo new --bin test-rust-analyzer |
||||||
|
cd test-rust-analyzer |
||||||
|
cat <<<"$testRustSrc" >src/main.rs |
||||||
|
cat <<<"$nvimConfig" >script.lua |
||||||
|
|
||||||
|
# `-u` doesn't work |
||||||
|
result="$(nvim --headless +'lua dofile("script.lua")' src/main.rs)" |
||||||
|
echo "$result" |
||||||
|
[[ "$result" == *"var: Vec<Option<String>>"* ]] |
||||||
|
touch $out |
||||||
|
'' |
Loading…
Reference in new issue