MCPcopy Create free account
hub / github.com/dylan-sutton-chavez/edge-python / resolve_bare

Method resolve_bare

compiler/src/main/resolver.rs:51–92  ·  view source on GitHub ↗
(&mut self, name: &str, start_dir: &str)

Source from the content-addressed store, hash-verified

49
50impl WasmHostResolver {
51 fn resolve_bare(&mut self, name: &str, start_dir: &str) -> Result<Resolved, String> {
52 let mut visited: FxHashSet<String> = FxHashSet::default();
53 let mut search_dir = start_dir.to_string();
54 let mut hops: u32 = 0;
55 loop {
56 if hops > MAX_PACKAGES_HOPS {
57 return Err(s!(
58 "packages.json walk-up exceeded ",
59 int MAX_PACKAGES_HOPS as i64,
60 " hops resolving '", str name, "'"));
61 }
62 hops += 1;
63
64 let mut hit: Option<(String, Option<String>, Option<String>)> = None;
65 for dir in walk_up_dirs(&search_dir) {
66 let m_spec = s!(str &dir, "packages.json");
67 if let Some((target, ext)) = self.lookup_in_manifest(&m_spec, name)? {
68 hit = Some((dir, target, ext));
69 break;
70 }
71 }
72 let Some((dir, target, ext)) = hit else {
73 return Err(s!("no packages.json above '", str start_dir, "' declares '", str name, "'"));
74 };
75 if let Some(target) = target {
76 let canonical = join_relative(&dir, &target);
77 return self.resolve_canonical(&canonical);
78 }
79 let m_spec = s!(str &dir, "packages.json");
80 if let Some(ext) = ext {
81 if !visited.insert(m_spec) {
82 return Err(s!("circular extends chain in packages.json"));
83 }
84 let mut next = join_relative(&dir, &ext);
85 if !next.ends_with('/') { next.push('/'); }
86 search_dir = next;
87 continue;
88 }
89 return Err(s!("alias '", str name, "' not declared in '", str &m_spec, "'\n", "help: declare it, add \"extends\": \"..\" to inherit, or use a quoted path",
90 ));
91 }
92 }
93
94 #[allow(clippy::type_complexity)]
95 fn lookup_in_manifest(&mut self, m_spec: &str, name: &str) -> Result<Option<(Option<String>, Option<String>)>, String> {

Callers 1

resolveMethod · 0.45

Calls 6

walk_up_dirsFunction · 0.85
join_relativeFunction · 0.85
lookup_in_manifestMethod · 0.80
insertMethod · 0.80
pushMethod · 0.80
resolve_canonicalMethod · 0.45

Tested by

no test coverage detected