diff --git a/Cargo.lock b/Cargo.lock index 280d974327c..af706281533 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -619,9 +619,9 @@ dependencies = [ [[package]] name = "lsp-types" -version = "0.77.0" +version = "0.78.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897c6c8930fbf12b67deffc83729287bb379dd5e5a4bd0ae2d81eff8d6503db6" +checksum = "d2e6cf68e3492cfa2035f0382c1da1b6ab045db0320feca505b86b4f13d66c27" dependencies = [ "base64", "bitflags", diff --git a/crates/rust-analyzer/Cargo.toml b/crates/rust-analyzer/Cargo.toml index 023c104d16d..758aa1c5d7d 100644 --- a/crates/rust-analyzer/Cargo.toml +++ b/crates/rust-analyzer/Cargo.toml @@ -20,7 +20,7 @@ env_logger = { version = "0.7.1", default-features = false } itertools = "0.9.0" jod-thread = "0.1.0" log = "0.4.8" -lsp-types = { version = "0.77.0", features = ["proposed"] } +lsp-types = { version = "0.78.0", features = ["proposed"] } parking_lot = "0.11.0" pico-args = "0.3.1" rand = { version = "0.7.3", features = ["small_rng"] } diff --git a/crates/rust-analyzer/src/handlers.rs b/crates/rust-analyzer/src/handlers.rs index d880570d280..2589002e79e 100644 --- a/crates/rust-analyzer/src/handlers.rs +++ b/crates/rust-analyzer/src/handlers.rs @@ -2,6 +2,8 @@ //! Protocol. The majority of requests are fulfilled by calling into the //! `ra_ide` crate. +#![allow(deprecated)] + use std::{ io::Write as _, process::{self, Stdio}, @@ -15,7 +17,7 @@ use lsp_types::{ DocumentHighlight, DocumentSymbol, FoldingRange, FoldingRangeParams, HoverContents, Location, Position, PrepareRenameResponse, Range, RenameParams, SemanticTokensParams, SemanticTokensRangeParams, SemanticTokensRangeResult, SemanticTokensResult, SymbolInformation, - TextDocumentIdentifier, Url, WorkspaceEdit, + SymbolTag, TextDocumentIdentifier, Url, WorkspaceEdit, }; use ra_ide::{ FileId, FilePosition, FileRange, HoverAction, HoverGotoTypeData, NavigationTarget, Query, @@ -253,10 +255,16 @@ pub(crate) fn handle_document_symbol( let mut parents: Vec<(DocumentSymbol, Option)> = Vec::new(); for symbol in snap.analysis.file_structure(file_id)? { + let mut tags = Vec::new(); + if symbol.deprecated { + tags.push(SymbolTag::Deprecated) + }; + let doc_symbol = DocumentSymbol { name: symbol.label, detail: symbol.detail, kind: to_proto::symbol_kind(symbol.kind), + tags: Some(tags), deprecated: Some(symbol.deprecated), range: to_proto::range(&line_index, symbol.node_range), selection_range: to_proto::range(&line_index, symbol.navigation_range), @@ -296,9 +304,16 @@ pub(crate) fn handle_document_symbol( url: &Url, res: &mut Vec, ) { + let mut tags = Vec::new(); + match symbol.deprecated { + Some(true) => tags.push(SymbolTag::Deprecated), + _ => {} + } + res.push(SymbolInformation { name: symbol.name.clone(), kind: symbol.kind, + tags: Some(tags), deprecated: symbol.deprecated, location: Location::new(url.clone(), symbol.range), container_name, @@ -345,6 +360,7 @@ pub(crate) fn handle_workspace_symbol( let info = SymbolInformation { name: nav.name.to_string(), kind: to_proto::symbol_kind(nav.kind), + tags: None, location: to_proto::location_from_nav(snap, nav)?, container_name, deprecated: None,