Skip to content

Commit

Permalink
Add commands :RustEmitIr and :RustEmitAsm
Browse files Browse the repository at this point in the history
  • Loading branch information
lilyball authored and alexcrichton committed Jun 19, 2014
1 parent 918eda5 commit 1273f94
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 0 deletions.
33 changes: 33 additions & 0 deletions src/etc/vim/autoload/rust.vim
Expand Up @@ -130,6 +130,39 @@ function! rust#CompleteExpand(lead, line, pos)
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, ...)
Expand Down
21 changes: 21 additions & 0 deletions src/etc/vim/doc/rust.txt
Expand Up @@ -107,6 +107,27 @@ COMMANDS *rust-commands*
If |g:rustc_path| is defined, it is used as the path to rustc.
Otherwise it is assumed rustc can be found in $PATH.

:RustEmitIr [args] *:RustEmitIr*
Compiles the current file to LLVM IR and displays the results
in a new split. If the current file has unsaved changes, it
will be saved first using |:update|. If the current file is an
unnamed buffer, it will be written to a temporary file first.

The arguments given to |:RustEmitIr| will be passed to rustc.

If |g:rustc_path| is defined, it is used as the path to rustc.
Otherwise it is assumed rustc can be found in $PATH.

:RustEmitAsm [args] *:RustEmitAsm*
Compiles the current file to assembly and displays the results
in a new split. If the current file has unsaved changes, it
will be saved first using |:update|. If the current file is an
unnamed buffer, it will be written to a temporary file first.

The arguments given to |:RustEmitAsm| will be passed to rustc.

If |g:rustc_path| is defined, it is used as the path to rustc.
Otherwise it is assumed rustc can be found in $PATH.

==============================================================================
MAPPINGS *rust-mappings*
Expand Down
8 changes: 8 additions & 0 deletions src/etc/vim/ftplugin/rust.vim
Expand Up @@ -66,6 +66,12 @@ command! -nargs=* -complete=file -bang -bar -buffer RustRun call rust#Run(<bang>
" See |:RustExpand| for docs
command! -nargs=* -complete=customlist,rust#CompleteExpand -bang -bar -buffer RustExpand call rust#Expand(<bang>0, [<f-args>])

" See |:RustEmitIr| for docs
command! -nargs=* -bar -buffer RustEmitIr call rust#Emit("ir", [<f-args>])

" See |:RustEmitAsm| for docs
command! -nargs=* -bar -buffer RustEmitAsm call rust#Emit("asm", [<f-args>])

" Mappings {{{1

" Bind ⌘R in MacVim to :RustRun
Expand All @@ -91,6 +97,8 @@ let b:undo_ftplugin = "
\|unlet! b:rust_last_rustc_args b:rust_last_args
\|delcommand RustRun
\|delcommand RustExpand
\|delcommand RustEmitIr
\|delcommand RustEmitAsm
\|nunmap <buffer> <D-r>
\|nunmap <buffer> <D-R>
\|nunmap <buffer> [[
Expand Down

0 comments on commit 1273f94

Please sign in to comment.