Permalink
Show file tree
Hide file tree
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Showing
19 changed files
with
1,737 additions
and
142 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,107 @@ | ||
| " 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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,35 @@ | ||
| " Vim compiler file | ||
| " Compiler: Cargo Compiler | ||
| " Maintainer: Damien Radtke <damienradtke@gmail.com> | ||
| " Latest Revision: 2014 Sep 24 | ||
| " For bugs, patches and license go to https://github.com/rust-lang/rust.vim | ||
|
|
||
| if exists('current_compiler') | ||
| finish | ||
| endif | ||
| runtime compiler/rustc.vim | ||
| let current_compiler = "cargo" | ||
|
|
||
| let s:save_cpo = &cpo | ||
| set cpo&vim | ||
|
|
||
| if exists(':CompilerSet') != 2 | ||
| command -nargs=* CompilerSet setlocal <args> | ||
| endif | ||
|
|
||
| if exists('g:cargo_makeprg_params') | ||
| execute 'CompilerSet makeprg=cargo\ '.escape(g:cargo_makeprg_params, ' \|"').'\ $*' | ||
| else | ||
| CompilerSet makeprg=cargo\ $* | ||
| endif | ||
|
|
||
| " Ignore general cargo progress messages | ||
| CompilerSet errorformat+= | ||
| \%-G%\\s%#Downloading%.%#, | ||
| \%-G%\\s%#Compiling%.%#, | ||
| \%-G%\\s%#Finished%.%#, | ||
| \%-G%\\s%#error:\ Could\ not\ compile\ %.%#, | ||
| \%-G%\\s%#To\ learn\ more\\,%.%# | ||
|
|
||
| let &cpo = s:save_cpo | ||
| unlet s:save_cpo |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,46 @@ | ||
| " Vim compiler file | ||
| " Compiler: Rust Compiler | ||
| " Maintainer: Chris Morgan <me@chrismorgan.info> | ||
| " Latest Revision: 2013 Jul 12 | ||
| " For bugs, patches and license go to https://github.com/rust-lang/rust.vim | ||
|
|
||
| if exists("current_compiler") | ||
| finish | ||
| endif | ||
| let current_compiler = "rustc" | ||
|
|
||
| let s:cpo_save = &cpo | ||
| set cpo&vim | ||
|
|
||
| if exists(":CompilerSet") != 2 | ||
| command -nargs=* CompilerSet setlocal <args> | ||
| endif | ||
|
|
||
| if exists("g:rustc_makeprg_no_percent") && g:rustc_makeprg_no_percent != 0 | ||
| CompilerSet makeprg=rustc | ||
| else | ||
| CompilerSet makeprg=rustc\ \% | ||
| endif | ||
|
|
||
| " Old errorformat (before nightly 2016/08/10) | ||
| CompilerSet errorformat= | ||
| \%f:%l:%c:\ %t%*[^:]:\ %m, | ||
| \%f:%l:%c:\ %*\\d:%*\\d\ %t%*[^:]:\ %m, | ||
| \%-G%f:%l\ %s, | ||
| \%-G%*[\ ]^, | ||
| \%-G%*[\ ]^%*[~], | ||
| \%-G%*[\ ]... | ||
|
|
||
| " New errorformat (after nightly 2016/08/10) | ||
| CompilerSet errorformat+= | ||
| \%-G, | ||
| \%-Gerror:\ aborting\ %.%#, | ||
| \%-Gerror:\ Could\ not\ compile\ %.%#, | ||
| \%Eerror:\ %m, | ||
| \%Eerror[E%n]:\ %m, | ||
| \%Wwarning:\ %m, | ||
| \%Inote:\ %m, | ||
| \%C\ %#-->\ %f:%l:%c | ||
|
|
||
| let &cpo = s:cpo_save | ||
| unlet s:cpo_save |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.