#3632 Add ale#util#MapMatches

This commit is contained in:
w0rp 2021-03-15 22:30:22 +00:00
parent bd808dca30
commit dc40ece3c3
No known key found for this signature in database
GPG Key ID: 0FC1ECAA8C81CD83
3 changed files with 31 additions and 13 deletions

View File

@ -1,17 +1,10 @@
function! ale_linters#systemd#systemd_analyze#Handle(buffer, lines) abort function! ale_linters#systemd#systemd_analyze#Handle(buffer, lines) abort
let l:re = '\v(.+):([0-9]+): (.+)' return ale#util#MapMatches(a:lines, '\v(.+):([0-9]+): (.+)', {match -> {
let l:output = [] \ 'lnum': str2nr(match[2]),
for l:match in ale#util#GetMatches(a:lines, l:re)
call add(l:output, {
\ 'lnum': str2nr(l:match[2]),
\ 'col': 1, \ 'col': 1,
\ 'type': 'W', \ 'type': 'W',
\ 'text': l:match[3], \ 'text': match[3],
\}) \}})
endfor
return l:output
endfunction endfunction
call ale#linter#Define('systemd', { call ale#linter#Define('systemd', {

View File

@ -340,6 +340,16 @@ function! ale#util#GetMatches(lines, patterns) abort
return l:matches return l:matches
endfunction endfunction
" Given a single line, or a List of lines, and a single pattern, or a List of
" patterns, and a callback function for mapping the items matches, return the
" result of mapping all of the matches for the lines from the given patterns,
" using matchlist()
"
" Only the first pattern which matches a line will be returned.
function! ale#util#MapMatches(lines, patterns, Callback) abort
return map(ale#util#GetMatches(a:lines, a:patterns), 'a:Callback(v:val)')
endfunction
function! s:LoadArgCount(function) abort function! s:LoadArgCount(function) abort
try try
let l:output = execute('function a:function') let l:output = execute('function a:function')

View File

@ -72,6 +72,21 @@ Execute (ale#util#GetMatches should accept a string for a single pattern):
\ '^.*:\(\d\+\):\(\d\+\): \(.\+\) \[\(.\+\)\]$' \ '^.*:\(\d\+\):\(\d\+\): \(.\+\) \[\(.\+\)\]$'
\ ) \ )
Execute (ale#util#MapMatches should map matches):
AssertEqual
\ [
\ '/path/to/some-filename.js:47:14: Missing trailing comma. [Warning/comma-dangle]',
\ '/path/to/some-filename.js:56:41: Missing semicolon. [Error/semi]',
\ ],
\ ale#util#MapMatches(
\ [
\ '/path/to/some-filename.js:47:14: Missing trailing comma. [Warning/comma-dangle]',
\ '/path/to/some-filename.js:56:41: Missing semicolon. [Error/semi]',
\ ],
\ '^.*:\(\d\+\):\(\d\+\): \(.\+\) \[\(.\+\)\]$',
\ {match -> match[0]}
\ )
Execute (ale#util#GetMatches should accept a single line as a string): Execute (ale#util#GetMatches should accept a single line as a string):
AssertEqual AssertEqual
\ [ \ [