Add commands :RustEmitIr and :RustEmitAsm
This commit is contained in:
parent
918eda59be
commit
1273f94cbb
3 changed files with 62 additions and 0 deletions
|
@ -130,6 +130,39 @@ function! rust#CompleteExpand(lead, line, pos)
|
||||||
return glob(escape(a:lead, "*?[") . '*', 0, 1)
|
return glob(escape(a:lead, "*?[") . '*', 0, 1)
|
||||||
endfunction
|
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
|
" Utility functions {{{1
|
||||||
|
|
||||||
function! s:WithPath(func, ...)
|
function! s:WithPath(func, ...)
|
||||||
|
|
|
@ -107,6 +107,27 @@ COMMANDS *rust-commands*
|
||||||
If |g:rustc_path| is defined, it is used as the path 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.
|
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*
|
MAPPINGS *rust-mappings*
|
||||||
|
|
|
@ -66,6 +66,12 @@ command! -nargs=* -complete=file -bang -bar -buffer RustRun call rust#Run(<bang>
|
||||||
" See |:RustExpand| for docs
|
" See |:RustExpand| for docs
|
||||||
command! -nargs=* -complete=customlist,rust#CompleteExpand -bang -bar -buffer RustExpand call rust#Expand(<bang>0, [<f-args>])
|
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
|
" Mappings {{{1
|
||||||
|
|
||||||
" Bind ⌘R in MacVim to :RustRun
|
" Bind ⌘R in MacVim to :RustRun
|
||||||
|
@ -91,6 +97,8 @@ let b:undo_ftplugin = "
|
||||||
\|unlet! b:rust_last_rustc_args b:rust_last_args
|
\|unlet! b:rust_last_rustc_args b:rust_last_args
|
||||||
\|delcommand RustRun
|
\|delcommand RustRun
|
||||||
\|delcommand RustExpand
|
\|delcommand RustExpand
|
||||||
|
\|delcommand RustEmitIr
|
||||||
|
\|delcommand RustEmitAsm
|
||||||
\|nunmap <buffer> <D-r>
|
\|nunmap <buffer> <D-r>
|
||||||
\|nunmap <buffer> <D-R>
|
\|nunmap <buffer> <D-R>
|
||||||
\|nunmap <buffer> [[
|
\|nunmap <buffer> [[
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue