summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorw0rp <devw0rp@gmail.com>2019-02-07 16:24:41 +0000
committerw0rp <devw0rp@gmail.com>2019-02-07 16:26:04 +0000
commit0c6370f41a2e474fc8468a40e5b9a9312347d743 (patch)
treede2b81e06425dca877addd5575e36ea2f22365f1
parent0ed3fbc596ba8d603d2b310385e093906c1bdff2 (diff)
downloadale-2.3.1.zip
Fix #2276 - Replace a potentially infinite loop for hiev2.3.1
-rw-r--r--ale_linters/haskell/hie.vim24
1 files changed, 9 insertions, 15 deletions
diff --git a/ale_linters/haskell/hie.vim b/ale_linters/haskell/hie.vim
index 3ff1180a..dd1fab95 100644
--- a/ale_linters/haskell/hie.vim
+++ b/ale_linters/haskell/hie.vim
@@ -9,26 +9,20 @@ function! ale_linters#haskell#hie#GetProjectRoot(buffer) abort
" If it's empty, search for the cabal file
if empty(l:project_file)
- let l:cabal_file = fnamemodify(bufname(a:buffer), ':p:h')
- let l:paths = ''
-
- while empty(matchstr(l:cabal_file, '^\(\/\|\(\w:\\\)\)$'))
- let l:cabal_file = fnamemodify(l:cabal_file, ':h')
- let l:paths = l:paths . l:cabal_file . ','
- endwhile
-
+ " Search all of the paths except for the root filesystem path.
+ let l:paths = join(
+ \ ale#path#Upwards(expand('#' . a:buffer . ':p:h'))[:-2],
+ \ ','
+ \)
let l:project_file = globpath(l:paths, '*.cabal')
endif
- " Either extract the project directory or take the current working
- " directory
- if !empty(l:project_file)
- let l:project_file = fnamemodify(l:project_file, ':h')
- else
- let l:project_file = expand('#' . a:buffer . ':p:h')
+ " If we still can't find one, use the current file.
+ if empty(l:project_file)
+ let l:project_file = expand('#' . a:buffer . ':p')
endif
- return l:project_file
+ return fnamemodify(l:project_file, ':h')
endfunction
function! ale_linters#haskell#hie#GetCommand(buffer) abort