" Author: Stephen Sugden <stephen@stephensugden.com> " " Adapted from https://github.com/fatih/vim-go " For bugs, patches and license go to https://github.com/rust-lang/rust.vim if !exists("g:rustfmt_autosave") let g:rustfmt_autosave = 0 endif if !exists("g:rustfmt_command") let g:rustfmt_command = "rustfmt" endif if !exists("g:rustfmt_options") let g:rustfmt_options = "" endif if !exists("g:rustfmt_fail_silently") let g:rustfmt_fail_silently = 0 endif let s:got_fmt_error = 0 function! s:RustfmtCommandRange(filename, line1, line2) let l:arg = {"file": shellescape(a:filename), "range": [a:line1, a:line2]} return printf("%s %s --write-mode=overwrite --file-lines '[%s]'", g:rustfmt_command, g:rustfmt_options, json_encode(l:arg)) endfunction function! s:RustfmtCommand(filename) return g:rustfmt_command . " --write-mode=overwrite " . g:rustfmt_options . " " . shellescape(a:filename) endfunction function! s:RunRustfmt(command, curw, tmpname) if exists("*systemlist") let out = systemlist(a:command) else let out = split(system(a:command), '\r\?\n') endif if v:shell_error == 0 || v:shell_error == 3 " remove undo point caused via BufWritePre try | silent undojoin | catch | endtry " Replace current file with temp file, then reload buffer call rename(a:tmpname, expand('%')) silent edit! let &syntax = &syntax " only clear location list if it was previously filled to prevent " clobbering other additions if s:got_fmt_error let s:got_fmt_error = 0 call setloclist(0, []) lwindow endif elseif g:rustfmt_fail_silently == 0 " otherwise get the errors and put them in the location list let errors = [] for line in out " src/lib.rs:13:5: 13:10 error: expected `,`, or `}`, found `value` let tokens = matchlist(line, '^\(.\{-}\):\(\d\+\):\(\d\+\):\s*\(\d\+:\d\+\s*\)\?\s*error: \(.*\)') if !empty(tokens) call add(errors, {"filename": @%, \"lnum": tokens[2], \"col": tokens[3], \"text": tokens[5]}) endif endfor if empty(errors) % | " Couldn't detect rustfmt error format, output errors endif if !empty(errors) call setloclist(0, errors, 'r') echohl Error | echomsg "rustfmt returned error" | echohl None endif let s:got_fmt_error = 1 lwindow " We didn't use the temp file, so clean up call delete(a:tmpname) endif call winrestview(a:curw) endfunction function! rustfmt#FormatRange(line1, line2) let l:curw = winsaveview() let l:tmpname = expand("%:p:h") . "/." . expand("%:p:t") . ".rustfmt" call writefile(getline(1, '$'), l:tmpname) let command = s:RustfmtCommandRange(l:tmpname, a:line1, a:line2) call s:RunRustfmt(command, l:curw, l:tmpname) endfunction function! rustfmt#Format() let l:curw = winsaveview() let l:tmpname = expand("%:p:h") . "/." . expand("%:p:t") . ".rustfmt" call writefile(getline(1, '$'), l:tmpname) let command = s:RustfmtCommand(l:tmpname) call s:RunRustfmt(command, l:curw, l:tmpname) endfunction
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
dist | Folder | 0755 |
|
|
xml | Folder | 0755 |
|
|
README.txt | File | 773 B | 0644 |
|
ada.vim | File | 22.04 KB | 0644 |
|
adacomplete.vim | File | 3.58 KB | 0644 |
|
ccomplete.vim | File | 16.63 KB | 0644 |
|
clojurecomplete.vim | File | 7.84 KB | 0644 |
|
context.vim | File | 5.33 KB | 0644 |
|
contextcomplete.vim | File | 656 B | 0644 |
|
csscomplete.vim | File | 42.18 KB | 0644 |
|
decada.vim | File | 2.93 KB | 0644 |
|
getscript.vim | File | 24.28 KB | 0644 |
|
gnat.vim | File | 5.21 KB | 0644 |
|
gzip.vim | File | 6.26 KB | 0644 |
|
htmlcomplete.vim | File | 24.85 KB | 0644 |
|
javascriptcomplete.vim | File | 26.39 KB | 0644 |
|
netrw.vim | File | 519.7 KB | 0644 |
|
netrwFileHandlers.vim | File | 9.91 KB | 0644 |
|
netrwSettings.vim | File | 9.96 KB | 0644 |
|
netrw_gitignore.vim | File | 3.05 KB | 0644 |
|
paste.vim | File | 1.18 KB | 0644 |
|
phpcomplete.vim | File | 344.09 KB | 0644 |
|
python3complete.vim | File | 21.07 KB | 0644 |
|
pythoncomplete.vim | File | 21.53 KB | 0644 |
|
rubycomplete.vim | File | 23.79 KB | 0644 |
|
rust.vim | File | 10.22 KB | 0644 |
|
rustfmt.vim | File | 2.92 KB | 0644 |
|
spellfile.vim | File | 6.07 KB | 0644 |
|
sqlcomplete.vim | File | 38.27 KB | 0644 |
|
syntaxcomplete.vim | File | 30.54 KB | 0644 |
|
tar.vim | File | 21.57 KB | 0644 |
|
tohtml.vim | File | 31.33 KB | 0644 |
|
vimball.vim | File | 23.76 KB | 0644 |
|
xmlcomplete.vim | File | 14.59 KB | 0644 |
|
zip.vim | File | 14.3 KB | 0644 |
|