From 59a44caac64c52e9e48c7d1da37d49fabf44db05 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Tue, 28 Oct 2025 07:45:14 +0800 Subject: [PATCH] vim-patch:eba5133: runtime(rust): Do not use rustfmt as 'formatprg' by default (#36361) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 4ac995bf9366c6624a0724d19b2226f4c95694b3. This was added in vim/vim#16807, with no explanation for why it was necessary beyond "it's an example of an idea". It completely breaks `gq` for me—rustfmt doesn't reflow comments so is not an appropriate tool here! Beyond that, formatting a selection with rustfmt treats that selection as if it were an entire file, throwing away any indentation. For example, the commit causes `gq` to turn this: ```rust pub fn foo() { // blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah } ``` into this: ```rust pub fn foo() { // blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah } ``` which is totally wrong. In contrast, if I clear `formatprg` then `gq` does the right thing again: ```rust pub fn foo() { // blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah // blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah // blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah // blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah // blah blah blah blah blah blah } ``` related: vim/vim#16967 related: vim/vim#17055 closes: vim/vim#18640 https://github.com/vim/vim/commit/eba51337d4b8051b768164f3394d680742234ca8 Co-authored-by: Aaron Jacobs --- runtime/autoload/rustfmt.vim | 16 +++++----------- runtime/doc/ft_rust.txt | 6 ------ runtime/ftplugin/rust.vim | 16 +--------------- 3 files changed, 6 insertions(+), 32 deletions(-) diff --git a/runtime/autoload/rustfmt.vim b/runtime/autoload/rustfmt.vim index 847b698b79..268a1c02cc 100644 --- a/runtime/autoload/rustfmt.vim +++ b/runtime/autoload/rustfmt.vim @@ -1,8 +1,8 @@ " Author: Stephen Sugden " Last Modified: 2023-09-11 " Last Change: -" 2025 Mar 31 by Vim project (rename s:RustfmtConfigOptions()) -" 2025 Jul 14 by Vim project (don't parse rustfmt version automatically #17745) +" 2025 Oct 27 by Vim project don't use rustfmt as 'formatprg' by default +" " " Adapted from https://github.com/fatih/vim-go " For bugs, patches and license go to https://github.com/rust-lang/rust.vim @@ -68,13 +68,7 @@ function! s:RustfmtWriteMode() endif endfunction -function! rustfmt#RustfmtConfigOptions() - let default = '--edition 2018' - - if !get(g:, 'rustfmt_find_toml', 0) - return default - endif - +function! s:RustfmtConfigOptions() let l:rustfmt_toml = findfile('rustfmt.toml', expand('%:p:h') . ';') if l:rustfmt_toml !=# '' return '--config-path '.shellescape(fnamemodify(l:rustfmt_toml, ":p")) @@ -97,7 +91,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 = rustfmt#RustfmtConfigOptions() + let l:rustfmt_config = s:RustfmtConfigOptions() " FIXME: When --file-lines gets to be stable, add version range checking " accordingly. @@ -112,7 +106,7 @@ endfunction function! s:RustfmtCommand() let write_mode = g:rustfmt_emit_files ? '--emit=stdout' : '--write-mode=display' - let config = rustfmt#RustfmtConfigOptions() + let config = s:RustfmtConfigOptions() return join([g:rustfmt_command, write_mode, config, g:rustfmt_options]) endfunction diff --git a/runtime/doc/ft_rust.txt b/runtime/doc/ft_rust.txt index cfa1d0cc56..9c805f8f94 100644 --- a/runtime/doc/ft_rust.txt +++ b/runtime/doc/ft_rust.txt @@ -165,12 +165,6 @@ g:rustfmt_detect_version ~ When set to 1, will try to parse the version output from "rustfmt". Disabled by default for performance reasons >vim let g:rustfmt_detect_version = 1 -< - *g:rustfmt_find_toml* -g:rustfmt_find_toml ~ - When set to 1, will try to find "rustfmt.toml" file by searching from - current path upwards. Disabled by default for performance reasons >vim - let g:rustfmt_find_toml = 1 < *g:rust_playpen_url* g:rust_playpen_url ~ diff --git a/runtime/ftplugin/rust.vim b/runtime/ftplugin/rust.vim index 53f7f83363..3e2741f919 100644 --- a/runtime/ftplugin/rust.vim +++ b/runtime/ftplugin/rust.vim @@ -3,7 +3,6 @@ " Maintainer: Chris Morgan " Last Change: 2024 Mar 17 " 2024 May 23 by Riley Bruins - autocmd ShellFilterPost 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 @@ -163,7 +149,7 @@ endif let b:undo_ftplugin = " \ compiler make | - \ setlocal formatoptions< comments< commentstring< include< includeexpr< suffixesadd< formatprg< + \ setlocal formatoptions< comments< commentstring< include< includeexpr< suffixesadd< \|if exists('b:rust_set_style') \|setlocal tabstop< shiftwidth< softtabstop< expandtab< textwidth< \|endif