Skip to content

Commit

Permalink
fix(eslint): yarn 2 project cwd (#3684)
Browse files Browse the repository at this point in the history
* eslint-handler: fix getcwd when there is no node_modules
  • Loading branch information
shannonmoeller authored Jun 19, 2021
1 parent a566a5d commit 397d56f
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 6 deletions.
16 changes: 11 additions & 5 deletions autoload/ale/handlers/eslint.vim
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
" Description: Functions for working with eslint, for checking or fixing files.

let s:executables = [
\ '.yarn/sdks/eslint/bin/eslint.js',
\ 'node_modules/.bin/eslint_d',
\ 'node_modules/eslint/bin/eslint.js',
\ 'node_modules/.bin/eslint',
\ '.yarn/sdks/eslint/bin/eslint',
\]
let s:sep = has('win32') ? '\' : '/'

Expand Down Expand Up @@ -52,14 +52,20 @@ function! ale#handlers#eslint#GetCwd(buffer) abort
let l:executable = ale#path#FindNearestExecutable(a:buffer, s:executables)

if !empty(l:executable)
let l:nmi = strridx(l:executable, 'node_modules')
let l:project_dir = l:executable[0:l:nmi - 2]
let l:modules_index = strridx(l:executable, 'node_modules')
let l:modules_root = l:modules_index > -1 ? l:executable[0:l:modules_index - 2] : ''

let l:sdks_index = strridx(l:executable, ale#path#Simplify('.yarn/sdks'))
let l:sdks_root = l:sdks_index > -1 ? l:executable[0:l:sdks_index - 2] : ''
else
let l:modules_dir = ale#path#FindNearestDirectory(a:buffer, 'node_modules')
let l:project_dir = !empty(l:modules_dir) ? fnamemodify(l:modules_dir, ':h:h') : ''
let l:modules_root = !empty(l:modules_dir) ? fnamemodify(l:modules_dir, ':h:h') : ''

let l:sdks_dir = ale#path#FindNearestDirectory(a:buffer, ale#path#Simplify('.yarn/sdks'))
let l:sdks_root = !empty(l:sdks_dir) ? fnamemodify(l:sdks_dir, ':h:h:h') : ''
endif

return !empty(l:project_dir) ? l:project_dir : ''
return strlen(l:modules_root) > strlen(l:sdks_root) ? l:modules_root : l:sdks_root
endfunction

function! ale#handlers#eslint#GetCommand(buffer) abort
Expand Down
11 changes: 10 additions & 1 deletion test/linter/test_eslint.vader
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,20 @@ Execute(eslint.js executables should be run with node on Windows):
\ (has('win32') ? ale#Escape('node.exe') . ' ' : '')
\ . ale#Escape(b:executable) . b:args

Execute(eslint.js should be run from a containing project with eslint):
Execute(eslint.js should be run from a containing project with node_modules):
call ale#test#SetFilename('../test-files/eslint/react-app/subdir-with-package-json/testfile.js')

let b:executable = ale#path#Simplify(g:dir . '/../test-files/eslint/react-app/node_modules/eslint/bin/eslint.js')
AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/eslint/react-app')
AssertLinter b:executable,
\ (has('win32') ? ale#Escape('node.exe') . ' ' : '')
\ . ale#Escape(b:executable) . b:args

Execute(eslint.js should be run from a containing project with .yarn/sdks):
call ale#test#SetFilename('../test-files/eslint/yarn2-app/subdir/testfile.js')

let b:executable = ale#path#Simplify(g:dir . '/../test-files/eslint/yarn2-app/.yarn/sdks/eslint/bin/eslint.js')
AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/eslint/yarn2-app')
AssertLinter b:executable,
\ (has('win32') ? ale#Escape('node.exe') . ' ' : '')
\ . ale#Escape(b:executable) . b:args
Empty file.
Empty file.

0 comments on commit 397d56f

Please sign in to comment.