]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(rust): improve loading time
authorChristian Brabandt <cb@256bit.org>
Sun, 20 Jul 2025 08:38:16 +0000 (10:38 +0200)
committerChristian Brabandt <cb@256bit.org>
Sun, 20 Jul 2025 08:38:16 +0000 (10:38 +0200)
fixes: #17745
closes: #17749

Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/autoload/rustfmt.vim
runtime/doc/ft_rust.txt
runtime/doc/tags

index f325df2fda493be0115d4558e79ae0e924c20bce..847b698b79b54ed409ea55eb60e30de83bf41ac6 100644 (file)
@@ -1,6 +1,8 @@
 " Author: Stephen Sugden <stephen@stephensugden.com>
 " Last Modified: 2023-09-11
-" Last Change:   2025 Mar 31 by Vim project (rename s:RustfmtConfigOptions())
+" Last Change:
+" 2025 Mar 31 by Vim project (rename s:RustfmtConfigOptions())
+" 2025 Jul 14 by Vim project (don't parse rustfmt version automatically #17745)
 "
 " Adapted from https://github.com/fatih/vim-go
 " For bugs, patches and license go to https://github.com/rust-lang/rust.vim
@@ -22,6 +24,12 @@ if !exists("g:rustfmt_fail_silently")
 endif
 
 function! rustfmt#DetectVersion()
+    let s:rustfmt_version = "0"
+    let s:rustfmt_help = ""
+    let s:rustfmt_unstable_features = ""
+    if !get(g:, 'rustfmt_detect_version', 0)
+        return s:rustfmt_version
+    endif
     " Save rustfmt '--help' for feature inspection
     silent let s:rustfmt_help = system(g:rustfmt_command . " --help")
     let s:rustfmt_unstable_features = s:rustfmt_help =~# "--unstable-features"
@@ -30,9 +38,7 @@ function! rustfmt#DetectVersion()
     silent let l:rustfmt_version_full = system(g:rustfmt_command . " --version")
     let l:rustfmt_version_list = matchlist(l:rustfmt_version_full,
         \    '\vrustfmt ([0-9]+[.][0-9]+[.][0-9]+)')
-    if len(l:rustfmt_version_list) < 3
-        let s:rustfmt_version = "0"
-    else
+    if len(l:rustfmt_version_list) >= 3
         let s:rustfmt_version = l:rustfmt_version_list[1]
     endif
     return s:rustfmt_version
@@ -63,6 +69,12 @@ function! s:RustfmtWriteMode()
 endfunction
 
 function! rustfmt#RustfmtConfigOptions()
+    let default = '--edition 2018'
+
+    if !get(g:, 'rustfmt_find_toml', 0)
+        return default
+    endif
+
     let l:rustfmt_toml = findfile('rustfmt.toml', expand('%:p:h') . ';')
     if l:rustfmt_toml !=# ''
         return '--config-path '.shellescape(fnamemodify(l:rustfmt_toml, ":p"))
@@ -74,7 +86,7 @@ function! rustfmt#RustfmtConfigOptions()
     endif
 
     " Default to edition 2018 in case no rustfmt.toml was found.
-    return '--edition 2018'
+    return default
 endfunction
 
 function! s:RustfmtCommandRange(filename, line1, line2)
index 564f3e774a96319eb310fc5253e4213b3b85d35b..30b23ced116f8887dd0c3f6a8735b9362ae987b9 100644 (file)
@@ -159,7 +159,20 @@ g:rustfmt_emit_files~
        determines whether to run rustfmt with '--emit=files' (when 1 is
        provided) instead of '--write-mode=overwrite'. >
            let g:rustfmt_emit_files = 0
-
+<
+                                                       *g:rustfmt_detect_version*
+g:rustfmt_detect_version~
+       When set to 1, will try to parse the version output from "rustfmt".
+       Disabled by default for performance reasons
+>
+           let g:rustfmt_detect_version = 1
+<
+                                                       *g:rustfmt_find_toml*
+g:rustfmt_emit_files~
+       When set to 1, will try to find "rustfmt.toml" file by searching from
+       current path upwards.  Disabled by default for performance reasons
+>
+           let g:rustfmt_find_toml = 1
 <
                                                           *g:rust_playpen_url*
 g:rust_playpen_url~
index d317ee7e785c5a4232a18e8529cadbf5bf59ce63..b34b79a4209f62eb745f1f3a512a286d1c7918a2 100644 (file)
@@ -7851,8 +7851,10 @@ g:rustc_path     ft_rust.txt     /*g:rustc_path*
 g:rustfmt_autosave     ft_rust.txt     /*g:rustfmt_autosave*
 g:rustfmt_autosave_if_config_present   ft_rust.txt     /*g:rustfmt_autosave_if_config_present*
 g:rustfmt_command      ft_rust.txt     /*g:rustfmt_command*
+g:rustfmt_detect_version       ft_rust.txt     /*g:rustfmt_detect_version*
 g:rustfmt_emit_files   ft_rust.txt     /*g:rustfmt_emit_files*
 g:rustfmt_fail_silently        ft_rust.txt     /*g:rustfmt_fail_silently*
+g:rustfmt_find_toml    ft_rust.txt     /*g:rustfmt_find_toml*
 g:rustfmt_options      ft_rust.txt     /*g:rustfmt_options*
 g:statusline_winid     options.txt     /*g:statusline_winid*
 g:syntax_on    syntax.txt      /*g:syntax_on*