vim-polyglot/autoload/cargo.vim

92 lines
2.3 KiB
VimL
Raw Normal View History

2018-02-05 22:15:01 -05:00
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'rust') == -1
2018-07-08 09:16:28 -04:00
function! cargo#Load()
" Utility call to get this script loaded, for debugging
endfunction
2018-02-05 22:15:01 -05:00
function! cargo#cmd(args)
2018-07-08 09:16:28 -04:00
execute "! cargo" a:args
endfunction
function! s:nearest_cargo(...) abort
" If the second argument is not specified, the first argument determines
" whether we will start from the current directory or the directory of the
" current buffer, otherwise, we start with the provided path on the
" second argument.
let l:is_getcwd = get(a:, 1, 0)
if l:is_getcwd
let l:starting_path = get(a:, 2, getcwd())
2018-02-05 22:15:01 -05:00
else
2018-07-08 09:16:28 -04:00
let l:starting_path = get(a:, 2, expand('%:p:h'))
2018-02-05 22:15:01 -05:00
endif
2018-07-08 09:16:28 -04:00
return findfile('Cargo.toml', l:starting_path . ';')
2018-02-05 22:15:01 -05:00
endfunction
2018-07-08 09:16:28 -04:00
function! cargo#nearestCargo(is_getcwd) abort
return s:nearest_cargo(a:is_getcwd)
endfunction
function! cargo#nearestWorkspaceCargo(is_getcwd) abort
let l:nearest = s:nearest_cargo(a:is_getcwd)
while l:nearest !=# ''
for l:line in readfile(l:nearest, '', 0x100)
if l:line =~# '\V[workspace]'
return l:nearest
endif
endfor
let l:next = fnamemodify(l:nearest, ':p:h:h')
let l:nearest = s:nearest_cargo(0, l:next)
endwhile
return ''
endfunction
function! cargo#nearestRootCargo(is_getcwd) abort
" Try to find a workspace Cargo.toml, and if not found, take the nearest
" regular Cargo.toml
let l:workspace_cargo = cargo#nearestWorkspaceCargo(a:is_getcwd)
if l:workspace_cargo !=# ''
return l:workspace_cargo
2018-02-05 22:15:01 -05:00
endif
2018-07-08 09:16:28 -04:00
return s:nearest_cargo(a:is_getcwd)
endfunction
function! cargo#build(args)
call cargo#cmd("build " . a:args)
2018-02-05 22:15:01 -05:00
endfunction
function! cargo#clean(args)
2018-07-08 09:16:28 -04:00
call cargo#cmd("clean " . a:args)
2018-02-05 22:15:01 -05:00
endfunction
function! cargo#doc(args)
2018-07-08 09:16:28 -04:00
call cargo#cmd("doc " . a:args)
2018-02-05 22:15:01 -05:00
endfunction
function! cargo#new(args)
2018-07-08 09:16:28 -04:00
call cargo#cmd("new " . a:args)
cd `=a:args`
2018-02-05 22:15:01 -05:00
endfunction
function! cargo#init(args)
2018-07-08 09:16:28 -04:00
call cargo#cmd("init " . a:args)
2018-02-05 22:15:01 -05:00
endfunction
function! cargo#run(args)
2018-07-08 09:16:28 -04:00
call cargo#cmd("run " . a:args)
2018-02-05 22:15:01 -05:00
endfunction
function! cargo#test(args)
2018-07-08 09:16:28 -04:00
call cargo#cmd("test " . a:args)
2018-02-05 22:15:01 -05:00
endfunction
function! cargo#bench(args)
2018-07-08 09:16:28 -04:00
call cargo#cmd("bench " . a:args)
2018-02-05 22:15:01 -05:00
endfunction
2018-07-08 09:16:28 -04:00
" vim: set et sw=4 sts=4 ts=8:
2018-02-05 22:15:01 -05:00
endif