diff options
author | w0rp <devw0rp@gmail.com> | 2021-03-15 22:30:22 +0000 |
---|---|---|
committer | w0rp <devw0rp@gmail.com> | 2021-03-15 22:30:22 +0000 |
commit | dc40ece3c389804df6d9423e0d52c8da2355ea17 (patch) | |
tree | 0a49d6d7fa4461e0ef9d7de736f390fc9ef424e3 | |
parent | bd808dca3092f1db56b26e22bc23234f97cb6388 (diff) | |
download | ale-dc40ece3c389804df6d9423e0d52c8da2355ea17.zip |
#3632 Add ale#util#MapMatches
-rw-r--r-- | ale_linters/systemd/systemd_analyze.vim | 19 | ||||
-rw-r--r-- | autoload/ale/util.vim | 10 | ||||
-rw-r--r-- | test/test_getmatches.vader | 15 |
3 files changed, 31 insertions, 13 deletions
diff --git a/ale_linters/systemd/systemd_analyze.vim b/ale_linters/systemd/systemd_analyze.vim index 7e8bba2f..64eef8cf 100644 --- a/ale_linters/systemd/systemd_analyze.vim +++ b/ale_linters/systemd/systemd_analyze.vim @@ -1,17 +1,10 @@ function! ale_linters#systemd#systemd_analyze#Handle(buffer, lines) abort - let l:re = '\v(.+):([0-9]+): (.+)' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:re) - call add(l:output, { - \ 'lnum': str2nr(l:match[2]), - \ 'col': 1, - \ 'type': 'W', - \ 'text': l:match[3], - \}) - endfor - - return l:output + return ale#util#MapMatches(a:lines, '\v(.+):([0-9]+): (.+)', {match -> { + \ 'lnum': str2nr(match[2]), + \ 'col': 1, + \ 'type': 'W', + \ 'text': match[3], + \}}) endfunction call ale#linter#Define('systemd', { diff --git a/autoload/ale/util.vim b/autoload/ale/util.vim index 5c41ab83..5b2bfcd7 100644 --- a/autoload/ale/util.vim +++ b/autoload/ale/util.vim @@ -340,6 +340,16 @@ function! ale#util#GetMatches(lines, patterns) abort return l:matches 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 try let l:output = execute('function a:function') diff --git a/test/test_getmatches.vader b/test/test_getmatches.vader index e728b571..edf84f6e 100644 --- a/test/test_getmatches.vader +++ b/test/test_getmatches.vader @@ -72,6 +72,21 @@ Execute (ale#util#GetMatches should accept a string for a single pattern): \ '^.*:\(\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): AssertEqual \ [ |