resolveRelative handles ./foo and ../bar style imports
(imp, fromDir string, idx *fileIndex)
| 226 | |
| 227 | // resolveRelative handles ./foo and ../bar style imports |
| 228 | func resolveRelative(imp, fromDir string, idx *fileIndex) []string { |
| 229 | // Count parent directory levels |
| 230 | levels := 0 |
| 231 | rest := imp |
| 232 | for strings.HasPrefix(rest, "../") { |
| 233 | levels++ |
| 234 | rest = strings.TrimPrefix(rest, "../") |
| 235 | } |
| 236 | rest = strings.TrimPrefix(rest, "./") |
| 237 | |
| 238 | // Navigate up from fromDir |
| 239 | targetDir := fromDir |
| 240 | for i := 0; i < levels; i++ { |
| 241 | targetDir = filepath.Dir(targetDir) |
| 242 | if targetDir == "." { |
| 243 | targetDir = "" |
| 244 | } |
| 245 | } |
| 246 | |
| 247 | // Build candidate path |
| 248 | candidate := rest |
| 249 | if targetDir != "" { |
| 250 | candidate = filepath.Join(targetDir, rest) |
| 251 | } |
| 252 | |
| 253 | return tryExactMatch(candidate, idx) |
| 254 | } |
| 255 | |
| 256 | // tryExactMatch looks for exact path matches with common extensions. |
| 257 | // Extension list derived from the canonical scanner registry. |