summaryrefslogtreecommitdiff
path: root/autoload
diff options
context:
space:
mode:
authorw0rp <devw0rp@gmail.com>2017-02-14 21:02:49 +0000
committerw0rp <devw0rp@gmail.com>2017-02-14 21:02:49 +0000
commitc460602cbbf80c1b1b3f006ae3dd28528a80c17c (patch)
tree24b369ae545aecf856915ebae65bc6e913050c8f /autoload
parent78135103fbc6d1d4107f3eef448828c1498f9bcf (diff)
downloadale-c460602cbbf80c1b1b3f006ae3dd28528a80c17c.zip
#338 Try and stop ALE from throwing ALEs when run from a sandbox
Diffstat (limited to 'autoload')
-rw-r--r--autoload/ale.vim15
-rw-r--r--autoload/ale/cursor.vim3
-rw-r--r--autoload/ale/engine.vim12
-rw-r--r--autoload/ale/util.vim16
4 files changed, 40 insertions, 6 deletions
diff --git a/autoload/ale.vim b/autoload/ale.vim
index a5251f64..c81a57a6 100644
--- a/autoload/ale.vim
+++ b/autoload/ale.vim
@@ -4,9 +4,17 @@
let s:lint_timer = -1
+" A function for checking various conditions whereby ALE just shouldn't
+" attempt to do anything, say if particular buffer types are open in Vim.
+function! ale#ShouldDoNothing() abort
+ " Do nothing for blacklisted files
+ " OR if ALE is running in the sandbox
+ return index(g:ale_filetype_blacklist, &filetype) >= 0
+ \ || ale#util#InSandbox()
+endfunction
+
function! ale#Queue(delay) abort
- " Do nothing for blacklisted files.
- if index(g:ale_filetype_blacklist, &filetype) >= 0
+ if ale#ShouldDoNothing()
return
endif
@@ -29,8 +37,7 @@ function! ale#Queue(delay) abort
endfunction
function! ale#Lint(...) abort
- " Do nothing for blacklisted files.
- if index(g:ale_filetype_blacklist, &filetype) >= 0
+ if ale#ShouldDoNothing()
return
endif
diff --git a/autoload/ale/cursor.vim b/autoload/ale/cursor.vim
index 864f6f28..9aaa8e91 100644
--- a/autoload/ale/cursor.vim
+++ b/autoload/ale/cursor.vim
@@ -73,8 +73,7 @@ let s:cursor_timer = -1
let s:last_pos = [0, 0, 0]
function! ale#cursor#EchoCursorWarningWithDelay() abort
- " Do nothing for blacklisted files.
- if index(g:ale_filetype_blacklist, &filetype) >= 0
+ if ale#ShouldDoNothing()
return
endif
diff --git a/autoload/ale/engine.vim b/autoload/ale/engine.vim
index 5337fc2d..d816a96b 100644
--- a/autoload/ale/engine.vim
+++ b/autoload/ale/engine.vim
@@ -155,6 +155,12 @@ function! ale#engine#RemoveManagedFiles(buffer) abort
return
endif
+ " We can't delete anything in a sandbox, so wait until we escape from
+ " it to delete temporary files and directories.
+ if ale#util#InSandbox()
+ return
+ endif
+
" Delete files with a call akin to a plan `rm` command.
for l:filename in g:ale_buffer_info[a:buffer].temporary_file_list
call delete(l:filename)
@@ -195,6 +201,12 @@ function! s:HandleExit(job) abort
" which just closed.
call s:StopPreviousJobs(l:buffer, l:linter)
+ " Stop here if we land in the handle for a job completing if we're in
+ " a sandbox.
+ if ale#util#InSandbox()
+ return
+ endif
+
if l:next_chain_index < len(get(l:linter, 'command_chain', []))
call s:InvokeChain(l:buffer, l:linter, l:next_chain_index, l:output)
return
diff --git a/autoload/ale/util.vim b/autoload/ale/util.vim
index 6367489c..bf00051a 100644
--- a/autoload/ale/util.vim
+++ b/autoload/ale/util.vim
@@ -118,3 +118,19 @@ function! ale#util#BinarySearch(loclist, line, column) abort
endif
endwhile
endfunction
+
+" A function for testing if a function is running inside a sandbox.
+" See :help sandbox
+function! ale#util#InSandbox() abort
+ try
+ call setbufvar('%', '', '')
+ catch /^Vim\%((\a\+)\)\=:E48/
+ " E48 is the sandbox error.
+ return 1
+ catch
+ " If we're not in a sandbox, we'll get another error about an
+ " invalid buffer variable name.
+ endtry
+
+ return 0
+endfunction