Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x | import * as vscode from "vscode";
import { LogData, LogEvent } from "../api/types/event";
 
/**
 * Calculates user progress statistics based on log data.
 *
 * Analyzes how many suggestions the user accepted, how many of those had bugs,
 * and computes the percentage of accepted suggestions that contained bugs.
 *
 * @param logs - An array of user interaction logs (`LogData`).
 * @returns An object containing:
 *   - `totalAccepted`: The number of suggestions accepted by the user.
 *   - `totalWithBugs`: The number of accepted suggestions that had bugs.
 *   - `percentageWithBugs`: The percentage of accepted suggestions that contained bugs.
 */
export function calculateUserProgress(logs: LogData[]): {
  totalAccepted: number;
  totalWithBugs: number;
  percentageWithBugs: number;
} {
  // Filter logs for USER_ACCEPT events
  const acceptedLogs = logs.filter((log) => log.event === LogEvent.USER_ACCEPT);
  const totalAccepted = acceptedLogs.length;
  const totalWithBugs = acceptedLogs.filter(
    (log) => log.metadata.has_bug === true
  ).length;
 
  // Calculate the percentage of accepted suggestions with bugs
  const percentageWithBugs =
    totalAccepted > 0 ? (totalWithBugs / totalAccepted) * 100 : 0;
 
  return {
    totalAccepted,
    totalWithBugs,
    percentageWithBugs,
  };
}
  |