summaryrefslogtreecommitdiffstats
path: root/runtime/ftplugin/erlang.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/ftplugin/erlang.vim')
-rw-r--r--runtime/ftplugin/erlang.vim144
1 files changed, 36 insertions, 108 deletions
diff --git a/runtime/ftplugin/erlang.vim b/runtime/ftplugin/erlang.vim
index 4899020f85..af4e910b25 100644
--- a/runtime/ftplugin/erlang.vim
+++ b/runtime/ftplugin/erlang.vim
@@ -1,10 +1,10 @@
" Vim ftplugin file
" Language: Erlang
-" Author: Oscar Hellström <oscar@oscarh.net>
-" Contributors: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
+" Author: Oscar Hellström <oscar@oscarh.net>
+" Contributors: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
" Eduardo Lopez (http://github.com/tapichu)
" License: Vim license
-" Version: 2011/11/21
+" Version: 2012/01/25
if exists('b:did_ftplugin')
finish
@@ -27,13 +27,10 @@ if !exists('g:erlang_folding')
let g:erlang_folding = 0
endif
-" Local settings
-function s:SetErlangOptions()
- compiler erlang
- if version >= 700
- setlocal omnifunc=erlang_complete#Complete
- endif
+let s:erlang_fun_begin = '^\a\w*(.*$'
+let s:erlang_fun_end = '^[^%]*\.\s*\(%.*\)\?$'
+function s:SetErlangOptions()
if g:erlang_folding
setlocal foldmethod=expr
setlocal foldexpr=GetErlangFold(v:lnum)
@@ -47,104 +44,35 @@ function s:SetErlangOptions()
let &l:keywordprg = g:erlang_keywordprg
endfunction
-" Define folding functions
-if !exists('*GetErlangFold')
- " Folding params
- let s:erlang_fun_begin = '^\a\w*(.*$'
- let s:erlang_fun_end = '^[^%]*\.\s*\(%.*\)\?$'
- let s:erlang_blank_line = '^\s*\(%.*\)\?$'
-
- " Auxiliary fold functions
- function s:GetNextNonBlank(lnum)
- let lnum = nextnonblank(a:lnum + 1)
- let line = getline(lnum)
- while line =~ s:erlang_blank_line && 0 != lnum
- let lnum = nextnonblank(lnum + 1)
- let line = getline(lnum)
- endwhile
- return lnum
- endfunction
-
- function s:GetFunName(str)
- return matchstr(a:str, '^\a\w*(\@=')
- endfunction
-
- function s:GetFunArgs(str, lnum)
- let str = a:str
- let lnum = a:lnum
- while str !~ '->\s*\(%.*\)\?$'
- let lnum = s:GetNextNonBlank(lnum)
- if 0 == lnum " EOF
- return ''
- endif
- let str .= getline(lnum)
- endwhile
- return matchstr(str,
- \ '\(^(\s*\)\@<=.*\(\s*)\(\s\+when\s\+.*\)\?\s\+->\s*\(%.*\)\?$\)\@=')
- endfunction
-
- function s:CountFunArgs(arguments)
- let pos = 0
- let ac = 0 " arg count
- let arguments = a:arguments
-
- " Change list / tuples into just one A(rgument)
- let erlang_tuple = '{\([A-Za-z_,|=\-\[\]]\|\s\)*}'
- let erlang_list = '\[\([A-Za-z_,|=\-{}]\|\s\)*\]'
-
- " FIXME: Use searchpair?
- while arguments =~ erlang_tuple
- let arguments = substitute(arguments, erlang_tuple, 'A', 'g')
- endwhile
- " FIXME: Use searchpair?
- while arguments =~ erlang_list
- let arguments = substitute(arguments, erlang_list, 'A', 'g')
- endwhile
-
- let len = strlen(arguments)
- while pos < len && pos > -1
- let ac += 1
- let pos = matchend(arguments, ',\s*', pos)
- endwhile
- return ac
- endfunction
-
- " Main fold function
- function GetErlangFold(lnum)
- let lnum = a:lnum
- let line = getline(lnum)
-
- if line =~ s:erlang_fun_end
- return '<1'
- endif
-
- if line =~ s:erlang_fun_begin && foldlevel(lnum - 1) == 1
- return '1'
- endif
-
- if line =~ s:erlang_fun_begin
- return '>1'
- endif
-
- return '='
- endfunction
-
- " Erlang fold description (foldtext function)
- function ErlangFoldText()
- let foldlen = v:foldend - v:foldstart
- if 1 < foldlen
- let lines = 'lines'
- else
- let lines = 'line'
- endif
- let line = getline(v:foldstart)
- let name = s:GetFunName(line)
- let arguments = s:GetFunArgs(strpart(line, strlen(name)), v:foldstart)
- let argcount = s:CountFunArgs(arguments)
- let retval = '+' . v:folddashes . ' ' . name . '/' . argcount
- let retval .= ' (' . foldlen . ' ' . lines . ')'
- return retval
- endfunction
-endif
+function GetErlangFold(lnum)
+ let lnum = a:lnum
+ let line = getline(lnum)
+
+ if line =~ s:erlang_fun_end
+ return '<1'
+ endif
+
+ if line =~ s:erlang_fun_begin && foldlevel(lnum - 1) == 1
+ return '1'
+ endif
+
+ if line =~ s:erlang_fun_begin
+ return '>1'
+ endif
+
+ return '='
+endfunction
+
+function ErlangFoldText()
+ let line = getline(v:foldstart)
+ let foldlen = v:foldend - v:foldstart + 1
+ let lines = ' ' . foldlen . ' lines: ' . substitute(line, "[\ \t]*", '', '')
+ if foldlen < 10
+ let lines = ' ' . lines
+ endif
+ let retval = '+' . v:folddashes . lines
+
+ return retval
+endfunction
call s:SetErlangOptions()