@@ -112,13 +112,15 @@ impl LanguageClient {
112112
113113 let (
114114 diagnosticsSignsMax,
115+ diagnostics_max_severity,
115116 documentHighlightDisplay,
116117 selectionUI_autoOpen,
117118 use_virtual_text,
118119 echo_project_root,
119- ) : ( Option < u64 > , Value , u8 , u8 , u8 ) = self . vim ( ) ?. eval (
120+ ) : ( Option < u64 > , String , Value , u8 , u8 , u8 ) = self . vim ( ) ?. eval (
120121 [
121122 "get(g:, 'LanguageClient_diagnosticsSignsMax', v:null)" ,
123+ "get(g:, 'LanguageClient_diagnosticsMaxSeverity', 'Hint')" ,
122124 "get(g:, 'LanguageClient_documentHighlightDisplay', {})" ,
123125 "!!s:GetVar('LanguageClient_selectionUI_autoOpen', 1)" ,
124126 "s:useVirtualText()" ,
@@ -184,6 +186,18 @@ impl LanguageClient {
184186
185187 let is_nvim = is_nvim == 1 ;
186188
189+ let diagnostics_max_severity = match diagnostics_max_severity. to_ascii_uppercase ( ) . as_str ( )
190+ {
191+ "ERROR" => DiagnosticSeverity :: Error ,
192+ "WARNING" => DiagnosticSeverity :: Warning ,
193+ "INFORMATION" => DiagnosticSeverity :: Information ,
194+ "HINT" => DiagnosticSeverity :: Hint ,
195+ _ => bail ! (
196+ "Invalid option for LanguageClient_diagnosticsMaxSeverity: {}" ,
197+ diagnostics_max_severity
198+ ) ,
199+ } ;
200+
187201 self . update ( |state| {
188202 state. autoStart = autoStart;
189203 state. serverCommands . extend ( serverCommands) ;
@@ -196,6 +210,7 @@ impl LanguageClient {
196210 serde_json:: to_value ( & state. diagnosticsDisplay ) ?. combine ( & diagnosticsDisplay) ,
197211 ) ?;
198212 state. diagnosticsSignsMax = diagnosticsSignsMax;
213+ state. diagnostics_max_severity = diagnostics_max_severity;
199214 state. documentHighlightDisplay = serde_json:: from_value (
200215 serde_json:: to_value ( & state. documentHighlightDisplay ) ?
201216 . combine ( & documentHighlightDisplay) ,
@@ -1818,7 +1833,15 @@ impl LanguageClient {
18181833 // Unify name to avoid mismatch due to case insensitivity.
18191834 let filename = filename. canonicalize ( ) ;
18201835
1821- let mut diagnostics = params. diagnostics ;
1836+ let diagnostics_max_severity = self . get ( |state| state. diagnostics_max_severity ) ?;
1837+ let mut diagnostics = params
1838+ . diagnostics
1839+ . iter ( )
1840+ . filter ( |& diagnostic| {
1841+ diagnostic. severity . unwrap_or ( DiagnosticSeverity :: Hint ) <= diagnostics_max_severity
1842+ } )
1843+ . map ( Clone :: clone)
1844+ . collect :: < Vec < _ > > ( ) ;
18221845 diagnostics. sort_by_key (
18231846 // First sort by line.
18241847 // Then severity descendingly. Error should come last since when processing item comes
0 commit comments