From c1d68cbd9e9ad971fbc3d31c6b69b40c98ddbdc6 Mon Sep 17 00:00:00 2001 From: Billie Cleek Date: Tue, 1 Sep 2020 12:48:58 -0700 Subject: [PATCH] lsp: support gofumpt and unknown gopls settings Closes #2993 --- autoload/go/config.vim | 8 ++++++++ autoload/go/lsp/message.vim | 10 ++++++++++ doc/vim-go.txt | 18 ++++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/autoload/go/config.vim b/autoload/go/config.vim index aec76edbf0..0e4fdeb2dc 100644 --- a/autoload/go/config.vim +++ b/autoload/go/config.vim @@ -550,6 +550,14 @@ function! go#config#GoplsLocal() abort return get(g:, 'go_gopls_local', v:null) endfunction +function! go#config#GoplsGofumpt() abort + return get(g:, 'go_gopls_gofumpt', v:null) +endfunction + +function! go#config#GoplsSettings() abort + return get(g:, 'go_gopls_settings', v:null) +endfunction + function! go#config#GoplsEnabled() abort return get(g:, 'go_gopls_enabled', 1) endfunction diff --git a/autoload/go/lsp/message.vim b/autoload/go/lsp/message.vim index 730901a278..d3acd0c7a1 100644 --- a/autoload/go/lsp/message.vim +++ b/autoload/go/lsp/message.vim @@ -269,6 +269,8 @@ function! go#lsp#message#ConfigurationResult(items) abort let l:tempModfile = go#config#GoplsTempModfile() let l:analyses = go#config#GoplsAnalyses() let l:local = go#config#GoplsLocal() + let l:gofumpt = go#config#GoplsGofumpt() + let l:settings = go#config#GoplsSettings() if l:deepCompletion isnot v:null if l:deepCompletion @@ -322,6 +324,14 @@ function! go#lsp#message#ConfigurationResult(items) abort let l:config.local = l:local endif + if l:gofumpt isnot v:null + let l:config.gofumpt = l:local + endif + + if l:settings isnot v:null + let l:config = extend(l:config, l:settings, 'keep') + endif + let l:result = add(l:result, l:config) endfor diff --git a/doc/vim-go.txt b/doc/vim-go.txt index 5ab6438c3e..c723fd71a5 100644 --- a/doc/vim-go.txt +++ b/doc/vim-go.txt @@ -1874,6 +1874,24 @@ is `v:null`. let g:go_gopls_local = v:null < + *'g:go_gopls_gofumpt'* + +Specifies whether `gopls` should use `gofumpt` for formatting. When it is +`v:null`, `gopls`' default will be used. By default it is `v:null`. +> + let g:go_gopls_gofumpt = v:null +< + + *'g:go_gopls_settings'* + +Specifies `gopls` workspace settings for `gopls` that are not yet officially +supported by vim-go. Any value in the dictionary will be overridden by values +provided in the specific options supported by vim-go (e.g. +g:go_gopls_staticcheck) or settings statically configured by vim-go to ensure +expected behavior. By default it is `v:null`. +> + let g:go_gopls_settings = v:null +< *'g:go_diagnostics_enabled'* Specifies whether `gopls` diagnostics are enabled. Only the diagnostics for