rust-analyzer: add tests with neovim

main
oxalica 2 years ago
parent 4ae5670eaa
commit 178aaa60f1
  1. 7
      pkgs/development/tools/rust/rust-analyzer/default.nix
  2. 49
      pkgs/development/tools/rust/rust-analyzer/test-neovim-lsp.nix

@ -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…
Cancel
Save