Skip to content

Commit 10d2a1e

Browse files
authored
feat: Use markdown for hover text and add well known types hover documentations (#44)
1 parent e147cb4 commit 10d2a1e

9 files changed

+570
-63
lines changed

sample/simple.proto

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@ message Book {
1313
google.protobuf.Any data = 4;
1414
BookState state = 5;
1515

16-
// Author is a author of a book
16+
// # Author is a author of a book
17+
// Usage is as follow:
18+
// ```rust
19+
// println!("hello world")
20+
// ```
1721
message Author {
1822
string name = 1;
1923
int64 age = 2;

src/lsp.rs

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -175,23 +175,16 @@ impl LanguageServer for ProtoLanguageServer {
175175
return Box::pin(async move { Ok(None) });
176176
};
177177

178-
let comments = self
178+
let result = self
179179
.state
180180
.hover(current_package_name.as_ref(), identifier.as_ref());
181181

182-
let response = match comments.len() {
183-
0 => None,
184-
1 => Some(Hover {
185-
contents: HoverContents::Scalar(comments[0].clone()),
186-
range: None,
187-
}),
188-
2.. => Some(Hover {
189-
contents: HoverContents::Array(comments),
182+
Box::pin(async move {
183+
Ok(result.map(|r| Hover {
190184
range: None,
191-
}),
192-
};
193-
194-
Box::pin(async move { Ok(response) })
185+
contents: HoverContents::Markup(r),
186+
}))
187+
})
195188
}
196189
fn completion(
197190
&mut self,

src/parser/hover.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ impl ParsedTree {
4747
}
4848
}
4949

50-
pub fn hover(&self, identifier: &str, content: impl AsRef<[u8]>) -> Vec<MarkedString> {
50+
pub fn hover(&self, identifier: &str, content: impl AsRef<[u8]>) -> Vec<String> {
5151
let mut results = vec![];
5252
self.hover_impl(identifier, self.tree.root_node(), &mut results, content);
5353
results
@@ -57,7 +57,7 @@ impl ParsedTree {
5757
&self,
5858
identifier: &str,
5959
n: Node,
60-
v: &mut Vec<MarkedString>,
60+
v: &mut Vec<String>,
6161
content: impl AsRef<[u8]>,
6262
) {
6363
if identifier.is_empty() {
@@ -77,14 +77,13 @@ impl ParsedTree {
7777
}
7878
}
7979
None => {
80-
let comments: Vec<MarkedString> = self
80+
let comments: Vec<String> = self
8181
.filter_nodes_from(n, NodeKind::is_userdefined)
8282
.into_iter()
8383
.filter(|n| {
8484
n.utf8_text(content.as_ref()).expect("utf-8 parse error") == identifier
8585
})
8686
.filter_map(|n| self.find_preceding_comments(n.id(), content.as_ref()))
87-
.map(MarkedString::String)
8887
.collect();
8988

9089
v.extend(comments);

0 commit comments

Comments
 (0)