mirror of
https://github.com/dense-analysis/ale.git
synced 2025-12-07 05:04:28 +08:00
fix(eslint): yarn 2 project cwd (#3684)
* eslint-handler: fix getcwd when there is no node_modules
This commit is contained in:
@@ -2,10 +2,10 @@
|
|||||||
" Description: Functions for working with eslint, for checking or fixing files.
|
" Description: Functions for working with eslint, for checking or fixing files.
|
||||||
|
|
||||||
let s:executables = [
|
let s:executables = [
|
||||||
|
\ '.yarn/sdks/eslint/bin/eslint.js',
|
||||||
\ 'node_modules/.bin/eslint_d',
|
\ 'node_modules/.bin/eslint_d',
|
||||||
\ 'node_modules/eslint/bin/eslint.js',
|
\ 'node_modules/eslint/bin/eslint.js',
|
||||||
\ 'node_modules/.bin/eslint',
|
\ 'node_modules/.bin/eslint',
|
||||||
\ '.yarn/sdks/eslint/bin/eslint',
|
|
||||||
\]
|
\]
|
||||||
let s:sep = has('win32') ? '\' : '/'
|
let s:sep = has('win32') ? '\' : '/'
|
||||||
|
|
||||||
@@ -52,14 +52,20 @@ function! ale#handlers#eslint#GetCwd(buffer) abort
|
|||||||
let l:executable = ale#path#FindNearestExecutable(a:buffer, s:executables)
|
let l:executable = ale#path#FindNearestExecutable(a:buffer, s:executables)
|
||||||
|
|
||||||
if !empty(l:executable)
|
if !empty(l:executable)
|
||||||
let l:nmi = strridx(l:executable, 'node_modules')
|
let l:modules_index = strridx(l:executable, 'node_modules')
|
||||||
let l:project_dir = l:executable[0:l:nmi - 2]
|
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
|
else
|
||||||
let l:modules_dir = ale#path#FindNearestDirectory(a:buffer, 'node_modules')
|
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
|
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
|
endfunction
|
||||||
|
|
||||||
function! ale#handlers#eslint#GetCommand(buffer) abort
|
function! ale#handlers#eslint#GetCommand(buffer) abort
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ Execute(eslint.js executables should be run with node on Windows):
|
|||||||
\ (has('win32') ? ale#Escape('node.exe') . ' ' : '')
|
\ (has('win32') ? ale#Escape('node.exe') . ' ' : '')
|
||||||
\ . ale#Escape(b:executable) . b:args
|
\ . 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')
|
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')
|
let b:executable = ale#path#Simplify(g:dir . '/../test-files/eslint/react-app/node_modules/eslint/bin/eslint.js')
|
||||||
@@ -74,3 +74,12 @@ Execute(eslint.js should be run from a containing project with eslint):
|
|||||||
AssertLinter b:executable,
|
AssertLinter b:executable,
|
||||||
\ (has('win32') ? ale#Escape('node.exe') . ' ' : '')
|
\ (has('win32') ? ale#Escape('node.exe') . ' ' : '')
|
||||||
\ . ale#Escape(b:executable) . b:args
|
\ . 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
|
||||||
|
|||||||
0
test/test-files/eslint/yarn2-app/.yarn/sdks/eslint/bin/eslint.js
vendored
Normal file
0
test/test-files/eslint/yarn2-app/.yarn/sdks/eslint/bin/eslint.js
vendored
Normal file
0
test/test-files/eslint/yarn2-app/subdir/testfile.js
Normal file
0
test/test-files/eslint/yarn2-app/subdir/testfile.js
Normal file
Reference in New Issue
Block a user