diff options
author | Carl Smedstad <carl.smedstad@protonmail.com> | 2022-11-21 11:50:45 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-21 19:50:45 +0900 |
commit | 6c4be47437707bd6e9afc6a09d7bfec15864f2d3 (patch) | |
tree | 92b63673d4472f413191d51ec4c7adc3a664b998 /ale_linters | |
parent | ca355f4cb45ea3508548045ca7b9cc73f3741e69 (diff) | |
download | ale-6c4be47437707bd6e9afc6a09d7bfec15864f2d3.zip |
Implement support for SQL linter sqlfluff (#4361)
Diffstat (limited to 'ale_linters')
-rw-r--r-- | ale_linters/sql/sqlfluff.vim | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/ale_linters/sql/sqlfluff.vim b/ale_linters/sql/sqlfluff.vim new file mode 100644 index 00000000..91a39908 --- /dev/null +++ b/ale_linters/sql/sqlfluff.vim @@ -0,0 +1,66 @@ +" Author: Carl Smedstad <carl.smedstad at protonmail dot com> +" Description: sqlfluff for SQL files + +let g:ale_sql_sqlfluff_executable = +\ get(g:, 'ale_sql_sqlfluff_executable', 'sqlfluff') + +let g:ale_sql_sqlfluff_options = +\ get(g:, 'ale_sql_sqlfluff_options', '') + +function! ale_linters#sql#sqlfluff#Executable(buffer) abort + return ale#Var(a:buffer, 'sql_sqlfluff_executable') +endfunction + +function! ale_linters#sql#sqlfluff#Command(buffer) abort + let l:executable = ale_linters#sql#sqlfluff#Executable(a:buffer) + let l:options = ale#Var(a:buffer, 'sql_sqlfluff_options') + + let l:cmd = + \ ale#Escape(l:executable) + \ . ' lint' + + let l:config_file = ale#path#FindNearestFile(a:buffer, '.sqlfluff') + + if !empty(l:config_file) + let l:cmd .= ' --config ' . ale#Escape(l:config_file) + else + let l:cmd .= ' --dialect ansi' + endif + + let l:cmd .= + \ ' --format json ' + \ . l:options + \ . ' %t' + + return l:cmd +endfunction + +function! ale_linters#sql#sqlfluff#Handle(buffer, lines) abort + let l:output = [] + let l:json = ale#util#FuzzyJSONDecode(a:lines, {})[0] + + " if there's no warning, 'result' is `null`. + if empty(get(l:json, 'violations')) + return l:output + endif + + for l:violation in get(l:json, 'violations', []) + call add(l:output, { + \ 'filename': l:json.filepath, + \ 'lnum': l:violation.line_no, + \ 'col': l:violation.line_pos, + \ 'text': l:violation.description, + \ 'code': l:violation.code, + \ 'type': 'W', + \}) + endfor + + return l:output +endfunction + +call ale#linter#Define('sql', { +\ 'name': 'sqlfluff', +\ 'executable': function('ale_linters#sql#sqlfluff#Executable'), +\ 'command': function('ale_linters#sql#sqlfluff#Command'), +\ 'callback': 'ale_linters#sql#sqlfluff#Handle', +\}) |