Don't serialize the full LSP symbol when collaborating

Co-Authored-By: Nathan Sobo <nathan@zed.dev>
This commit is contained in:
Antonio Scandurra 2022-02-22 18:08:43 +01:00
parent 72ad3c2897
commit fad335b2ba
7 changed files with 68 additions and 55 deletions

View file

@ -233,49 +233,50 @@ impl LspExt for RustLsp {
fn label_for_symbol(
&self,
symbol: &lsp::SymbolInformation,
name: &str,
kind: lsp::SymbolKind,
language: &Language,
) -> Option<CodeLabel> {
let (text, filter_range, display_range) = match symbol.kind {
let (text, filter_range, display_range) = match kind {
lsp::SymbolKind::METHOD | lsp::SymbolKind::FUNCTION => {
let text = format!("fn {} () {{}}", symbol.name);
let filter_range = 3..3 + symbol.name.len();
let text = format!("fn {} () {{}}", name);
let filter_range = 3..3 + name.len();
let display_range = 0..filter_range.end;
(text, filter_range, display_range)
}
lsp::SymbolKind::STRUCT => {
let text = format!("struct {} {{}}", symbol.name);
let filter_range = 7..7 + symbol.name.len();
let text = format!("struct {} {{}}", name);
let filter_range = 7..7 + name.len();
let display_range = 0..filter_range.end;
(text, filter_range, display_range)
}
lsp::SymbolKind::ENUM => {
let text = format!("enum {} {{}}", symbol.name);
let filter_range = 5..5 + symbol.name.len();
let text = format!("enum {} {{}}", name);
let filter_range = 5..5 + name.len();
let display_range = 0..filter_range.end;
(text, filter_range, display_range)
}
lsp::SymbolKind::INTERFACE => {
let text = format!("trait {} {{}}", symbol.name);
let filter_range = 6..6 + symbol.name.len();
let text = format!("trait {} {{}}", name);
let filter_range = 6..6 + name.len();
let display_range = 0..filter_range.end;
(text, filter_range, display_range)
}
lsp::SymbolKind::CONSTANT => {
let text = format!("const {}: () = ();", symbol.name);
let filter_range = 6..6 + symbol.name.len();
let text = format!("const {}: () = ();", name);
let filter_range = 6..6 + name.len();
let display_range = 0..filter_range.end;
(text, filter_range, display_range)
}
lsp::SymbolKind::MODULE => {
let text = format!("mod {} {{}}", symbol.name);
let filter_range = 4..4 + symbol.name.len();
let text = format!("mod {} {{}}", name);
let filter_range = 4..4 + name.len();
let display_range = 0..filter_range.end;
(text, filter_range, display_range)
}
lsp::SymbolKind::TYPE_PARAMETER => {
let text = format!("type {} {{}}", symbol.name);
let filter_range = 5..5 + symbol.name.len();
let text = format!("type {} {{}}", name);
let filter_range = 5..5 + name.len();
let display_range = 0..filter_range.end;
(text, filter_range, display_range)
}
@ -456,7 +457,6 @@ mod tests {
}
#[test]
#[allow(deprecated)]
fn test_rust_label_for_symbol() {
let language = rust();
let grammar = language.grammar().unwrap();
@ -474,14 +474,7 @@ mod tests {
let highlight_keyword = grammar.highlight_id_for_name("keyword").unwrap();
assert_eq!(
language.label_for_symbol(&lsp::SymbolInformation {
kind: lsp::SymbolKind::FUNCTION,
name: "hello".to_string(),
location: lsp::Location::new("file://a".parse().unwrap(), Default::default()),
container_name: Default::default(),
deprecated: Default::default(),
tags: Default::default(),
}),
language.label_for_symbol("hello", lsp::SymbolKind::FUNCTION),
Some(CodeLabel {
text: "fn hello".to_string(),
filter_range: 3..8,
@ -490,14 +483,7 @@ mod tests {
);
assert_eq!(
language.label_for_symbol(&lsp::SymbolInformation {
kind: lsp::SymbolKind::TYPE_PARAMETER,
name: "World".to_string(),
location: lsp::Location::new("file://a".parse().unwrap(), Default::default()),
container_name: Default::default(),
deprecated: Default::default(),
tags: Default::default(),
}),
language.label_for_symbol("World", lsp::SymbolKind::TYPE_PARAMETER),
Some(CodeLabel {
text: "type World".to_string(),
filter_range: 5..10,