Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
12 changed files
with
856 additions
and
17 deletions.
There are no files selected for viewing
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,7 @@ | ||
setlocal autoindent | ||
setlocal expandtab | ||
setlocal shiftwidth=4 | ||
setlocal smartindent | ||
setlocal smarttab | ||
setlocal softtabstop=4 | ||
setlocal tabstop=4 |
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,3 @@ | ||
set ts=2 | ||
set sw=2 | ||
set expandtab |
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,31 @@ | ||
if !exists('g:rust_conceal') || !has('conceal') || &enc != 'utf-8' | ||
finish | ||
endif | ||
|
||
" For those who don't want to see `::`... | ||
if exists('g:rust_conceal_mod_path') | ||
syn match rustNiceOperator "::" conceal cchar=ㆍ | ||
endif | ||
|
||
syn match rustRightArrowHead contained ">" conceal cchar= | ||
syn match rustRightArrowTail contained "-" conceal cchar=⟶ | ||
syn match rustNiceOperator "->" contains=rustRightArrowHead,rustRightArrowTail | ||
|
||
syn match rustFatRightArrowHead contained ">" conceal cchar= | ||
syn match rustFatRightArrowTail contained "=" conceal cchar=⟹ | ||
syn match rustNiceOperator "=>" contains=rustFatRightArrowHead,rustFatRightArrowTail | ||
|
||
syn match rustNiceOperator /\<\@!_\(_*\>\)\@=/ conceal cchar=′ | ||
|
||
" For those who don't want to see `pub`... | ||
if exists('g:rust_conceal_pub') | ||
syn match rustPublicSigil contained "pu" conceal cchar=* | ||
syn match rustPublicRest contained "b" conceal cchar= | ||
syn match rustNiceOperator "pub " contains=rustPublicSigil,rustPublicRest | ||
endif | ||
|
||
hi link rustNiceOperator Operator | ||
|
||
if !exists('g:rust_conceal_mod_path') | ||
hi! link Conceal Operator | ||
endif |
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,225 @@ | ||
" Author: Kevin Ballard | ||
" Description: Helper functions for Rust commands/mappings | ||
" Last Modified: May 27, 2014 | ||
|
||
" Jump {{{1 | ||
|
||
function! rust#Jump(mode, function) range | ||
let cnt = v:count1 | ||
normal! m' | ||
if a:mode ==# 'v' | ||
norm! gv | ||
endif | ||
let foldenable = &foldenable | ||
set nofoldenable | ||
while cnt > 0 | ||
execute "call <SID>Jump_" . a:function . "()" | ||
let cnt = cnt - 1 | ||
endwhile | ||
let &foldenable = foldenable | ||
endfunction | ||
|
||
function! s:Jump_Back() | ||
call search('{', 'b') | ||
keepjumps normal! w99[{ | ||
endfunction | ||
|
||
function! s:Jump_Forward() | ||
normal! j0 | ||
call search('{', 'b') | ||
keepjumps normal! w99[{% | ||
call search('{') | ||
endfunction | ||
|
||
" Run {{{1 | ||
|
||
function! rust#Run(bang, args) | ||
if a:bang | ||
let idx = index(a:args, '--') | ||
if idx != -1 | ||
let rustc_args = idx == 0 ? [] : a:args[:idx-1] | ||
let args = a:args[idx+1:] | ||
else | ||
let rustc_args = a:args | ||
let args = [] | ||
endif | ||
else | ||
let rustc_args = [] | ||
let args = a:args | ||
endif | ||
|
||
let b:rust_last_rustc_args = rustc_args | ||
let b:rust_last_args = args | ||
|
||
call s:WithPath(function("s:Run"), rustc_args, args) | ||
endfunction | ||
|
||
function! s:Run(path, rustc_args, args) | ||
try | ||
let exepath = tempname() | ||
if has('win32') | ||
let exepath .= '.exe' | ||
endif | ||
|
||
let rustc_args = [a:path, '-o', exepath] + a:rustc_args | ||
|
||
let rustc = exists("g:rustc_path") ? g:rustc_path : "rustc" | ||
|
||
let output = system(shellescape(rustc) . " " . join(map(rustc_args, 'shellescape(v:val)'))) | ||
if output != '' | ||
echohl WarningMsg | ||
echo output | ||
echohl None | ||
endif | ||
if !v:shell_error | ||
exe '!' . shellescape(exepath) . " " . join(map(a:args, 'shellescape(v:val)')) | ||
endif | ||
finally | ||
if exists("exepath") | ||
silent! call delete(exepath) | ||
endif | ||
endtry | ||
endfunction | ||
|
||
" Expand {{{1 | ||
|
||
function! rust#Expand(bang, args) | ||
if a:bang && !empty(a:args) | ||
let pretty = a:args[0] | ||
let args = a:args[1:] | ||
else | ||
let pretty = "expanded" | ||
let args = a:args | ||
endif | ||
call s:WithPath(function("s:Expand"), pretty, args) | ||
endfunction | ||
|
||
function! s:Expand(path, pretty, args) | ||
try | ||
let rustc = exists("g:rustc_path") ? g:rustc_path : "rustc" | ||
|
||
let args = [a:path, '--pretty', a:pretty] + a:args | ||
let output = system(shellescape(rustc) . " " . join(map(args, "shellescape(v:val)"))) | ||
if v:shell_error | ||
echohl WarningMsg | ||
echo output | ||
echohl None | ||
else | ||
new | ||
silent put =output | ||
1 | ||
d | ||
setl filetype=rust | ||
setl buftype=nofile | ||
setl bufhidden=hide | ||
setl noswapfile | ||
endif | ||
endtry | ||
endfunction | ||
|
||
function! rust#CompleteExpand(lead, line, pos) | ||
if a:line[: a:pos-1] =~ '^RustExpand!\s*\S*$' | ||
" first argument and it has a ! | ||
let list = ["normal", "expanded", "typed", "expanded,identified", "flowgraph="] | ||
if !empty(a:lead) | ||
call filter(list, "v:val[:len(a:lead)-1] == a:lead") | ||
endif | ||
return list | ||
endif | ||
|
||
return glob(escape(a:lead, "*?[") . '*', 0, 1) | ||
endfunction | ||
|
||
" Emit {{{1 | ||
|
||
function! rust#Emit(type, args) | ||
call s:WithPath(function("s:Emit"), a:type, a:args) | ||
endfunction | ||
|
||
function! s:Emit(path, type, args) | ||
try | ||
let rustc = exists("g:rustc_path") ? g:rustc_path : "rustc" | ||
|
||
let args = [a:path, '--emit', a:type, '-o', '-'] + a:args | ||
let output = system(shellescape(rustc) . " " . join(map(args, "shellescape(v:val)"))) | ||
if v:shell_error | ||
echohl WarningMsg | ||
echo output | ||
echohl None | ||
else | ||
new | ||
silent put =output | ||
1 | ||
d | ||
if a:type == "ir" | ||
setl filetype=llvm | ||
elseif a:type == "asm" | ||
setl filetype=asm | ||
endif | ||
setl buftype=nofile | ||
setl bufhidden=hide | ||
setl noswapfile | ||
endif | ||
endtry | ||
endfunction | ||
|
||
" Utility functions {{{1 | ||
|
||
function! s:WithPath(func, ...) | ||
try | ||
let save_write = &write | ||
set write | ||
let path = expand('%') | ||
let pathisempty = empty(path) | ||
if pathisempty || !save_write | ||
" use a temporary file named 'unnamed.rs' inside a temporary | ||
" directory. This produces better error messages | ||
let tmpdir = tempname() | ||
call mkdir(tmpdir) | ||
|
||
let save_cwd = getcwd() | ||
silent exe 'lcd' fnameescape(tmpdir) | ||
|
||
let path = 'unnamed.rs' | ||
|
||
let save_mod = &mod | ||
set nomod | ||
|
||
silent exe 'keepalt write! ' . fnameescape(path) | ||
if pathisempty | ||
silent keepalt 0file | ||
endif | ||
else | ||
update | ||
endif | ||
|
||
call call(a:func, [path] + a:000) | ||
finally | ||
if exists("save_mod") | let &mod = save_mod | endif | ||
if exists("save_write") | let &write = save_write | endif | ||
if exists("save_cwd") | silent exe 'lcd' fnameescape(save_cwd) | endif | ||
if exists("tmpdir") | silent call s:RmDir(tmpdir) | endif | ||
endtry | ||
endfunction | ||
|
||
function! rust#AppendCmdLine(text) | ||
call setcmdpos(getcmdpos()) | ||
let cmd = getcmdline() . a:text | ||
return cmd | ||
endfunction | ||
|
||
function! s:RmDir(path) | ||
" sanity check; make sure it's not empty, /, or $HOME | ||
if empty(a:path) | ||
echoerr 'Attempted to delete empty path' | ||
return 0 | ||
elseif a:path == '/' || a:path == $HOME | ||
echoerr 'Attempted to delete protected path: ' . a:path | ||
return 0 | ||
endif | ||
silent exe "!rm -rf " . shellescape(a:path) | ||
endfunction | ||
|
||
" }}}1 | ||
|
||
" vim: set noet sw=4 ts=4: |
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,65 @@ | ||
" Vim compiler file | ||
" Compiler: Cargo Compiler | ||
" Maintainer: Damien Radtke <damienradtke@gmail.com> | ||
" Latest Revision: 2014 Sep 24 | ||
|
||
if exists('current_compiler') | ||
finish | ||
endif | ||
runtime compiler/rustc.vim | ||
let current_compiler = "cargo" | ||
|
||
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 | ||
|
||
" Allow a configurable global Cargo.toml name. This makes it easy to | ||
" support variations like 'cargo.toml'. | ||
let s:cargo_manifest_name = get(g:, 'cargo_manifest_name', 'Cargo.toml') | ||
|
||
function! s:is_absolute(path) | ||
return a:path[0] == '/' || a:path =~ '[A-Z]\+:' | ||
endfunction | ||
|
||
let s:local_manifest = findfile(s:cargo_manifest_name, '.;') | ||
if s:local_manifest != '' | ||
let s:local_manifest = fnamemodify(s:local_manifest, ':p:h').'/' | ||
augroup cargo | ||
au! | ||
au QuickfixCmdPost make call s:FixPaths() | ||
augroup END | ||
|
||
" FixPaths() is run after Cargo, and is used to change the file paths | ||
" to be relative to the current directory instead of Cargo.toml. | ||
function! s:FixPaths() | ||
let qflist = getqflist() | ||
let manifest = s:local_manifest | ||
for qf in qflist | ||
if !qf.valid | ||
let m = matchlist(qf.text, '(file://\(.*\))$') | ||
if !empty(m) | ||
let manifest = m[1].'/' | ||
" Manually strip another slash if needed; usually just an | ||
" issue on Windows. | ||
if manifest =~ '^/[A-Z]\+:/' | ||
let manifest = manifest[1:] | ||
endif | ||
endif | ||
continue | ||
endif | ||
let filename = bufname(qf.bufnr) | ||
if s:is_absolute(filename) | ||
continue | ||
endif | ||
let qf.filename = simplify(manifest.filename) | ||
call remove(qf, 'bufnr') | ||
endfor | ||
call setqflist(qflist, 'r') | ||
endfunction | ||
endif |
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,33 @@ | ||
" Vim compiler file | ||
" Compiler: Rust Compiler | ||
" Maintainer: Chris Morgan <me@chrismorgan.info> | ||
" Latest Revision: 2013 Jul 12 | ||
|
||
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 == 1 | ||
CompilerSet makeprg=rustc | ||
else | ||
CompilerSet makeprg=rustc\ \% | ||
endif | ||
|
||
CompilerSet errorformat= | ||
\%f:%l:%c:\ %t%*[^:]:\ %m, | ||
\%f:%l:%c:\ %*\\d:%*\\d\ %t%*[^:]:\ %m, | ||
\%-G%f:%l\ %s, | ||
\%-G%*[\ ]^, | ||
\%-G%*[\ ]^%*[~], | ||
\%-G%*[\ ]... | ||
|
||
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
au BufRead,BufNewFile *.rs set filetype=rust |
Oops, something went wrong.