Skip to content

Commit 0869083

Browse files
committed
feat: Add well known types hover docs
1 parent bb41aab commit 0869083

9 files changed

+573
-68
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: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,9 @@ use async_lsp::lsp_types::{
1515
GotoDefinitionResponse, Hover, HoverContents, HoverParams, HoverProviderCapability,
1616
InitializeParams, InitializeResult, Location, OneOf, PrepareRenameResponse, ProgressParams,
1717
ReferenceParams, RenameFilesParams, RenameOptions, RenameParams, ServerCapabilities,
18-
ServerInfo, TextDocumentPositionParams, TextDocumentSyncCapability,
19-
TextDocumentSyncKind, TextEdit, Url, WorkspaceEdit,
20-
WorkspaceFileOperationsServerCapabilities, WorkspaceFoldersServerCapabilities,
21-
WorkspaceServerCapabilities,
18+
ServerInfo, TextDocumentPositionParams, TextDocumentSyncCapability, TextDocumentSyncKind,
19+
TextEdit, Url, WorkspaceEdit, WorkspaceFileOperationsServerCapabilities,
20+
WorkspaceFoldersServerCapabilities, WorkspaceServerCapabilities,
2221
};
2322
use async_lsp::{LanguageClient, LanguageServer, ResponseError};
2423
use futures::future::BoxFuture;
@@ -176,23 +175,16 @@ impl LanguageServer for ProtoLanguageServer {
176175
return Box::pin(async move { Ok(None) });
177176
};
178177

179-
let comments = self
178+
let result = self
180179
.state
181180
.hover(current_package_name.as_ref(), identifier.as_ref());
182181

183-
let response = match comments.len() {
184-
0 => None,
185-
1 => Some(Hover {
186-
contents: HoverContents::Scalar(comments[0].clone()),
187-
range: None,
188-
}),
189-
2.. => Some(Hover {
190-
contents: HoverContents::Array(comments),
182+
Box::pin(async move {
183+
Ok(result.map(|r| Hover {
191184
range: None,
192-
}),
193-
};
194-
195-
Box::pin(async move { Ok(response) })
185+
contents: HoverContents::Markup(r),
186+
}))
187+
})
196188
}
197189
fn completion(
198190
&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)