diff options
-rw-r--r-- | README.md | 1 | ||||
-rw-r--r-- | ale_linters/sql/sqlint.vim | 34 | ||||
-rw-r--r-- | doc/ale.txt | 1 | ||||
-rw-r--r-- | test/handler/test_sqlint_handler.vader | 33 |
4 files changed, 69 insertions, 0 deletions
@@ -101,6 +101,7 @@ name. That seems to be the fairest way to arrange this table. | Scala | [scalac](http://scala-lang.org) | | Slim | [slim-lint](https://github.com/sds/slim-lint) | SML | [smlnj](http://www.smlnj.org/) | +| SQL | [sqlint](https://github.com/purcell/sqlint) | | Swift | [swiftlint](https://swift.org/) | | Tex | [proselint](http://proselint.com/) | | Texinfo | [proselint](http://proselint.com/)| diff --git a/ale_linters/sql/sqlint.vim b/ale_linters/sql/sqlint.vim new file mode 100644 index 00000000..d8bf9dce --- /dev/null +++ b/ale_linters/sql/sqlint.vim @@ -0,0 +1,34 @@ +" Author: Adriaan Zonnenberg <amz@adriaan.xyz> +" Description: sqlint for SQL files + +function! ale_linters#sql#sqlint#Handle(buffer, lines) abort + " Matches patterns like the following: + " + " stdin:3:1:ERROR syntax error at or near "WIBBLE" + let l:pattern = '\v^[^:]+:(\d+):(\d+):(\u+) (.*)' + let l:output = [] + + for l:line in a:lines + let l:match = matchlist(l:line, l:pattern) + + if empty(l:match) + continue + endif + + call add(l:output, { + \ 'lnum': l:match[1] + 0, + \ 'col': l:match[2] + 0, + \ 'type': l:match[3][0], + \ 'text': l:match[4], + \}) + endfor + + return l:output +endfunction + +call ale#linter#Define('sql', { +\ 'name': 'sqlint', +\ 'executable': 'sqlint', +\ 'command': 'sqlint', +\ 'callback': 'ale_linters#sql#sqlint#Handle', +\}) diff --git a/doc/ale.txt b/doc/ale.txt index 85409fc2..2da70913 100644 --- a/doc/ale.txt +++ b/doc/ale.txt @@ -153,6 +153,7 @@ The following languages and tools are supported. * Scala: 'scalac' * Slim: 'slim-lint' * SML: 'smlnj' +* SQL: 'sqlint' * Swift: 'swiftlint' * Tex: 'proselint' * Texinfo: 'proselint' diff --git a/test/handler/test_sqlint_handler.vader b/test/handler/test_sqlint_handler.vader new file mode 100644 index 00000000..62d2ea74 --- /dev/null +++ b/test/handler/test_sqlint_handler.vader @@ -0,0 +1,33 @@ +Execute(The sqlint handler should parse lines correctly): + runtime! ale_linters/sql/sqlint.vim + + AssertEqual + \ [ + \ { + \ 'lnum': 3, + \ 'col': 1, + \ 'text': 'syntax error at or near "WIBBLE"', + \ 'type': 'E', + \ }, + \ { + \ 'lnum': 47, + \ 'col': 11, + \ 'text': 'unterminated quoted string at or near "''', + \ 'type': 'E', + \ }, + \ { + \ 'lnum': 50, + \ 'col': 12, + \ 'text': 'some warning at end of input', + \ 'type': 'W', + \ }, + \ ], + \ ale_linters#sql#sqlint#Handle(347, [ + \ 'This line should be ignored completely', + \ 'stdin:3:1:ERROR syntax error at or near "WIBBLE"', + \ 'stdin:47:11:ERROR unterminated quoted string at or near "''', + \ 'stdin:50:12:WARNING some warning at end of input', + \ ]) + +After: + call ale#linter#Reset() |