MCPcopy Create free account
hub / github.com/PHPantom-dev/phpantom_lsp / hover_for_class_info

Method hover_for_class_info

src/hover/mod.rs:1363–1464  ·  view source on GitHub ↗

Build hover content for a class/interface/trait/enum.

(&self, cls: &ClassInfo, uri: &str, content: &str)

Source from the content-addressed store, hash-verified

1361
1362 /// Build hover content for a class/interface/trait/enum.
1363 pub(crate) fn hover_for_class_info(&self, cls: &ClassInfo, uri: &str, content: &str) -> Hover {
1364 let kind_str = match cls.kind {
1365 ClassLikeKind::Class => {
1366 if cls.is_abstract {
1367 "abstract class"
1368 } else if cls.is_final {
1369 "final class"
1370 } else {
1371 "class"
1372 }
1373 }
1374 ClassLikeKind::Interface => "interface",
1375 ClassLikeKind::Trait => "trait",
1376 ClassLikeKind::Enum => "enum",
1377 };
1378
1379 let mut extends_implements = String::new();
1380
1381 // For interfaces, `parent_class` is the first element of
1382 // `interfaces` (both come from the same `extends` clause),
1383 // so skip it to avoid duplicating the name.
1384 if cls.kind != ClassLikeKind::Interface
1385 && let Some(ref parent) = cls.parent_class
1386 {
1387 extends_implements.push_str(&format!(" extends {}", short_name(parent)));
1388 }
1389
1390 if !cls.interfaces.is_empty() {
1391 let keyword = if cls.kind == ClassLikeKind::Interface {
1392 "extends"
1393 } else {
1394 "implements"
1395 };
1396 let short_ifaces: Vec<&str> = cls.interfaces.iter().map(|i| short_name(i)).collect();
1397 extends_implements.push_str(&format!(" {} {}", keyword, short_ifaces.join(", ")));
1398 }
1399
1400 let signature = format!("{} {}{}", kind_str, cls.name, extends_implements);
1401 let ns_line = namespace_line(cls.file_namespace.as_deref());
1402
1403 let mut lines = Vec::new();
1404
1405 if let Some(desc) = extract_docblock_description(cls.class_docblock.as_deref()) {
1406 lines.push(desc);
1407 }
1408
1409 if let Some(ref msg) = cls.deprecation_message {
1410 lines.push(format_deprecation_line(msg));
1411 }
1412
1413 for url in &cls.links {
1414 lines.push(format!("[{}]({})", url, url));
1415 }
1416
1417 let resolved_see = self.resolve_see_refs(&cls.see_refs, uri, content);
1418 format_see_refs(&resolved_see, &cls.links, &mut lines);
1419
1420 // Show template parameters with variance and bounds.

Callers 2

resolve_classMethod · 0.80
hover_class_referenceMethod · 0.80

Calls 15

namespace_lineFunction · 0.85
format_deprecation_lineFunction · 0.85
format_see_refsFunction · 0.85
build_enum_case_bodyFunction · 0.85
build_trait_summary_bodyFunction · 0.85
make_hoverFunction · 0.85
iterMethod · 0.80
pushMethod · 0.80
resolve_see_refsMethod · 0.80
into_iterMethod · 0.80

Tested by

no test coverage detected