Adding guards to all the executables I use as makeprg, compiler,
formatprg, etc. in my Neovim config files (mostly in after/ftplugin) to
ensure portability across machines. While it is easy to detect language servers
when they come as static binaries, some LSPs come as packages, e.g., R or Racket
language servers. Here’s what I came with:
" after/ftplugin/r.vim
let output = system("Rscript -e '\"languageserver\" %in% installed.packages()'")
if v:shell_error == 0
lua <<EOF
vim.lsp.enable("r_language_server")
EOF
endif
" after/ftplugin/racket.vim
let output = system("raco pkg show racket-langserver | grep Checksum")
if v:shell_error == 0
lua <<EOF
vim.lsp.enable("racket-langserver")
EOF
endif
For other languages, I just use an if executable("<whatever>") test.
