diff options
Diffstat (limited to 'crates')
-rw-r--r-- | crates/ide/.DS_Store | bin | 0 -> 6148 bytes | |||
-rw-r--r-- | crates/rust-analyzer/src/config.rs | 9 | ||||
-rw-r--r-- | crates/rust-analyzer/src/handlers.rs | 22 | ||||
-rw-r--r-- | crates/rust-analyzer/src/lsp_ext.rs | 14 | ||||
-rw-r--r-- | crates/rust-analyzer/src/main_loop.rs | 1 |
5 files changed, 40 insertions, 6 deletions
diff --git a/crates/ide/.DS_Store b/crates/ide/.DS_Store new file mode 100644 index 000000000..a566736aa --- /dev/null +++ b/crates/ide/.DS_Store | |||
Binary files differ | |||
diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs index 74a021dbf..372180ab5 100644 --- a/crates/rust-analyzer/src/config.rs +++ b/crates/rust-analyzer/src/config.rs | |||
@@ -398,13 +398,10 @@ impl Config { | |||
398 | } | 398 | } |
399 | 399 | ||
400 | if let Some(code_action) = &doc_caps.code_action { | 400 | if let Some(code_action) = &doc_caps.code_action { |
401 | match (code_action.data_support, &code_action.resolve_support) { | 401 | if let Some(resolve_support) = &code_action.resolve_support { |
402 | (Some(true), Some(resolve_support)) => { | 402 | if resolve_support.properties.iter().any(|it| it == "edit") { |
403 | if resolve_support.properties.iter().any(|it| it == "edit") { | 403 | self.client_caps.code_action_resolve = true; |
404 | self.client_caps.code_action_resolve = true; | ||
405 | } | ||
406 | } | 404 | } |
407 | _ => (), | ||
408 | } | 405 | } |
409 | } | 406 | } |
410 | } | 407 | } |
diff --git a/crates/rust-analyzer/src/handlers.rs b/crates/rust-analyzer/src/handlers.rs index 95659b0db..782797e85 100644 --- a/crates/rust-analyzer/src/handlers.rs +++ b/crates/rust-analyzer/src/handlers.rs | |||
@@ -1322,6 +1322,28 @@ pub(crate) fn handle_open_docs( | |||
1322 | Ok(remote.and_then(|remote| Url::parse(&remote).ok())) | 1322 | Ok(remote.and_then(|remote| Url::parse(&remote).ok())) |
1323 | } | 1323 | } |
1324 | 1324 | ||
1325 | pub(crate) fn handle_open_cargo_toml( | ||
1326 | snap: GlobalStateSnapshot, | ||
1327 | params: lsp_ext::OpenCargoTomlParams, | ||
1328 | ) -> Result<Option<lsp_types::GotoDefinitionResponse>> { | ||
1329 | let _p = profile::span("handle_open_cargo_toml"); | ||
1330 | let file_id = from_proto::file_id(&snap, ¶ms.text_document.uri)?; | ||
1331 | let maybe_cargo_spec = CargoTargetSpec::for_file(&snap, file_id)?; | ||
1332 | if maybe_cargo_spec.is_none() { | ||
1333 | return Ok(None); | ||
1334 | } | ||
1335 | |||
1336 | let cargo_spec = maybe_cargo_spec.unwrap(); | ||
1337 | let cargo_toml_path = cargo_spec.workspace_root.join("Cargo.toml"); | ||
1338 | if !cargo_toml_path.exists() { | ||
1339 | return Ok(None); | ||
1340 | } | ||
1341 | let cargo_toml_url = to_proto::url_from_abs_path(&cargo_toml_path); | ||
1342 | let cargo_toml_location = Location::new(cargo_toml_url, Range::default()); | ||
1343 | let res = lsp_types::GotoDefinitionResponse::from(cargo_toml_location); | ||
1344 | Ok(Some(res)) | ||
1345 | } | ||
1346 | |||
1325 | fn implementation_title(count: usize) -> String { | 1347 | fn implementation_title(count: usize) -> String { |
1326 | if count == 1 { | 1348 | if count == 1 { |
1327 | "1 implementation".into() | 1349 | "1 implementation".into() |
diff --git a/crates/rust-analyzer/src/lsp_ext.rs b/crates/rust-analyzer/src/lsp_ext.rs index a7c3028e4..a5c65fa3e 100644 --- a/crates/rust-analyzer/src/lsp_ext.rs +++ b/crates/rust-analyzer/src/lsp_ext.rs | |||
@@ -354,3 +354,17 @@ impl Request for ExternalDocs { | |||
354 | type Result = Option<lsp_types::Url>; | 354 | type Result = Option<lsp_types::Url>; |
355 | const METHOD: &'static str = "experimental/externalDocs"; | 355 | const METHOD: &'static str = "experimental/externalDocs"; |
356 | } | 356 | } |
357 | |||
358 | pub enum OpenCargoToml {} | ||
359 | |||
360 | impl Request for OpenCargoToml { | ||
361 | type Params = OpenCargoTomlParams; | ||
362 | type Result = Option<lsp_types::GotoDefinitionResponse>; | ||
363 | const METHOD: &'static str = "experimental/openCargoToml"; | ||
364 | } | ||
365 | |||
366 | #[derive(Serialize, Deserialize, Debug)] | ||
367 | #[serde(rename_all = "camelCase")] | ||
368 | pub struct OpenCargoTomlParams { | ||
369 | pub text_document: TextDocumentIdentifier, | ||
370 | } | ||
diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs index 6e6cac42e..68a53bbcb 100644 --- a/crates/rust-analyzer/src/main_loop.rs +++ b/crates/rust-analyzer/src/main_loop.rs | |||
@@ -438,6 +438,7 @@ impl GlobalState { | |||
438 | .on::<lsp_ext::CodeActionResolveRequest>(handlers::handle_code_action_resolve) | 438 | .on::<lsp_ext::CodeActionResolveRequest>(handlers::handle_code_action_resolve) |
439 | .on::<lsp_ext::HoverRequest>(handlers::handle_hover) | 439 | .on::<lsp_ext::HoverRequest>(handlers::handle_hover) |
440 | .on::<lsp_ext::ExternalDocs>(handlers::handle_open_docs) | 440 | .on::<lsp_ext::ExternalDocs>(handlers::handle_open_docs) |
441 | .on::<lsp_ext::OpenCargoToml>(handlers::handle_open_cargo_toml) | ||
441 | .on::<lsp_types::request::OnTypeFormatting>(handlers::handle_on_type_formatting) | 442 | .on::<lsp_types::request::OnTypeFormatting>(handlers::handle_on_type_formatting) |
442 | .on::<lsp_types::request::DocumentSymbolRequest>(handlers::handle_document_symbol) | 443 | .on::<lsp_types::request::DocumentSymbolRequest>(handlers::handle_document_symbol) |
443 | .on::<lsp_types::request::WorkspaceSymbol>(handlers::handle_workspace_symbol) | 444 | .on::<lsp_types::request::WorkspaceSymbol>(handlers::handle_workspace_symbol) |