From 011ef6dc3c9619994ebf15cf59598fc702a8da7d Mon Sep 17 00:00:00 2001 From: Matt Stavola Date: Sun, 12 Oct 2025 02:31:55 -0400 Subject: [PATCH] Fix import reference codegen --- mlf-codegen/src/lib.rs | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/mlf-codegen/src/lib.rs b/mlf-codegen/src/lib.rs index 501fa94..192e5e9 100644 --- a/mlf-codegen/src/lib.rs +++ b/mlf-codegen/src/lib.rs @@ -622,13 +622,36 @@ fn generate_type_json(ty: &Type, usage_counts: &HashMap, workspac }) } } else if path.segments.len() == 1 { - // Couldn't resolve namespace - fall back to heuristic - // Single segment likely means local reference + // Couldn't resolve namespace - check if it's an imported type let name = &path.segments[0].name; - json!({ - "type": "ref", - "ref": format!("#{}", name) - }) + let imports = workspace.get_imports(current_namespace); + + // Look for this name in imports + if let Some((_local_name, original_path)) = imports.iter().find(|(local, _)| local == name) { + // Build the full namespace#type reference from the import path + // original_path is like ["com", "atproto", "label", "defs", "label"] + // We want "com.atproto.label.defs#label" + if original_path.len() > 1 { + let namespace = original_path[..original_path.len() - 1].join("."); + let type_name = original_path.last().unwrap(); + json!({ + "type": "ref", + "ref": format!("{}#{}", namespace, type_name) + }) + } else { + // Fallback: single-segment import (shouldn't happen but handle it) + json!({ + "type": "ref", + "ref": format!("#{}", name) + }) + } + } else { + // Not an import - assume local reference + json!({ + "type": "ref", + "ref": format!("#{}", name) + }) + } } else { // Multi-segment path ref - use as-is let namespace = path.segments[..path.segments.len()-1] -- 2.51.2