#756 Escape the paths used for the --include parameter for gometalinter, which uses RE2
This commit is contained in:
parent
d12e990f73
commit
340c0bbac5
4 changed files with 14 additions and 4 deletions
|
@ -14,7 +14,7 @@ function! ale_linters#go#gometalinter#GetCommand(buffer) abort
|
|||
let l:options = ale#Var(a:buffer, 'go_gometalinter_options')
|
||||
|
||||
return ale#Escape(l:executable)
|
||||
\ . ' --include=' . ale#Escape(l:filename)
|
||||
\ . ' --include=' . ale#Escape(ale#util#EscapePCRE(l:filename))
|
||||
\ . (!empty(l:options) ? ' ' . l:options : '')
|
||||
\ . ' ' . ale#Escape(fnamemodify(l:filename, ':h'))
|
||||
endfunction
|
||||
|
|
|
@ -161,3 +161,9 @@ function! ale#util#FunctionArgCount(function) abort
|
|||
|
||||
return l:count
|
||||
endfunction
|
||||
|
||||
" Escape a string so the characters in it will be safe for use inside of PCRE
|
||||
" or RE2 regular expressions without characters having special meanings.
|
||||
function! ale#util#EscapePCRE(unsafe_string) abort
|
||||
return substitute(a:unsafe_string, '\([\-\[\]{}()*+?.^$|]\)', '\\\1', 'g')
|
||||
endfunction
|
||||
|
|
|
@ -22,7 +22,7 @@ Execute(The gometalinter callback should return the right defaults):
|
|||
\ ale_linters#go#gometalinter#GetExecutable(bufnr(''))
|
||||
AssertEqual
|
||||
\ ale#Escape('gometalinter')
|
||||
\ . ' --include=' . ale#Escape(expand('%'))
|
||||
\ . ' --include=' . ale#Escape(ale#util#EscapePCRE(expand('%')))
|
||||
\ . ' ' . ale#Escape(getcwd()),
|
||||
\ ale_linters#go#gometalinter#GetCommand(bufnr(''))
|
||||
|
||||
|
@ -34,7 +34,7 @@ Execute(The gometalinter callback should use a configured executable):
|
|||
\ ale_linters#go#gometalinter#GetExecutable(bufnr(''))
|
||||
AssertEqual
|
||||
\ ale#Escape('something else')
|
||||
\ . ' --include=' . ale#Escape(expand('%'))
|
||||
\ . ' --include=' . ale#Escape(ale#util#EscapePCRE(expand('%')))
|
||||
\ . ' ' . ale#Escape(getcwd()),
|
||||
\ ale_linters#go#gometalinter#GetCommand(bufnr(''))
|
||||
|
||||
|
@ -43,7 +43,7 @@ Execute(The gometalinter callback should use configured options):
|
|||
|
||||
AssertEqual
|
||||
\ ale#Escape('gometalinter')
|
||||
\ . ' --include=' . ale#Escape(expand('%'))
|
||||
\ . ' --include=' . ale#Escape(ale#util#EscapePCRE(expand('%')))
|
||||
\ . ' --foobar'
|
||||
\ . ' ' . ale#Escape(getcwd()),
|
||||
\ ale_linters#go#gometalinter#GetCommand(bufnr(''))
|
||||
|
|
4
test/test_regex_escaping.vader
Normal file
4
test/test_regex_escaping.vader
Normal file
|
@ -0,0 +1,4 @@
|
|||
Execute(ale#util#EscapePCRE should escape strings for PCRE or RE2 appropriately):
|
||||
AssertEqual '\\\^\$\*\+\?\.\(\)\|\{\}\[\]', ale#util#EscapePCRE('\^$*+?.()|{}[]')
|
||||
AssertEqual 'abcABC09', ale#util#EscapePCRE('abcABC09')
|
||||
AssertEqual '/', ale#util#EscapePCRE('/')
|
Reference in a new issue