Before: let g:ale_javascript_eslint_executable = 'eslint_d' silent! cd /testplugin/test let g:dir = getcwd() runtime ale_linters/javascript/eslint.vim After: let g:ale_javascript_eslint_executable = 'eslint' let g:ale_javascript_eslint_use_global = 0 silent execute 'cd ' . g:dir unlet! g:dir call ale#linter#Reset() Execute(create-react-app directories should be detected correctly): silent noautocmd new eslint-test-files/react-app/subdir/testfile.js AssertEqual \ g:dir . '/eslint-test-files/react-app/node_modules/eslint/bin/eslint.js', \ ale#handlers#eslint#GetExecutable(bufnr('')) :q Execute(use-global should override create-react-app detection): let g:ale_javascript_eslint_use_global = 1 silent noautocmd new eslint-test-files/react-app/subdir/testfile.js AssertEqual \ 'eslint_d', \ ale#handlers#eslint#GetExecutable(bufnr('')) :q Execute(other app directories should be detected correctly): silent noautocmd new eslint-test-files/other-app/subdir/testfile.js AssertEqual \ g:dir . '/eslint-test-files/node_modules/.bin/eslint', \ ale#handlers#eslint#GetExecutable(bufnr('')) :q Execute(use-global should override other app directories): let g:ale_javascript_eslint_use_global = 1 silent noautocmd new eslint-test-files/other-app/subdir/testfile.js AssertEqual \ 'eslint_d', \ ale#handlers#eslint#GetExecutable(bufnr('')) :q Execute(eslint_d should be detected correctly): silent noautocmd new eslint-test-files/app-with-eslint-d/testfile.js AssertEqual \ g:dir . '/eslint-test-files/app-with-eslint-d/node_modules/.bin/eslint_d', \ ale#handlers#eslint#GetExecutable(bufnr('')) :q