biglybt: 3.5.0.0 -> 3.6.0.0
[NixPkgs.git] / pkgs / development / tools / rust / rust-analyzer / test-neovim-lsp.nix
blob963e134075ed748ca171da6b22b7feae880123ec
1 { runCommand, cargo, neovim, rust-analyzer, rustc }:
2 runCommand "test-neovim-rust-analyzer" {
3   nativeBuildInputs = [ cargo neovim rust-analyzer rustc ];
5   testRustSrc = /* rust */ ''
6     fn main() {
7       let mut var = vec![None];
8       var.push(Some("hello".to_owned()));
9     }
10   '';
12   nvimConfig = /* lua */ ''
13     vim.lsp.buf_attach_client(vim.api.nvim_get_current_buf(), vim.lsp.start_client({
14       cmd = { "rust-analyzer" },
15       handlers = {
16         ["$/progress"] = function(_, msg, ctx)
17           if msg.token == "rustAnalyzer/Indexing" and msg.value.kind == "end" then
18             vim.cmd("goto 23") -- let mut |var =...
19             vim.lsp.buf.hover()
20           end
21         end,
22         ["textDocument/hover"] = function(_, msg, ctx)
23           -- Keep newlines.
24           io.write(msg.contents.value)
25           vim.cmd("q")
26         end,
27       },
28       on_error = function(code)
29         print("error: " .. code)
30         vim.cmd("q")
31       end
32     }))
33   '';
35 } ''
36   # neovim requires a writable HOME.
37   export HOME="$(pwd)"
39   cargo new --bin test-rust-analyzer
40   cd test-rust-analyzer
41   cat <<<"$testRustSrc" >src/main.rs
42   cat <<<"$nvimConfig" >script.lua
44   # `-u` doesn't work
45   result="$(nvim --headless +'lua dofile("script.lua")' src/main.rs)"
46   echo "$result"
47   [[ "$result" == *"var: Vec<Option<String>>"* ]]
48   touch $out