Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/rust-analyzer/src/to_proto.rs33
1 files changed, 31 insertions, 2 deletions
diff --git a/crates/rust-analyzer/src/to_proto.rs b/crates/rust-analyzer/src/to_proto.rs
index 8a9e947ded..648bc995ad 100644
--- a/crates/rust-analyzer/src/to_proto.rs
+++ b/crates/rust-analyzer/src/to_proto.rs
@@ -410,7 +410,7 @@ pub(crate) fn signature_help(
let documentation = call_info.doc.filter(|_| config.docs).map(|doc| {
lsp_types::Documentation::MarkupContent(lsp_types::MarkupContent {
kind: lsp_types::MarkupKind::Markdown,
- value: doc,
+ value: crate::markdown::format_docs(&doc),
})
});
@@ -1410,7 +1410,8 @@ pub(crate) fn rename_error(err: RenameError) -> crate::LspError {
#[cfg(test)]
mod tests {
- use ide::Analysis;
+ use ide::{Analysis, FilePosition};
+ use test_utils::extract_offset;
use triomphe::Arc;
use super::*;
@@ -1451,6 +1452,34 @@ fn main() {
}
}
+ #[test]
+ fn calling_function_with_ignored_code_in_signature() {
+ let text = r#"
+fn foo() {
+ bar($0);
+}
+/// ```
+/// # use crate::bar;
+/// bar(5);
+/// ```
+fn bar(_: usize) {}
+"#;
+
+ let (offset, text) = extract_offset(text);
+ let (analysis, file_id) = Analysis::from_single_file(text);
+ let help = signature_help(
+ analysis.signature_help(FilePosition { file_id, offset }).unwrap().unwrap(),
+ CallInfoConfig { params_only: false, docs: true },
+ false,
+ );
+ let docs = match &help.signatures[help.active_signature.unwrap() as usize].documentation {
+ Some(lsp_types::Documentation::MarkupContent(content)) => &content.value,
+ _ => panic!("documentation contains markup"),
+ };
+ assert!(docs.contains("bar(5)"));
+ assert!(!docs.contains("use crate::bar"));
+ }
+
// `Url` is not able to parse windows paths on unix machines.
#[test]
#[cfg(target_os = "windows")]