runtime(rust): set formatprg to rustfmt

closes: #16967

Signed-off-by: Konfekt <Konfekt@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/runtime/ftplugin/rust.vim b/runtime/ftplugin/rust.vim
index 3e2741f..53f7f83 100644
--- a/runtime/ftplugin/rust.vim
+++ b/runtime/ftplugin/rust.vim
@@ -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 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 @@
 
 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