summaryrefslogtreecommitdiff
path: root/ale_linters/fish/fish.vim
blob: 19158cb086c1845ee64abb8f6d938136484ab03a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
" Author: Niraj Thapaliya - https://github.com/nthapaliya
" Description: Lints fish files using fish -n

function! ale_linters#fish#fish#Handle(buffer, lines) abort
    " Matches patterns such as:
    "
    " home/.config/fish/functions/foo.fish (line 1): Missing end to balance this function definition
    " function foo
    " ^
    " <W> fish: Error while reading file .config/fish/functions/foo.fish
    let l:pattern = '^.* (line \(\d\+\)): \(.*\)$'
    let l:output = []

    let l:i = 0
    while l:i < len(a:lines)
      let l:match = matchlist(a:lines[l:i], l:pattern)
      if len(l:match) && len(l:match[2])
        call add(l:output, {
              \  'col': len(a:lines[l:i + 2]),
              \  'lnum': str2nr(l:match[1]),
              \  'text': l:match[2],
              \})
      endif
      let l:i += 1
    endwhile

    return l:output
endfunction

call ale#linter#Define('fish', {
\   'name': 'fish',
\   'output_stream': 'stderr',
\   'executable': 'fish',
\   'command': 'fish -n %t',
\   'callback': 'ale_linters#fish#fish#Handle',
\})