Fix #895 - Run Node.js scripts with node.exe instead of node on Windows
This commit is contained in:
parent
11fafbfd66
commit
6b87dd24ee
12 changed files with 48 additions and 52 deletions
|
@ -14,17 +14,9 @@ endfunction
|
||||||
|
|
||||||
function! ale_linters#javascript#standard#GetCommand(buffer) abort
|
function! ale_linters#javascript#standard#GetCommand(buffer) abort
|
||||||
let l:executable = ale_linters#javascript#standard#GetExecutable(a:buffer)
|
let l:executable = ale_linters#javascript#standard#GetExecutable(a:buffer)
|
||||||
|
|
||||||
if ale#Has('win32') && l:executable =~? '\.js$'
|
|
||||||
" .js files have to be executed with Node on Windows.
|
|
||||||
let l:head = 'node ' . ale#Escape(l:executable)
|
|
||||||
else
|
|
||||||
let l:head = ale#Escape(l:executable)
|
|
||||||
endif
|
|
||||||
|
|
||||||
let l:options = ale#Var(a:buffer, 'javascript_standard_options')
|
let l:options = ale#Var(a:buffer, 'javascript_standard_options')
|
||||||
|
|
||||||
return l:head
|
return ale#node#Executable(a:buffer, l:executable)
|
||||||
\ . (!empty(l:options) ? ' ' . l:options : '')
|
\ . (!empty(l:options) ? ' ' . l:options : '')
|
||||||
\ . ' --stdin %s'
|
\ . ' --stdin %s'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
|
@ -28,16 +28,8 @@ function! ale#fixers#eslint#Fix(buffer) abort
|
||||||
return 0
|
return 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if ale#Has('win32') && l:executable =~? 'eslint\.js$'
|
|
||||||
" For Windows, if we detect an eslint.js script, we need to execute
|
|
||||||
" it with node, or the file can be opened with a text editor.
|
|
||||||
let l:head = 'node ' . ale#Escape(l:executable)
|
|
||||||
else
|
|
||||||
let l:head = ale#Escape(l:executable)
|
|
||||||
endif
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
\ 'command': l:head
|
\ 'command': ale#node#Executable(a:buffer, l:executable)
|
||||||
\ . ' --config ' . ale#Escape(l:config)
|
\ . ' --config ' . ale#Escape(l:config)
|
||||||
\ . ' --fix %t',
|
\ . ' --fix %t',
|
||||||
\ 'read_temporary_file': 1,
|
\ 'read_temporary_file': 1,
|
||||||
|
|
|
@ -11,16 +11,8 @@ endfunction
|
||||||
function! ale#fixers#standard#Fix(buffer) abort
|
function! ale#fixers#standard#Fix(buffer) abort
|
||||||
let l:executable = ale#fixers#standard#GetExecutable(a:buffer)
|
let l:executable = ale#fixers#standard#GetExecutable(a:buffer)
|
||||||
|
|
||||||
if ale#Has('win32') && l:executable =~? 'cmd\.js$'
|
|
||||||
" For Windows, if we detect an standard.js script, we need to execute
|
|
||||||
" it with node, or the file can be opened with a text editor.
|
|
||||||
let l:head = 'node ' . ale#Escape(l:executable)
|
|
||||||
else
|
|
||||||
let l:head = ale#Escape(l:executable)
|
|
||||||
endif
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
\ 'command': l:head
|
\ 'command': ale#node#Executable(a:buffer, l:executable)
|
||||||
\ . ' --fix %t',
|
\ . ' --fix %t',
|
||||||
\ 'read_temporary_file': 1,
|
\ 'read_temporary_file': 1,
|
||||||
\}
|
\}
|
||||||
|
|
|
@ -15,16 +15,8 @@ endfunction
|
||||||
function! ale#fixers#stylelint#Fix(buffer) abort
|
function! ale#fixers#stylelint#Fix(buffer) abort
|
||||||
let l:executable = ale#fixers#stylelint#GetExecutable(a:buffer)
|
let l:executable = ale#fixers#stylelint#GetExecutable(a:buffer)
|
||||||
|
|
||||||
if ale#Has('win32') && l:executable =~? 'stylelint\.js$'
|
|
||||||
" For Windows, if we detect an stylelint.js script, we need to execute
|
|
||||||
" it with node, or the file can be opened with a text editor.
|
|
||||||
let l:head = 'node ' . ale#Escape(l:executable)
|
|
||||||
else
|
|
||||||
let l:head = ale#Escape(l:executable)
|
|
||||||
endif
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
\ 'command': l:head
|
\ 'command': ale#node#Executable(a:buffer, l:executable)
|
||||||
\ . ' --fix %t',
|
\ . ' --fix %t',
|
||||||
\ 'read_temporary_file': 1,
|
\ 'read_temporary_file': 1,
|
||||||
\}
|
\}
|
||||||
|
|
|
@ -17,17 +17,9 @@ endfunction
|
||||||
function! ale#handlers#eslint#GetCommand(buffer) abort
|
function! ale#handlers#eslint#GetCommand(buffer) abort
|
||||||
let l:executable = ale#handlers#eslint#GetExecutable(a:buffer)
|
let l:executable = ale#handlers#eslint#GetExecutable(a:buffer)
|
||||||
|
|
||||||
if ale#Has('win32') && l:executable =~? 'eslint\.js$'
|
|
||||||
" For Windows, if we detect an eslint.js script, we need to execute
|
|
||||||
" it with node, or the file can be opened with a text editor.
|
|
||||||
let l:head = 'node ' . ale#Escape(l:executable)
|
|
||||||
else
|
|
||||||
let l:head = ale#Escape(l:executable)
|
|
||||||
endif
|
|
||||||
|
|
||||||
let l:options = ale#Var(a:buffer, 'javascript_eslint_options')
|
let l:options = ale#Var(a:buffer, 'javascript_eslint_options')
|
||||||
|
|
||||||
return l:head
|
return ale#node#Executable(a:buffer, l:executable)
|
||||||
\ . (!empty(l:options) ? ' ' . l:options : '')
|
\ . (!empty(l:options) ? ' ' . l:options : '')
|
||||||
\ . ' -f unix --stdin --stdin-filename %s'
|
\ . ' -f unix --stdin --stdin-filename %s'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
" Author: w0rp <devw0rp@gmail.com>
|
" Author: w0rp <devw0rp@gmail.com>
|
||||||
" Description: Functions for working with Node executables.
|
" Description: Functions for working with Node executables.
|
||||||
|
|
||||||
|
call ale#Set('windows_node_executable_path', 'node.exe')
|
||||||
|
|
||||||
" Given a buffer number, a base variable name, and a list of paths to search
|
" Given a buffer number, a base variable name, and a list of paths to search
|
||||||
" for in ancestor directories, detect the executable path for a Node program.
|
" for in ancestor directories, detect the executable path for a Node program.
|
||||||
"
|
"
|
||||||
|
@ -20,3 +22,21 @@ function! ale#node#FindExecutable(buffer, base_var_name, path_list) abort
|
||||||
|
|
||||||
return ale#Var(a:buffer, a:base_var_name . '_executable')
|
return ale#Var(a:buffer, a:base_var_name . '_executable')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
" Create a executable string which executes a Node.js script command with a
|
||||||
|
" Node.js executable if needed.
|
||||||
|
"
|
||||||
|
" The executable string should not be escaped before passing it to this
|
||||||
|
" function, the executable string will be escaped when returned by this
|
||||||
|
" function.
|
||||||
|
"
|
||||||
|
" The executable is only prefixed for Windows machines
|
||||||
|
function! ale#node#Executable(buffer, executable) abort
|
||||||
|
if ale#Has('win32') && a:executable =~? '\.js$'
|
||||||
|
let l:node = ale#Var(a:buffer, 'windows_node_executable_path')
|
||||||
|
|
||||||
|
return ale#Escape(l:node) . ' ' . ale#Escape(a:executable)
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ale#Escape(a:executable)
|
||||||
|
endfunction
|
||||||
|
|
16
doc/ale.txt
16
doc/ale.txt
|
@ -918,6 +918,22 @@ b:ale_warn_about_trailing_whitespace *b:ale_warn_about_trailing_whitespace*
|
||||||
This option may be configured on a per buffer basis.
|
This option may be configured on a per buffer basis.
|
||||||
|
|
||||||
|
|
||||||
|
g:ale_windows_node_executable_path *g:ale_windows_node_executable_path*
|
||||||
|
*b:ale_windows_node_executable_path*
|
||||||
|
|
||||||
|
Type: |String|
|
||||||
|
Default: `'node.exe'`
|
||||||
|
|
||||||
|
This variable is used as the path to the executable to use for executing
|
||||||
|
scripts with Node.js on Windows.
|
||||||
|
|
||||||
|
For Windows, any file with a `.js` file extension needs to be executed with
|
||||||
|
the node executable explicitly. Otherwise, Windows could try and open the
|
||||||
|
scripts with other applications, like a text editor. Therefore, these
|
||||||
|
scripts are executed with whatever executable is configured with this
|
||||||
|
setting.
|
||||||
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
3.1. Highlights *ale-highlights*
|
3.1. Highlights *ale-highlights*
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,7 @@ Execute(.js files should be executed with node on Windows):
|
||||||
\ ale_linters#javascript#standard#GetExecutable(bufnr(''))
|
\ ale_linters#javascript#standard#GetExecutable(bufnr(''))
|
||||||
|
|
||||||
AssertEqual
|
AssertEqual
|
||||||
\ 'node ' . ale#Escape(b:executable) . ' --stdin %s',
|
\ ale#Escape('node.exe') . ' ' . ale#Escape(b:executable) . ' --stdin %s',
|
||||||
\ ale_linters#javascript#standard#GetCommand(bufnr(''))
|
\ ale_linters#javascript#standard#GetCommand(bufnr(''))
|
||||||
|
|
||||||
Execute(The global executable should be used otherwise):
|
Execute(The global executable should be used otherwise):
|
||||||
|
|
|
@ -26,7 +26,7 @@ Execute(The eslint fixer with eslint.js should be run with node on Windows):
|
||||||
AssertEqual
|
AssertEqual
|
||||||
\ {
|
\ {
|
||||||
\ 'read_temporary_file': 1,
|
\ 'read_temporary_file': 1,
|
||||||
\ 'command': 'node '
|
\ 'command': ale#Escape('node.exe') . ' '
|
||||||
\ . ale#Escape(simplify(g:dir . '/../eslint-test-files/react-app/node_modules/eslint/bin/eslint.js'))
|
\ . ale#Escape(simplify(g:dir . '/../eslint-test-files/react-app/node_modules/eslint/bin/eslint.js'))
|
||||||
\ . ' --config ' . ale#Escape(simplify(g:dir . '/../eslint-test-files/react-app/.eslintrc.js'))
|
\ . ' --config ' . ale#Escape(simplify(g:dir . '/../eslint-test-files/react-app/.eslintrc.js'))
|
||||||
\ . ' --fix %t',
|
\ . ' --fix %t',
|
||||||
|
|
|
@ -25,7 +25,7 @@ Execute(The standard fixer with standard.js should be run with node on Windows):
|
||||||
AssertEqual
|
AssertEqual
|
||||||
\ {
|
\ {
|
||||||
\ 'read_temporary_file': 1,
|
\ 'read_temporary_file': 1,
|
||||||
\ 'command': 'node '
|
\ 'command': ale#Escape('node.exe') . ' '
|
||||||
\ . ale#Escape(simplify(g:dir . '/../eslint-test-files/react-app/node_modules/standard/bin/cmd.js'))
|
\ . ale#Escape(simplify(g:dir . '/../eslint-test-files/react-app/node_modules/standard/bin/cmd.js'))
|
||||||
\ . ' --fix %t',
|
\ . ' --fix %t',
|
||||||
\ },
|
\ },
|
||||||
|
|
|
@ -25,7 +25,7 @@ Execute(The stylelint fixer with stylelint.js should be run with node on Windows
|
||||||
AssertEqual
|
AssertEqual
|
||||||
\ {
|
\ {
|
||||||
\ 'read_temporary_file': 1,
|
\ 'read_temporary_file': 1,
|
||||||
\ 'command': 'node '
|
\ 'command': ale#Escape('node.exe') . ' '
|
||||||
\ . ale#Escape(simplify(g:dir . '/../eslint-test-files/react-app/node_modules/stylelint/bin/stylelint.js'))
|
\ . ale#Escape(simplify(g:dir . '/../eslint-test-files/react-app/node_modules/stylelint/bin/stylelint.js'))
|
||||||
\ . ' --fix %t',
|
\ . ' --fix %t',
|
||||||
\ },
|
\ },
|
||||||
|
|
|
@ -58,7 +58,7 @@ Execute(eslint.js executables should be run with node on Windows):
|
||||||
|
|
||||||
" We have to execute the file with node.
|
" We have to execute the file with node.
|
||||||
AssertEqual
|
AssertEqual
|
||||||
\ 'node '''
|
\ ale#Escape('node.exe') . ' '
|
||||||
\ . g:dir . '/eslint-test-files/react-app/node_modules/eslint/bin/eslint.js'
|
\ . ale#Escape(g:dir . '/eslint-test-files/react-app/node_modules/eslint/bin/eslint.js')
|
||||||
\ . ''' -f unix --stdin --stdin-filename %s',
|
\ . ' -f unix --stdin --stdin-filename %s',
|
||||||
\ ale#handlers#eslint#GetCommand(bufnr(''))
|
\ ale#handlers#eslint#GetCommand(bufnr(''))
|
||||||
|
|
Reference in a new issue