All files / src/commands/review riskCommandHandler.js

100% Statements 45/45
100% Branches 18/18
100% Functions 1/1
100% Lines 45/45

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 39 40 41 42 43 44 45 463x 3x 16x 16x 6x 6x 6x 1x 1x 1x 5x 5x 5x 5x 5x 5x 5x 6x 6x 6x 6x 6x 6x 6x 6x 1x 6x 3x 3x 4x 4x 4x 4x 4x 4x 6x 1x 1x 1x 16x 16x 3x 3x 3x 3x  
const { getWorkspaceRoot, showWorkspaceRequiredError } = require("./shared");
 
function createAnalyzeRiskHandler({ vscodeApi, logger, prReviewService }) {
  return async () => {
    try {
      const workspaceRoot = getWorkspaceRoot(vscodeApi);
      if (!workspaceRoot) {
        showWorkspaceRequiredError(vscodeApi);
        return;
      }
 
      logger.info("Analizando riesgo...");
      vscodeApi.window.showInformationMessage(
        "Analizando riesgo con Copilot...",
      );
 
      const result = await prReviewService.analyzeRisk(workspaceRoot, false);
      const riskLevel = (result.riskLevel || "unknown").toUpperCase();
      const reasons = Array.isArray(result.reasons) ? result.reasons : [];
      const recommendations = Array.isArray(result.recommendations)
        ? result.recommendations
        : [];
      const message = `Riesgo: ${riskLevel}`;
 
      if (result.riskLevel === "critical" || result.riskLevel === "high") {
        vscodeApi.window.showWarningMessage(message);
      } else {
        vscodeApi.window.showInformationMessage(message);
      }
 
      logger.info(`\nNIVEL DE RIESGO: ${riskLevel}`);
      logger.info("\nRAZONES:");
      reasons.forEach((reason) => logger.info(`   - ${reason}`));
      logger.info("\nRECOMENDACIONES:");
      recommendations.forEach((rec) => logger.info(`   - ${rec}`));
    } catch (error) {
      vscodeApi.window.showErrorMessage(`Error: ${error.message}`);
      logger.error(`Error en analyzeRisk: ${error.message}`);
    }
  };
}
 
module.exports = {
  createAnalyzeRiskHandler,
};