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

Function check_needs_update

src/code_actions/update_docblock.rs:569–723  ·  view source on GitHub ↗

Check whether the docblock needs updating.

(
    info: &FunctionWithDocblock,
    content: &str,
    local_classes: &[Arc<ClassInfo>],
    class_loader: &dyn Fn(&str) -> Option<Arc<ClassInfo>>,
    function_loader: FunctionLoader<'_>,
    use_

Source from the content-addressed store, hash-verified

567
568/// Check whether the docblock needs updating.
569fn check_needs_update(
570 info: &FunctionWithDocblock,
571 content: &str,
572 local_classes: &[Arc<ClassInfo>],
573 class_loader: &dyn Fn(&str) -> Option<Arc<ClassInfo>>,
574 function_loader: FunctionLoader<'_>,
575 use_map: &HashMap<String, String>,
576 file_namespace: &Option<String>,
577) -> bool {
578 // Build a map of existing doc param names.
579 let doc_param_names: Vec<&str> = info
580 .doc_params
581 .iter()
582 .map(|p| {
583 let n = p.name.as_str();
584 n.strip_prefix("...").unwrap_or(n)
585 })
586 .collect();
587
588 let sig_param_names: Vec<String> = info.sig_params.iter().map(|p| p.name.clone()).collect();
589
590 // When the docblock already has at least one @param tag the user has
591 // opted-in to documenting parameters, so every signature param is
592 // relevant. When the docblock has *zero* @param tags we only consider
593 // params that need enrichment (matching generate-docblock behaviour).
594 let has_any_doc_params = !doc_param_names.is_empty();
595
596 if has_any_doc_params {
597 // Check for missing, extra, or reordered params.
598 if doc_param_names.len() != sig_param_names.len() {
599 return true;
600 }
601 for (doc_name, sig_name) in doc_param_names.iter().zip(sig_param_names.iter()) {
602 if *doc_name != sig_name.as_str() {
603 return true;
604 }
605 }
606 } else {
607 // No @param tags at all — only flag if a param needs enrichment.
608 let needs_enrichment = info
609 .sig_params
610 .iter()
611 .any(|sp| enrichment_plain(sp.type_hint.as_ref(), class_loader).is_some());
612 if needs_enrichment {
613 return true;
614 }
615 }
616
617 // Check for type contradictions in @param tags.
618 for sig_param in &info.sig_params {
619 if let Some(native_type) = &sig_param.type_hint
620 && let Some(doc_param) = info.doc_params.iter().find(|dp| {
621 let n = dp.name.as_str();
622 let n = n.strip_prefix("...").unwrap_or(n);
623 n == sig_param.name
624 })
625 && is_type_contradiction(&doc_param.type_parsed, native_type)
626 {

Callers 1

Calls 15

enrichment_plainFunction · 0.85
is_type_contradictionFunction · 0.85
enrichment_plain_typedFunction · 0.85
enrichment_return_typeFunction · 0.85
resolve_type_name_to_fqnFunction · 0.85
iterMethod · 0.80
as_strMethod · 0.80
cloneMethod · 0.80
has_type_structureMethod · 0.80
equivalentMethod · 0.80
is_voidMethod · 0.80

Tested by

no test coverage detected