One import hop in a circular dependency: the file containing the import
and where that import statement sits.
edges[i] is the import IN path (the hop SOURCE, equal to the cycle’s
files[i]) that points to the NEXT file in the cycle
(files[(i + 1) % files.len()]); the target is not repeated here to keep
the wire compact. Enables a per-file diagnostic squiggly anchored under
the offending import rather than a single squiggly on the first file.
col is a 0-based BYTE column, matching the cycle’s top-level col;
converting it to a UTF-16 code-unit column for LSP clients is a tracked
follow-up shared with the existing field.