diff options
Diffstat (limited to '')
| -rw-r--r-- | ftplugin/erlang.vim | 154 | ||||
| -rw-r--r-- | ftplugin/erlang_refactor.vim | 295 | 
2 files changed, 0 insertions, 449 deletions
| diff --git a/ftplugin/erlang.vim b/ftplugin/erlang.vim deleted file mode 100644 index 4f1acfe8..00000000 --- a/ftplugin/erlang.vim +++ /dev/null @@ -1,154 +0,0 @@ -" Vim ftplugin file -" Language:    Erlang -" Maintainer:  Oscar Hellström <oscar@oscarh.net> -" URL:         http://personal.oscarh.net -" Contributor: Ricardo Catalinas Jiménez <jimenezrick@gmail.com> -" Version:     2010-09-03 -" ------------------------------------------------------------------------------ -" Usage: -" -" To enable folding put in your vimrc: -" set foldenable -" -" Folding will make only one fold for a complete function, even though it has -" more than one function head and body. -" -" To change this behaviour put in your vimrc file: -" let g:erlangFoldSplitFunction=1 -" -" ------------------------------------------------------------------------------ -" Plugin init -if exists("b:did_ftplugin") -	finish -endif - -" Don't load any other -let b:did_ftplugin=1 - -if exists('s:doneFunctionDefinitions') -	call s:SetErlangOptions() -	finish -endif - -let s:doneFunctionDefinitions=1 - -" Local settings -function s:SetErlangOptions() -	compiler erlang -	if version >= 700 -		setlocal omnifunc=erlangcomplete#Complete -	endif - -	setlocal comments=:%%%,:%%,:% -	setlocal commentstring=%%s - -	setlocal foldmethod=expr -	setlocal foldexpr=GetErlangFold(v:lnum) -	setlocal foldtext=ErlangFoldText() -endfunction - -" Define folding functions -if !exists("*GetErlangFold") -	" Folding params -	let s:ErlangFunBegin    = '^\a\w*(.*$' -	let s:ErlangFunEnd      = '^[^%]*\.\s*\(%.*\)\?$' -	let s:ErlangBlankLine   = '^\s*\(%.*\)\?$' - -	" Auxiliary fold functions -	function s:GetNextNonBlank(lnum) -		let lnum = nextnonblank(a:lnum + 1) -		let line = getline(lnum) -		while line =~ s:ErlangBlankLine && 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 erlangTuple = '{\([A-Za-z_,|=\-\[\]]\|\s\)*}' -		let erlangList  = '\[\([A-Za-z_,|=\-{}]\|\s\)*\]' - -		" FIXME: Use searchpair? -		while arguments =~ erlangTuple -			let arguments = substitute(arguments, erlangTuple, "A", "g") -		endwhile -		" FIXME: Use searchpair? -		while arguments =~ erlangList -			let arguments = substitute(arguments, erlangList, "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:ErlangFunEnd -			return '<1' -		endif - -		if line =~ s:ErlangFunBegin && foldlevel(lnum - 1) == 1 -			if exists("g:erlangFoldSplitFunction") && g:erlangFoldSplitFunction -				return '>1' -			else -				return '1' -			endif -		endif - -		if line =~ s:ErlangFunBegin -			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 - -call s:SetErlangOptions() diff --git a/ftplugin/erlang_refactor.vim b/ftplugin/erlang_refactor.vim deleted file mode 100644 index f809db9b..00000000 --- a/ftplugin/erlang_refactor.vim +++ /dev/null @@ -1,295 +0,0 @@ -" Erlang refactor file -" Language:   Erlang -" Maintainer: Pawel 'kTT' Salata <rockplayer.pl@gmail.com> -" URL:        http://ktototaki.info - -if exists("b:did_ftplugin_erlang") -    finish -endif - -" Don't load any other -let b:did_ftplugin_erlang=1 - -if !exists('g:erlangRefactoring') || g:erlangRefactoring == 0 -    finish -endif - -if !exists('g:erlangWranglerPath') -    let g:erlangWranglerPath = '/usr/share/wrangler/' -endif - -if glob(g:erlangWranglerPath) == "" -    call confirm("Wrong path to wrangler dir") -    finish -endif - -autocmd VimLeavePre * call StopWranglerServer() - -let s:erlangServerName = "wrangler_vim" - -" Starting background erlang session with wrangler on -function! StartWranglerServer() -    let wranglerEbinDir = g:erlangWranglerPath . "/ebin" -    let command = "erl_call -s -sname " . s:erlangServerName . " -x 'erl -pa " . wranglerEbinDir . "'" -    call system(command) -    call s:send_rpc('application', 'start', '[wrangler_app]') -endfunction - -" Stopping erlang session -function! StopWranglerServer() -    echo s:send_rpc('erlang', 'halt', '') -endfunction - -" Sending rpc call to erlang session -function! s:send_rpc(module, fun, args) -    let command = "erl_call -sname " . s:erlangServerName . " -a '" . a:module . " " . a:fun . " " . a:args . "'" -    let result = system(command) -    if match(result, 'erl_call: failed to connect to node .*') != -1 -        call StartWranglerServer() -        return system(command) -    endif -    return result -endfunction - -function! ErlangUndo() -    echo s:send_rpc("wrangler_undo_server", "undo", "[]") -    :e! -endfunction - -function! s:trim(text) -    return substitute(a:text, "^\\s\\+\\|\\s\\+$", "", "g") -endfunction - -function! s:get_msg(result, tuple_start) -    let msg_begin = '{' . a:tuple_start . ',' -    let matching_start =  match(a:result, msg_begin) -    if matching_start != -1 -        return s:trim(matchstr(a:result, '[^}]*', matching_start + strlen(msg_begin))) -    endif -    return "" -endfunction - -" Check if there is an error in result -function! s:check_for_error(result) -    let msg = s:get_msg(a:result, 'ok') -    if msg != "" -        return [0, msg] -    endif -    let msg = s:get_msg(a:result, 'warning') -    if msg != "" -        return [1, msg] -    endif -    let msg = s:get_msg(a:result, 'error') -    if msg != "" -        return [2, msg] -    endif -    return [-1, ""] -endfunction - -" Sending apply changes to file -function! s:send_confirm() -    let choice = confirm("What do you want?", "&Preview\n&Confirm\nCa&ncel", 0) -    if choice == 1 -        echo "TODO: Display preview :)" -    elseif choice == 2 -        let module = 'wrangler_preview_server' -        let fun = 'commit' -        let args = '[]' -        return s:send_rpc(module, fun, args) -    else -        let module = 'wrangler_preview_server' -        let fun = 'abort' -        let args = '[]' -        return s:send_rpc(module, fun, args) -        echo "Canceled" -    endif -endfunction - -" Manually send confirm, for testing purpose only -function! SendConfirm() -    echo s:send_confirm() -endfunction - -" Format and send function extracton call -function! s:call_extract(start_line, start_col, end_line, end_col, name) -    let file = expand("%:p") -    let module = 'wrangler' -    let fun = 'fun_extraction' -    let args = '["' . file . '", {' . a:start_line . ', ' . a:start_col . '}, {' . a:end_line . ', ' . a:end_col . '}, "' . a:name . '", ' . &sw . ']' -    let result = s:send_rpc(module, fun, args) -    let [error_code, msg] = s:check_for_error(result) -    if error_code != 0 -        call confirm(msg) -        return 0 -    endif -    echo "This files will be changed: " . matchstr(msg, "[^]]*", 1) -    echo s:send_confirm() -    return 1 -endfunction - -function! ErlangExtractFunction(mode) range -    silent w! -    let name = inputdialog("New function name: ") -    if name != "" -        if a:mode == "v" -            let start_pos = getpos("'<") -            let start_line = start_pos[1] -            let start_col = start_pos[2] - -            let end_pos = getpos("'>") -            let end_line = end_pos[1] -            let end_col = end_pos[2] -        elseif a:mode == "n" -            let pos = getpos(".") -            let start_line = pos[1] -            let start_col = pos[2] -            let end_line = pos[1] -            let end_col = pos[2] -        else -            echo "Mode not supported." -            return -        endif -        if s:call_extract(start_line, start_col, end_line, end_col, name) -            let temp = &autoread -            set autoread -            :e -            if temp == 0 -                set noautoread -            endif -        endif -    else -        echo "Empty function name. Ignoring." -    endif -endfunction -nmap <A-r>e :call ErlangExtractFunction("n")<ENTER> -vmap <A-r>e :call ErlangExtractFunction("v")<ENTER> - -function! s:call_rename(mode, line, col, name, search_path) -    let file = expand("%:p") -    let module = 'wrangler' -    let fun = 'rename_' . a:mode -    let args = '["' . file .'", ' -    if a:mode != "mod" -         let args = args . a:line . ', ' . a:col . ', ' -    endif -    let args = args . '"' . a:name . '", ["' . a:search_path . '"], ' . &sw . ']' -    let result = s:send_rpc(module, fun, args) -    let [error_code, msg] = s:check_for_error(result) -    if error_code != 0 -        call confirm(msg) -        return 0 -    endif -    echo "This files will be changed: " . matchstr(msg, "[^]]*", 1) -    echo s:send_confirm() -    return 1 -endfunction - -function! ErlangRename(mode) -    silent w! -    if a:mode == "mod" -        let name = inputdialog('Rename module to: ') -    else -        let name = inputdialog('Rename "' . expand("<cword>") . '" to: ') -    endif -    if name != "" -        let search_path = expand("%:p:h") -        "let search_path = inputdialog('Search path: ', expand("%:p:h")) -        let pos = getpos(".") -        let line = pos[1] -        let col = pos[2] -        let current_filename = expand("%") -        let current_filepath = expand("%:p") -        let new_filename = name . '.erl' -        if s:call_rename(a:mode, line, col, name, search_path) -            if a:mode == "mod" -                execute ':bd ' . current_filename -                execute ':e ' . new_filename -                silent execute '!mv ' . current_filepath . ' ' . current_filepath . '.bak' -                redraw! -            else -                let temp = &autoread -                set autoread -                :e -                if temp == 0 -                    set noautoread -                endif -            endif -        endif -    else -        echo "Empty name. Ignoring." -    endif -endfunction - -function! ErlangRenameFunction() -    call ErlangRename("fun") -endfunction -map <A-r>f :call ErlangRenameFunction()<ENTER> - -function! ErlangRenameVariable() -    call ErlangRename("var") -endfunction -map <A-r>v :call ErlangRenameVariable()<ENTER> - -function! ErlangRenameModule() -    call ErlangRename("mod") -endfunction -map <A-r>m :call ErlangRenameModule()<ENTER> - -function! ErlangRenameProcess() -    call ErlangRename("process") -endfunction -map <A-r>p :call ErlangRenameProcess()<ENTER> - -function! s:call_tuple_fun_args(start_line, start_col, end_line, end_col, search_path) -    let file = expand("%:p") -    let module = 'wrangler' -    let fun = 'tuple_funpar' -    let args = '["' . file . '", {' . a:start_line . ', ' . a:start_col . '}, {' . a:end_line . ', ' . a:end_col . '}, ["' . a:search_path . '"], ' . &sw . ']' -    let result = s:send_rpc(module, fun, args) -    if s:check_for_error(result) -        return 0 -    endif -    call s:send_confirm() -    return 1 -endfunction - -function! ErlangTupleFunArgs(mode) -    silent w! -    let search_path = expand("%:p:h") -    "let search_path = inputdialog('Search path: ', expand("%:p:h")) -    if a:mode == "v" -        let start_pos = getpos("'<") -        let start_line = start_pos[1] -        let start_col = start_pos[2] - -        let end_pos = getpos("'>") -        let end_line = end_pos[1] -        let end_col = end_pos[2] -        if s:call_tuple_fun_args(start_line, start_col, end_line, end_col, search_path) -            let temp = &autoread -            set autoread -            :e -            if temp == 0 -                set noautoread -            endif -        endif -    elseif a:mode == "n" -        let pos = getpos(".") -        let line = pos[1] -        let col = pos[2] -        if s:call_tuple_fun_args(line, col, line, col, search_path) -            let temp = &autoread -            set autoread -            :e -            if temp == 0 -                set noautoread -            endif -        endif -    else -        echo "Mode not supported." -    endif -endfunction -nmap <A-r>t :call ErlangTupleFunArgs("n")<ENTER> -vmap <A-r>t :call ErlangTupleFunArgs("v")<ENTER> - -" vim: set foldmethod=marker: | 
