summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorw0rp <devw0rp@gmail.com>2016-10-04 18:24:46 +0100
committerw0rp <devw0rp@gmail.com>2016-10-04 18:24:46 +0100
commitc6dc324add0d03cadd624bcd0f990207bdd4210a (patch)
tree2a8440652e4a1ed03ad1122efd0afbe9b34c048d
parentbd2f39f21a772bda384c0ebf7bd7fba0d2ce667f (diff)
downloadale-c6dc324add0d03cadd624bcd0f990207bdd4210a.zip
Add a function for finding nearest files, and use it to fix JSHint so it will find configuration files automatically.
-rw-r--r--ale_linters/javascript/jshint.vim28
-rw-r--r--plugin/ale/util.vim6
2 files changed, 28 insertions, 6 deletions
diff --git a/ale_linters/javascript/jshint.vim b/ale_linters/javascript/jshint.vim
index 61f8faa8..12c93f2b 100644
--- a/ale_linters/javascript/jshint.vim
+++ b/ale_linters/javascript/jshint.vim
@@ -7,10 +7,26 @@ endif
let g:loaded_ale_linters_javascript_jshint = 1
-" Set this to the location of the jshint configuration file
-if !exists('g:ale_jshint_config_loc')
- let g:ale_jshint_config_loc = '.jshintrc'
-endif
+function! ale_linters#javascript#jshint#GetCommand(buffer)
+ " Set this to the location of the jshint configuration file to
+ " use a fixed location for .jshintrc
+ if exists('g:ale_jshint_config_loc')
+ let jshint_config = g:ale_jshint_config_loc
+ else
+ " Look for the JSHint config in parent directories.
+ let jshint_config = ale#util#FindNearestFile(a:buffer, '.jshintrc')
+ endif
+
+ let command = 'jshint --reporter unix'
+
+ if jshint_config
+ let command .= ' --config ' . shellescape(jshint_config)
+ endif
+
+ let command .= ' -'
+
+ return command
+endfunction
function! ale_linters#javascript#jshint#Handle(buffer, lines)
" Matches patterns line the following:
@@ -54,13 +70,13 @@ endfunction
call ALEAddLinter('javascript', {
\ 'name': 'jshint',
\ 'executable': 'jshint',
-\ 'command': 'jshint --reporter unix --config ' . g:ale_jshint_config_loc . ' -',
+\ 'command_callback': 'ale_linters#javascript#jshint#GetCommand',
\ 'callback': 'ale_linters#javascript#jshint#Handle',
\})
call ALEAddLinter('javascript.jsx', {
\ 'name': 'jshint',
\ 'executable': 'jshint',
-\ 'command': 'jshint --reporter unix --config ' . g:ale_jshint_config_loc . ' -',
+\ 'command_callback': 'ale_linters#javascript#jshint#GetCommand',
\ 'callback': 'ale_linters#javascript#jshint#Handle',
\})
diff --git a/plugin/ale/util.vim b/plugin/ale/util.vim
index 64dd59dc..d3f44573 100644
--- a/plugin/ale/util.vim
+++ b/plugin/ale/util.vim
@@ -24,3 +24,9 @@ let g:ale#util#stdin_wrapper = s:FindWrapperScript()
function! ale#util#GetLineCount(buffer)
return len(getbufline(a:buffer, 1, '$'))
endfunction
+
+" Given a buffer and a filename, find the nearest file by searching upwards
+" through the paths relative to the given buffer.
+function! ale#util#FindNearestFile(buffer, filename)
+ return findfile(a:filename, fnamemodify(bufname(a:buffer), ':p') . ';')
+endfunction