summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ale_linters/nim/nimcheck.vim14
-rw-r--r--test/handler/test_nim_handler.vader35
2 files changed, 49 insertions, 0 deletions
diff --git a/ale_linters/nim/nimcheck.vim b/ale_linters/nim/nimcheck.vim
index b5796dcd..b739ca04 100644
--- a/ale_linters/nim/nimcheck.vim
+++ b/ale_linters/nim/nimcheck.vim
@@ -1,6 +1,15 @@
" Author: Baabelfish
" Description: Typechecking for nim files
+let s:end_col_patterns = [
+\ '\v''([^'']+)'' is declared but not used.*',
+\ '\videntifier expected, but found ''([^'']+)''',
+\ '\vimported and not used: ''([^'']+)''.*',
+\ '\vundeclared identifier: ''([^'']+)''',
+\ '\v''([^'']+)'' cannot be assigned to',
+\ '\vredefinition of ''([^'']+)'';',
+\]
+
function! ale_linters#nim#nimcheck#Handle(buffer, lines) abort
let l:buffer_filename = fnamemodify(bufname(a:buffer), ':p:t')
let l:pattern = '^\(.\+\.nim\)(\(\d\+\), \(\d\+\)) \(.\+\)'
@@ -43,6 +52,11 @@ function! ale_linters#nim#nimcheck#Handle(buffer, lines) abort
let l:item.code = l:code_match[2]
endif
+ " Find position end_col.
+ for l:col_match in ale#util#GetMatches(l:item.text, s:end_col_patterns)
+ let l:item.end_col = l:item.col + len(l:col_match[1]) - 1
+ endfor
+
call add(l:output, l:item)
endfor
diff --git a/test/handler/test_nim_handler.vader b/test/handler/test_nim_handler.vader
index e484000e..b6784d84 100644
--- a/test/handler/test_nim_handler.vader
+++ b/test/handler/test_nim_handler.vader
@@ -21,6 +21,7 @@ Execute(Parsing nim errors should work):
\ 'col': 2,
\ 'text': 'identifier expected, but found ''a.barfoo''',
\ 'type': 'E',
+ \ 'end_col': 9,
\ },
\ {
\ 'lnum': 2,
@@ -28,6 +29,7 @@ Execute(Parsing nim errors should work):
\ 'text': '''NotUsed'' is declared but not used',
\ 'code': 'XDeclaredButNotUsed',
\ 'type': 'W',
+ \ 'end_col': 11,
\ },
\ {
\ 'lnum': 12,
@@ -35,6 +37,35 @@ Execute(Parsing nim errors should work):
\ 'text': 'with : character',
\ 'type': 'E',
\ },
+ \ {
+ \ 'lnum': 1,
+ \ 'col': 8,
+ \ 'text': 'imported and not used: ''strutils''',
+ \ 'code': 'UnusedImport',
+ \ 'type': 'W',
+ \ 'end_col': 15,
+ \ },
+ \ {
+ \ 'lnum': 12,
+ \ 'col': 9,
+ \ 'text': 'undeclared identifier: ''total''',
+ \ 'type': 'E',
+ \ 'end_col': 13,
+ \ },
+ \ {
+ \ 'lnum': 14,
+ \ 'col': 1,
+ \ 'text': '''sum'' cannot be assigned to',
+ \ 'type': 'E',
+ \ 'end_col': 3,
+ \ },
+ \ {
+ \ 'lnum': 15,
+ \ 'col': 1,
+ \ 'text': 'redefinition of ''getName''; previous declaration here: /nested/folder/foobar.nim(14, 6)',
+ \ 'type': 'E',
+ \ 'end_col': 7,
+ \ },
\ ],
\ ale_linters#nim#nimcheck#Handle(bufnr(''), [
\ 'Line with wrong( format)',
@@ -42,4 +73,8 @@ Execute(Parsing nim errors should work):
\ 'foobar.nim(12, 2) Error: identifier expected, but found ''a.barfoo''',
\ '/nested/folder/foobar.nim(2, 5) Hint: ''NotUsed'' is declared but not used [XDeclaredButNotUsed]',
\ 'foobar.nim(12, 2) Error: with : character',
+ \ 'foobar.nim(1, 8) Warning: imported and not used: ''strutils'' [UnusedImport]',
+ \ 'foobar.nim(12, 9) Error: undeclared identifier: ''total''',
+ \ 'foobar.nim(14, 1) Error: ''sum'' cannot be assigned to',
+ \ 'foobar.nim(15, 1) Error: redefinition of ''getName''; previous declaration here: /nested/folder/foobar.nim(14, 6)',
\ ])