]> git.lizzy.rs Git - rust.git/commitdiff
Add commands :RustEmitIr and :RustEmitAsm
authorKevin Ballard <kevin@sb.org>
Fri, 30 May 2014 23:35:10 +0000 (16:35 -0700)
committerAlex Crichton <alex@alexcrichton.com>
Thu, 19 Jun 2014 00:01:22 +0000 (17:01 -0700)
src/etc/vim/autoload/rust.vim
src/etc/vim/doc/rust.txt
src/etc/vim/ftplugin/rust.vim

index c5bf0c10751b2ef15e6a6ae481b1c490af110d4b..c6b9b314da5c4581d2d3f2fdaa17054612f10d73 100644 (file)
@@ -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, ...)
index e0a647225a9e5af6ceabfd12a47219c091d5edfa..96ed69db635294c1b572f7b270d57b8c24809456 100644 (file)
@@ -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*
index ed5d721de0859da6b1a7ee5b4df636ba1630c550..65f9f4105ad8fda5c8d58657f5832072102e47d5 100644 (file)
@@ -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
@@ -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> [[