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

Method init_monorepo

src/server.rs:1638–1786  ·  view source on GitHub ↗

Initialize a monorepo workspace (no root `composer.json`, but subprojects with their own `composer.json` were discovered). Each subproject is processed through the Composer pipeline (PSR-4, classmap, autoload files, vendor packages). After all subprojects are processed, a gitignore-aware full-scan picks up loose PHP files outside any subproject directory.

(
        &self,
        root: &std::path::Path,
        subprojects: &[(PathBuf, String)],
        php_version: crate::types::PhpVersion,
        progress_token: Option<&NumberOrString>,
    )

Source from the content-addressed store, hash-verified

1636 /// are processed, a gitignore-aware full-scan picks up loose PHP files
1637 /// outside any subproject directory.
1638 async fn init_monorepo(
1639 &self,
1640 root: &std::path::Path,
1641 subprojects: &[(PathBuf, String)],
1642 php_version: crate::types::PhpVersion,
1643 progress_token: Option<&NumberOrString>,
1644 ) {
1645 // Log the discovered subprojects.
1646 let sub_list: Vec<String> = subprojects
1647 .iter()
1648 .filter_map(|(p, _)| {
1649 p.strip_prefix(root)
1650 .ok()
1651 .map(|r| format!(" {}", r.display()))
1652 })
1653 .collect();
1654 self.log(
1655 MessageType::INFO,
1656 format!(
1657 "PHPantom: No root composer.json. Found {} Composer project(s):\n{}",
1658 subprojects.len(),
1659 sub_list.join("\n")
1660 ),
1661 )
1662 .await;
1663
1664 // Collect subproject root paths for the skip set.
1665 let mut skip_dirs: HashSet<PathBuf> = HashSet::new();
1666 let sub_count = subprojects.len();
1667
1668 for (sub_idx, (sub_root, vendor_dir)) in subprojects.iter().enumerate() {
1669 // Report per-subproject progress. Reserve 10..80 for the
1670 // subproject loop, leaving 80..95 for the loose-file scan.
1671 if let Some(tok) = progress_token {
1672 let pct = 10 + (sub_idx as u32 * 70) / sub_count.max(1) as u32;
1673 let label = sub_root
1674 .strip_prefix(root)
1675 .unwrap_or(sub_root)
1676 .display()
1677 .to_string();
1678 self.progress_report(
1679 tok,
1680 pct,
1681 Some(format!(
1682 "Indexing subproject {} / {}: {}",
1683 sub_idx + 1,
1684 sub_count,
1685 label
1686 )),
1687 )
1688 .await;
1689 }
1690 skip_dirs.insert(sub_root.clone());
1691
1692 // ── PSR-4 mappings ──────────────────────────────────────
1693 let (mappings, _) = composer::parse_composer_json(sub_root);
1694
1695 // Resolve base_path values to absolute paths so that

Callers 1

initializedMethod · 0.80

Calls 15

parse_composer_jsonFunction · 0.85
normalise_pathFunction · 0.85
parse_autoload_classmapFunction · 0.85
path_to_uriFunction · 0.85
iterMethod · 0.80
logMethod · 0.80
displayMethod · 0.80
progress_reportMethod · 0.80
cloneMethod · 0.80
into_iterMethod · 0.80

Tested by

no test coverage detected