mirror of
https://github.com/dense-analysis/ale.git
synced 2025-12-07 05:04:28 +08:00
* PHP: Fix column matching for unexpected single quotes
Unexpected single quotes resulted in an empty match, because PHP
surrounds the errors with quotes, and we check for the next quote to be
the ending delimiter.
For example: an unexpected string 'foo' would be presented as
`unexpected ''foo''`, and then the match would be `''`. The inner part
of that match is an empty string.
This adds a check for the keyword "expecting". Any quote after
"expecting" won't be matched, so we can use greedy matching instead of
non-greedy.
* PHP: Use "very magic"
The pattern started to get unreadable
Also replaced non-greedy matching (`\{-}`) by greedy matching, because
we don't need to match non-greedily anymore and it reads a little nicer.
* PHP: Add tests for column matches
And with that, also a test for unexpected single quotes.
39 lines
1.1 KiB
VimL
39 lines
1.1 KiB
VimL
" Author: Spencer Wood <https://github.com/scwood>
|
|
" Description: This file adds support for checking PHP with php-cli
|
|
|
|
function! ale_linters#php#php#Handle(buffer, lines) abort
|
|
" Matches patterns like the following:
|
|
"
|
|
" PHP Parse error: syntax error, unexpected ';', expecting ']' in - on line 15
|
|
let l:pattern = '\vParse error:\s+(.+unexpected ''(.+)%(expecting.+)@<!''.*|.+) in - on line (\d+)'
|
|
|
|
let l:output = []
|
|
|
|
for l:line in a:lines
|
|
let l:match = matchlist(l:line, l:pattern)
|
|
|
|
if len(l:match) == 0
|
|
continue
|
|
endif
|
|
|
|
" vcol is needed to indicate that the column is a character.
|
|
call add(l:output, {
|
|
\ 'bufnr': a:buffer,
|
|
\ 'lnum': l:match[3] + 0,
|
|
\ 'col': empty(l:match[2]) ? 0 : stridx(getline(l:match[3]), l:match[2]) + 1,
|
|
\ 'text': l:match[1],
|
|
\ 'type': 'E',
|
|
\})
|
|
endfor
|
|
|
|
return l:output
|
|
endfunction
|
|
|
|
call ale#linter#Define('php', {
|
|
\ 'name': 'php',
|
|
\ 'executable': 'php',
|
|
\ 'output_stream': 'both',
|
|
\ 'command': 'php -l -d display_errors=1 --',
|
|
\ 'callback': 'ale_linters#php#php#Handle',
|
|
\})
|