Skip to content

Commit e3ae298

Browse files
committed
Fill code action capabilities with a function
1 parent 6bf4fc2 commit e3ae298

File tree

1 file changed

+27
-29
lines changed

1 file changed

+27
-29
lines changed

crates/rust-analyzer/src/caps.rs

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,35 +15,7 @@ use lsp_types::{
1515
};
1616

1717
pub fn server_capabilities(client_caps: &ClientCapabilities) -> ServerCapabilities {
18-
let mut code_action_provider = CodeActionProviderCapability::Simple(true);
19-
20-
match client_caps.text_document.as_ref() {
21-
Some(it) => {
22-
match it.code_action.as_ref().and_then(|c| c.code_action_literal_support.as_ref()) {
23-
Some(_literal_support) => {
24-
code_action_provider =
25-
CodeActionProviderCapability::Options(CodeActionOptions {
26-
// Advertise support for all built-in CodeActionKinds.
27-
// Ideally we would base this off of the client capabilities
28-
// but the client is supposed to fall back gracefully for unknown values.
29-
code_action_kinds: Some(vec![
30-
lsp_types::code_action_kind::EMPTY.to_string(),
31-
lsp_types::code_action_kind::QUICKFIX.to_string(),
32-
lsp_types::code_action_kind::REFACTOR.to_string(),
33-
lsp_types::code_action_kind::REFACTOR_EXTRACT.to_string(),
34-
lsp_types::code_action_kind::REFACTOR_INLINE.to_string(),
35-
lsp_types::code_action_kind::REFACTOR_REWRITE.to_string(),
36-
lsp_types::code_action_kind::SOURCE.to_string(),
37-
lsp_types::code_action_kind::SOURCE_ORGANIZE_IMPORTS.to_string(),
38-
]),
39-
work_done_progress_options: Default::default(),
40-
});
41-
}
42-
None => {}
43-
}
44-
}
45-
None => {}
46-
};
18+
let code_action_provider = code_action_capabilities(client_caps);
4719

4820
ServerCapabilities {
4921
text_document_sync: Some(TextDocumentSyncCapability::Options(TextDocumentSyncOptions {
@@ -112,3 +84,29 @@ pub fn server_capabilities(client_caps: &ClientCapabilities) -> ServerCapabiliti
11284
experimental: Default::default(),
11385
}
11486
}
87+
88+
fn code_action_capabilities(client_caps: &ClientCapabilities) -> CodeActionProviderCapability {
89+
client_caps
90+
.text_document
91+
.as_ref()
92+
.and_then(|it| it.code_action.as_ref())
93+
.and_then(|it| it.code_action_literal_support.as_ref())
94+
.map_or(CodeActionProviderCapability::Simple(true), |_| {
95+
CodeActionProviderCapability::Options(CodeActionOptions {
96+
// Advertise support for all built-in CodeActionKinds.
97+
// Ideally we would base this off of the client capabilities
98+
// but the client is supposed to fall back gracefully for unknown values.
99+
code_action_kinds: Some(vec![
100+
lsp_types::code_action_kind::EMPTY.to_string(),
101+
lsp_types::code_action_kind::QUICKFIX.to_string(),
102+
lsp_types::code_action_kind::REFACTOR.to_string(),
103+
lsp_types::code_action_kind::REFACTOR_EXTRACT.to_string(),
104+
lsp_types::code_action_kind::REFACTOR_INLINE.to_string(),
105+
lsp_types::code_action_kind::REFACTOR_REWRITE.to_string(),
106+
lsp_types::code_action_kind::SOURCE.to_string(),
107+
lsp_types::code_action_kind::SOURCE_ORGANIZE_IMPORTS.to_string(),
108+
]),
109+
work_done_progress_options: Default::default(),
110+
})
111+
})
112+
}

0 commit comments

Comments
 (0)