rust-analyzer: add tests with neovim
This commit is contained in:
parent
4ae5670eaa
commit
178aaa60f1
|
@ -1,5 +1,6 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, callPackage
|
||||
, fetchFromGitHub
|
||||
, rustPlatform
|
||||
, CoreServices
|
||||
|
@ -54,7 +55,11 @@ rustPlatform.buildRustPackage rec {
|
|||
runHook postInstallCheck
|
||||
'';
|
||||
|
||||
passthru.updateScript = ./update.sh;
|
||||
passthru = {
|
||||
updateScript = ./update.sh;
|
||||
# FIXME: Pass overrided `rust-analyzer` once `buildRustPackage` also implements #119942
|
||||
tests.neovim-lsp = callPackage ./test-neovim-lsp.nix { };
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
description = "A modular compiler frontend for the Rust language";
|
||||
|
|
|
@ -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 a new issue