Vim / Neovim
AutoCompletion
For C++, anything that can use an LSP like coc.nvim
,
nvim-lspconfig
, or what not, should work as long as you generate a
compilation database and point to it.
Additionally, YouCompleteMe
works without the need of a C++ compilation database as long as you have run
./mach build
or ./mach configure
. Configuration for this lives
in .ycm_extra_conf at the root of the repo.
Rust auto-completion should work both with Rust’s LSP rust-analyzer
.
Make sure that the LSP is configured in a way that it detects the root of the
tree as a workspace, not the crate you happen to be editing. For example, the
default of nvim-lspconfig
is to search for the closest
Cargo.toml
file, which is not what you want. You’d want something like:
root_dir = lspconfig.util.root_pattern(".git", ".hg")
You also need to set some options to get full diagnostics:
"rust-analyzer.server.extraEnv": {
"CARGO_TARGET_DIR": "/path/to/objdir"
},
"rust-analyzer.check.overrideCommand": [ "/path/to/mach", "--log-no-times", "cargo", "check", "--all-crates", "--message-format-json" ],
"rust-analyzer.cargo.buildScripts.overrideCommand": [ "/path/to/mach", "--log-no-times", "cargo", "check", "--all-crates", "--message-format-json" ],
The easiest way to make these work out of the box is using
neoconf, which
automatically supports importing VSCode configuration files.
./mach ide vscode --no-interactive
will then generate the right
configuration for you.
ESLint
The easiest way to integrate ESLint with VIM is using the Syntastic plugin.
In order for VIM to detect jsm files as JS you might want something like this
in your .vimrc
:
autocmd BufRead,BufNewFile *.jsm set filetype=javascript
mach eslint --setup
installs a specific ESLint version and some ESLint
plugins into the repositories’ node_modules
.
You need something like this in your .vimrc
to run the checker
automatically on save:
autocmd FileType javascript,html,xhtml let b:syntastic_checkers = ['javascript/eslint']
You need to have eslint
in your PATH
, which you can get with
npm install -g eslint
. You need at least version 6.0.0.
You can also use something like eslint_d which should also do that automatically:
let g:syntastic_javascript_eslint_exec = 'eslint_d'