import type { LineAnnotation, SelectedLineRange } from "@pierre/diffs"; export interface FileCommentAnnotationEntry { id: string; kind: "draft" | "comment"; startLine: number; endLine: number; text: string; } export interface FileCommentAnnotationGroup { entries: FileCommentAnnotationEntry[]; } export type FileCommentLineAnnotation = LineAnnotation; let fileCommentSequence = 0; export function nextFileCommentId(): string { fileCommentSequence += 1; return `file-comment-${Date.now()}-${fileCommentSequence}`; } export function normalizeFileCommentRange(range: SelectedLineRange): { startLine: number; endLine: number; } { return { startLine: Math.min(range.start, range.end), endLine: Math.max(range.start, range.end), }; } export function formatFileCommentRange(startLine: number, endLine: number): string { return startLine === endLine ? `L${startLine}` : `L${startLine} to L${endLine}`; } export function remapFileCommentAnnotations( annotations: ReadonlyArray, ): FileCommentLineAnnotation[] { return annotations.map((annotation) => ({ ...annotation, metadata: { entries: annotation.metadata.entries.map((entry) => { const lineCount = entry.endLine - entry.startLine; return { ...entry, endLine: annotation.lineNumber, startLine: Math.max(1, annotation.lineNumber - lineCount), }; }), }, })); }