summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorw0rp <devw0rp@gmail.com>2021-03-15 22:30:22 +0000
committerw0rp <devw0rp@gmail.com>2021-03-15 22:30:22 +0000
commitdc40ece3c389804df6d9423e0d52c8da2355ea17 (patch)
tree0a49d6d7fa4461e0ef9d7de736f390fc9ef424e3
parentbd808dca3092f1db56b26e22bc23234f97cb6388 (diff)
downloadale-dc40ece3c389804df6d9423e0d52c8da2355ea17.zip
#3632 Add ale#util#MapMatches
-rw-r--r--ale_linters/systemd/systemd_analyze.vim19
-rw-r--r--autoload/ale/util.vim10
-rw-r--r--test/test_getmatches.vader15
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
\ [