All files / src/services user-service.ts

100% Statements 37/37
100% Branches 5/5
100% Functions 1/1
100% Lines 37/37

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 381x 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,
  };
}