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<FileCommentAnnotationGroup>; 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>,): 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), }; }), }, }));}
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<FileCommentAnnotationGroup>;
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>,
): 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),
};
}),
},
}));
}