Before: Save g:ale_rust_rls_executable Save g:ale_rust_rls_toolchain unlet! g:ale_rust_rls_executable unlet! g:ale_rust_rls_toolchain runtime ale_linters/rust/rls.vim call ale#test#SetDirectory('/testplugin/test/command_callback') After: Restore call ale#test#RestoreDirectory() call ale#linter#Reset() Execute(The default executable path should be correct): AssertEqual 'rls', ale_linters#rust#rls#GetExecutable(bufnr('')) AssertEqual \ ale#Escape('rls') . ' +' . ale#Escape('nightly'), \ ale_linters#rust#rls#GetCommand(bufnr('')) Execute(The toolchain should be configurable): let g:ale_rust_rls_toolchain = 'stable' AssertEqual \ ale#Escape('rls') . ' +' . ale#Escape('stable'), \ ale_linters#rust#rls#GetCommand(bufnr('')) Execute(The toolchain should be ommitted if not given): let g:ale_rust_rls_toolchain = '' AssertEqual \ ale#Escape('rls'), \ ale_linters#rust#rls#GetCommand(bufnr('')) Execute(The project root should be detected correctly): AssertEqual '', ale_linters#rust#rls#GetProjectRoot(bufnr('')) call ale#test#SetFilename('rust-rls-project/test.rs') AssertEqual \ ale#path#Simplify(g:dir . '/rust-rls-project'), \ ale_linters#rust#rls#GetProjectRoot(bufnr(''))