summaryrefslogtreecommitdiffstats
path: root/compiler
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2013-09-12 17:32:53 +0200
committerAdam Stankiewicz <sheerun@sher.pl>2013-09-12 17:32:53 +0200
commit5bc380150aee647d26a5a538ed855e9e82dcc7f7 (patch)
treeccefa37a6445e393eed12719509f830eae513e3a /compiler
parent6eb0c57e8070d641382c8844d35408a2f13cc751 (diff)
downloadvim-polyglot-5bc380150aee647d26a5a538ed855e9e82dcc7f7.tar.gz
vim-polyglot-5bc380150aee647d26a5a538ed855e9e82dcc7f7.zip
Add erlang support
Diffstat (limited to 'compiler')
-rw-r--r--compiler/erlang.vim111
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