diff options
author | Adam Stankiewicz <sheerun@sher.pl> | 2013-09-12 17:32:53 +0200 |
---|---|---|
committer | Adam Stankiewicz <sheerun@sher.pl> | 2013-09-12 17:32:53 +0200 |
commit | 5bc380150aee647d26a5a538ed855e9e82dcc7f7 (patch) | |
tree | ccefa37a6445e393eed12719509f830eae513e3a /compiler | |
parent | 6eb0c57e8070d641382c8844d35408a2f13cc751 (diff) | |
download | vim-polyglot-5bc380150aee647d26a5a538ed855e9e82dcc7f7.tar.gz vim-polyglot-5bc380150aee647d26a5a538ed855e9e82dcc7f7.zip |
Add erlang support
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/erlang.vim | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/compiler/erlang.vim b/compiler/erlang.vim new file mode 100644 index 00000000..da88b856 --- /dev/null +++ b/compiler/erlang.vim @@ -0,0 +1,111 @@ +" Vim compiler file +" Language: Erlang +" Author: Pawel 'kTT' Salata <rockplayer.pl@gmail.com> +" Contributors: Ricardo Catalinas Jiménez <jimenezrick@gmail.com> +" License: Vim license +" Version: 2013/03/06 + +if exists("current_compiler") || v:version < 703 + finish +else + let current_compiler = "erlang" +endif + +let b:error_list = {} +let b:is_showing_msg = 0 +let b:next_sign_id = 1 + +if exists(":CompilerSet") != 2 + command -nargs=* CompilerSet setlocal <args> +endif + +CompilerSet makeprg=make +CompilerSet errorformat=%f:%l:\ %tarning:\ %m,%f:%l:\ %m + +" Only define functions and script scope variables once +if exists("*s:ShowErrors") + finish +endif + +if !exists("g:erlang_show_errors") + let g:erlang_show_errors = 1 +endif + +let s:erlang_check_file = expand("<sfile>:p:h") . "/erlang_check.erl" +let s:autocmds_defined = 0 + +sign define ErlangError text=>> texthl=Error +sign define ErlangWarning text=>> texthl=Todo + +command ErlangDisableShowErrors silent call s:DisableShowErrors() +command ErlangEnableShowErrors silent call s:EnableShowErrors() + +function s:ShowErrors() + setlocal shellpipe=> + if match(getline(1), "#!.*escript") != -1 + setlocal makeprg=escript\ -s\ % + else + execute "setlocal makeprg=" . s:erlang_check_file . "\\ \%" + endif + silent make! + for error in getqflist() + let item = {} + let item["lnum"] = error.lnum + let item["text"] = error.text + let b:error_list[error.lnum] = item + let type = error.type == "W" ? "ErlangWarning" : "ErlangError" + execute "sign place" b:next_sign_id "line=" . item.lnum "name=" . type "file=" . expand("%:p") + let b:next_sign_id += 1 + endfor + setlocal shellpipe& + setlocal makeprg=make +endfunction + +function s:ShowErrorMsg() + let pos = getpos(".") + if has_key(b:error_list, pos[1]) + let item = get(b:error_list, pos[1]) + echo item.text + let b:is_showing_msg = 1 + else + if b:is_showing_msg + echo + let b:is_showing_msg = 0 + endif + endif +endf + +function s:ClearErrors() + sign unplace * + let b:error_list = {} + let b:next_sign_id = 1 + if b:is_showing_msg + echo + let b:is_showing_msg = 0 + endif +endfunction + +function s:EnableShowErrors() + if !s:autocmds_defined + augroup vimerl + autocmd! + autocmd BufWritePre *.erl call s:ClearErrors() + autocmd BufWritePost *.erl call s:ShowErrors() + autocmd CursorHold *.erl call s:ShowErrorMsg() + autocmd CursorMoved *.erl call s:ShowErrorMsg() + augroup END + let s:autocmds_defined = 1 + endif +endfunction + +function s:DisableShowErrors() + sign unplace * + augroup vimerl + autocmd! + augroup END + let s:autocmds_defined = 0 +endfunction + +if g:erlang_show_errors + call s:EnableShowErrors() +endif |