]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(rust): set formatprg to rustfmt
authorKonfekt <Konfekt@users.noreply.github.com>
Mon, 31 Mar 2025 18:45:26 +0000 (20:45 +0200)
committerChristian Brabandt <cb@256bit.org>
Mon, 31 Mar 2025 18:54:50 +0000 (20:54 +0200)
closes: #16967

Signed-off-by: Konfekt <Konfekt@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/autoload/rustfmt.vim
runtime/ftplugin/rust.vim

index 8fd3858178a9ad66bde2ea30793cdba7618fb236..f325df2fda493be0115d4558e79ae0e924c20bce 100644 (file)
@@ -1,5 +1,6 @@
 " Author: Stephen Sugden <stephen@stephensugden.com>
 " Last Modified: 2023-09-11
+" Last Change:   2025 Mar 31 by Vim project (rename s:RustfmtConfigOptions())
 "
 " Adapted from https://github.com/fatih/vim-go
 " For bugs, patches and license go to https://github.com/rust-lang/rust.vim
@@ -61,7 +62,7 @@ function! s:RustfmtWriteMode()
     endif
 endfunction
 
-function! s:RustfmtConfigOptions()
+function! rustfmt#RustfmtConfigOptions()
     let l:rustfmt_toml = findfile('rustfmt.toml', expand('%:p:h') . ';')
     if l:rustfmt_toml !=# ''
         return '--config-path '.shellescape(fnamemodify(l:rustfmt_toml, ":p"))
@@ -84,7 +85,7 @@ function! s:RustfmtCommandRange(filename, line1, line2)
 
     let l:arg = {"file": shellescape(a:filename), "range": [a:line1, a:line2]}
     let l:write_mode = s:RustfmtWriteMode()
-    let l:rustfmt_config = s:RustfmtConfigOptions()
+    let l:rustfmt_config = rustfmt#RustfmtConfigOptions()
 
     " FIXME: When --file-lines gets to be stable, add version range checking
     " accordingly.
@@ -99,7 +100,7 @@ endfunction
 
 function! s:RustfmtCommand()
     let write_mode = g:rustfmt_emit_files ? '--emit=stdout' : '--write-mode=display'
-    let config = s:RustfmtConfigOptions()
+    let config = rustfmt#RustfmtConfigOptions()
     return join([g:rustfmt_command, write_mode, config, g:rustfmt_options])
 endfunction
 
index 3e2741f919cc5e01bce7d85e9ffe0c79d9a572c4..53f7f8336309bfc27f9742cbc11b6bfb190af440 100644 (file)
@@ -3,6 +3,7 @@
 " Maintainer:  Chris Morgan <me@chrismorgan.info>
 " Last Change: 2024 Mar 17
 "              2024 May 23 by Riley Bruins <ribru17@gmail.com ('commentstring')
+"              2025 Mar 31 by Vim project (set 'formatprg' option)
 " For bugs, patches and license go to https://github.com/rust-lang/rust.vim
 
 if exists("b:did_ftplugin")
@@ -57,6 +58,19 @@ setlocal includeexpr=rust#IncludeExpr(v:fname)
 
 setlocal suffixesadd=.rs
 
+if executable(get(g:, 'rustfmt_command', 'rustfmt'))
+    if get(g:, "rustfmt_fail_silently", 0)
+        augroup rust.vim.FailSilently
+            autocmd! * <buffer>
+            autocmd ShellFilterPost <buffer> if v:shell_error | execute 'echom "shell filter returned error " . v:shell_error . ", undoing changes"' | undo | endif
+        augroup END
+    endif
+
+    let &l:formatprg = get(g:, 'rustfmt_command', 'rustfmt') . ' ' .
+                \ get(g:, 'rustfmt_options', '') . ' ' .
+                \ rustfmt#RustfmtConfigOptions()
+endif
+
 if exists("g:ftplugin_rust_source_path")
     let &l:path=g:ftplugin_rust_source_path . ',' . &l:path
 endif
@@ -149,7 +163,7 @@ endif
 
 let b:undo_ftplugin = "
             \ compiler make |
-            \ setlocal formatoptions< comments< commentstring< include< includeexpr< suffixesadd<
+            \ setlocal formatoptions< comments< commentstring< include< includeexpr< suffixesadd< formatprg<
             \|if exists('b:rust_set_style')
                 \|setlocal tabstop< shiftwidth< softtabstop< expandtab< textwidth<
                 \|endif