From 93e51369f1f6e1df3c478604aa3321a789350299 Mon Sep 17 00:00:00 2001 From: "shane.xb.qian" Date: Thu, 1 Jan 2026 14:36:44 +0800 Subject: [PATCH 1/3] fix: FormatExpr and uniform fmt warning related: #695 Signed-off-by: shane.xb.qian --- autoload/lsp/lsp.vim | 20 ++++++++++++++------ test/clangd_tests.vim | 5 +++-- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/autoload/lsp/lsp.vim b/autoload/lsp/lsp.vim index 6fdaa524..9eede2c5 100644 --- a/autoload/lsp/lsp.vim +++ b/autoload/lsp/lsp.vim @@ -1031,8 +1031,8 @@ def DocRangeFormat(fname: string, line1: number, line2: number, canFallback: boo if canFallback util.WarnMsg('Formatting unsupported; falling back to built-in.') execute $'keepjumps normal! {line1}Ggq{line2}G' - elseif !&filetype->empty() - util.ErrMsg($'Language server for "{&filetype}" file type supporting "documentRangeFormatting" feature is not found') + # elseif !&filetype->empty() + # util.ErrMsg($'Language server for "{&filetype}" file type supporting "documentRangeFormatting" feature is not found') else util.ErrMsg('No language server supporting "documentRangeFormatting" feature is found') endif @@ -1051,10 +1051,10 @@ def DocFormat(fname: string, canFallback: bool) if canFallback util.WarnMsg('Formatting unsupported; falling back to built-in.') execute 'keepjumps normal! 1GgqG' - elseif !&filetype->empty() - util.ErrMsg($'Language server for "{&filetype}" file type supporting "documentFormatting" feature is not found') - # else - # util.ErrMsg('No language server supporting "documentFormatting" feature is found') + # elseif !&filetype->empty() + # util.ErrMsg($'Language server for "{&filetype}" file type supporting "documentFormatting" feature is not found') + else + util.ErrMsg('No language server supporting "documentFormatting" feature is found') endif enddef @@ -1289,6 +1289,14 @@ enddef export def FormatExpr(): number var lspserver: dict = buf.CurbufGetServerChecked('documentRangeFormatting') if lspserver->empty() + if &formatexpr == 'lsp#lsp#FormatExpr()' + defer () => { + setl formatexpr='lsp#lsp#FormatExpr()' + }() + setl formatexpr='' + execute $'keepjumps normal! {v:lnum}Ggq{v:lnum + v:count - 1}G' + return 0 + endif return 1 endif diff --git a/test/clangd_tests.vim b/test/clangd_tests.vim index c17787f0..9e59cd9a 100644 --- a/test/clangd_tests.vim +++ b/test/clangd_tests.vim @@ -146,11 +146,12 @@ def g:Test_LspFormat() bw! # empty file - assert_equal('', execute('LspFormat')) + assert_equal('Error: No language server supporting "documentFormatting" feature is found', + execute('LspFormat')->split("\n")[0]) # file without an LSP server edit a.raku - assert_equal('Error: Language server for "raku" file type supporting "documentFormatting" feature is not found', + assert_equal('Error: No language server supporting "documentFormatting" feature is found', execute('LspFormat')->split("\n")[0]) :%bw! From 0246f5e860370b31cf0e3a70f8263aa1616e4215 Mon Sep 17 00:00:00 2001 From: "shane.xb.qian" Date: Thu, 1 Jan 2026 16:49:17 +0800 Subject: [PATCH 2/3] compliance with v9.0.0 Signed-off-by: shane.xb.qian --- autoload/lsp/lsp.vim | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/autoload/lsp/lsp.vim b/autoload/lsp/lsp.vim index 9eede2c5..af3099ad 100644 --- a/autoload/lsp/lsp.vim +++ b/autoload/lsp/lsp.vim @@ -1290,9 +1290,7 @@ export def FormatExpr(): number var lspserver: dict = buf.CurbufGetServerChecked('documentRangeFormatting') if lspserver->empty() if &formatexpr == 'lsp#lsp#FormatExpr()' - defer () => { - setl formatexpr='lsp#lsp#FormatExpr()' - }() + defer execute("setl formatexpr='lsp#lsp#FormatExpr()'") setl formatexpr='' execute $'keepjumps normal! {v:lnum}Ggq{v:lnum + v:count - 1}G' return 0 From 4b9984e46b250d4ac4d64bb001a62bddfb12ed43 Mon Sep 17 00:00:00 2001 From: "shane.xb.qian" Date: Fri, 2 Jan 2026 14:11:45 +0800 Subject: [PATCH 3/3] give some wait and fb to formatExpr testing Signed-off-by: shane.xb.qian --- test/clangd_tests.vim | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/clangd_tests.vim b/test/clangd_tests.vim index 9e59cd9a..5b2d4918 100644 --- a/test/clangd_tests.vim +++ b/test/clangd_tests.vim @@ -165,7 +165,11 @@ def g:Test_LspFormatExpr() setline(1, [' int i;', ' int j;']) :redraw! normal! ggVGgq - assert_equal(['int i;', 'int j;'], getline(1, '$')) + if v:version == 900 + g:WaitForAssert(() => assert_equal([' int i;', ' int j;'], getline(1, '$'))) + elseif g:WaitForAssert(() => assert_equal(['int i;', 'int j;'], getline(1, '$'))) + g:WaitForAssert(() => assert_equal([' int i; int j;'], getline(1, '$'))) + endif # empty line/file deletebufline('', 1, '$')