ai_upgrade_assistant-0.2.0-alpha2/src/Service/AiPromptGenerator.php

src/Service/AiPromptGenerator.php
<?php

namespace Drupal\ai_upgrade_assistant\Service;

/**
 * Service for generating AI prompts for code analysis.
 */
class AiPromptGenerator {

  /**
   * Generates a prompt for analyzing deprecated code.
   *
   * @param array $deprecated_items
   *   Array of deprecated items found in the code.
   * @param string $file_path
   *   The file path being analyzed.
   * @param string $module_name
   *   The module name.
   *
   * @return string
   *   The generated prompt.
   */
  public function generateDeprecationAnalysisPrompt(array $deprecated_items, string $file_path, string $module_name) {
    $prompt = "Analyze the following deprecated code items found in {$file_path} of the {$module_name} module:\n\n";

    foreach ($deprecated_items as $item) {
      $prompt .= "- {$item['type']}: {$item['name']}\n";
      $prompt .= "  Line: {$item['line']}\n";
      $prompt .= "  Replacement: {$item['replacement']}\n";
      $prompt .= "  Deprecated since: {$item['version']}\n\n";
    }

    $prompt .= "\nPlease provide:\n";
    $prompt .= "1. A detailed explanation of why each item is deprecated\n";
    $prompt .= "2. Step-by-step instructions for updating each deprecated item\n";
    $prompt .= "3. Code examples showing the old and new implementations\n";
    $prompt .= "4. Any potential side effects or considerations when updating\n";
    $prompt .= "5. Additional recommendations for improving the code\n";

    return $prompt;
  }

  /**
   * Generates a prompt for analyzing hook implementations.
   *
   * @param array $hooks
   *   Array of hooks found in the code.
   * @param string $module_name
   *   The module name.
   *
   * @return string
   *   The generated prompt.
   */
  public function generateHookAnalysisPrompt(array $hooks, string $module_name) {
    $prompt = "Analyze the following hook implementations in the {$module_name} module:\n\n";

    foreach ($hooks as $hook) {
      $prompt .= "- Hook: {$hook['name']}\n";
      $prompt .= "  File: {$hook['file']}\n";
      $prompt .= "  Line: {$hook['line']}\n";
      $prompt .= "  Parameters: " . implode(', ', $hook['params']) . "\n\n";
    }

    $prompt .= "\nPlease provide:\n";
    $prompt .= "1. An analysis of each hook's purpose and typical use cases\n";
    $prompt .= "2. Recommendations for improving the implementations\n";
    $prompt .= "3. Potential performance implications\n";
    $prompt .= "4. Security considerations\n";
    $prompt .= "5. Best practices for hook implementations\n";
    $prompt .= "6. Suggestions for alternative approaches if applicable\n";

    return $prompt;
  }

  /**
   * Generates a prompt for analyzing class usage.
   *
   * @param array $class_usage
   *   Array of class usage information.
   *
   * @return string
   *   The generated prompt.
   */
  public function generateClassAnalysisPrompt(array $class_usage) {
    $prompt = "Analyze the following class usage patterns:\n\n";

    foreach ($class_usage as $usage) {
      $prompt .= "- Type: {$usage['type']}\n";
      if (isset($usage['class'])) {
        $prompt .= "  Class: {$usage['class']}\n";
      }
      if (isset($usage['interface'])) {
        $prompt .= "  Interface: {$usage['interface']}\n";
      }
      $prompt .= "  File: {$usage['file']}\n";
      $prompt .= "  Line: {$usage['line']}\n\n";
    }

    $prompt .= "\nPlease provide:\n";
    $prompt .= "1. An analysis of the class architecture and design patterns\n";
    $prompt .= "2. Recommendations for improving class organization\n";
    $prompt .= "3. Potential dependency injection improvements\n";
    $prompt .= "4. Interface compliance analysis\n";
    $prompt .= "5. Suggestions for better abstraction if applicable\n";
    $prompt .= "6. Performance considerations\n";

    return $prompt;
  }

  /**
   * Generates a prompt for patch generation.
   *
   * @param array $analysis_results
   *   The complete analysis results.
   * @param string $module_name
   *   The module name.
   *
   * @return string
   *   The generated prompt.
   */
  public function generatePatchPrompt(array $analysis_results, string $module_name) {
    $prompt = "Generate a patch for the {$module_name} module based on the following analysis:\n\n";

    if (!empty($analysis_results['deprecated_items'])) {
      $prompt .= "Deprecated Items to Update:\n";
      foreach ($analysis_results['deprecated_items'] as $item) {
        $prompt .= "- {$item['type']}: {$item['name']} -> {$item['replacement']}\n";
        $prompt .= "  File: {$item['file']}, Line: {$item['line']}\n\n";
      }
    }

    $prompt .= "\nRequirements for the patch:\n";
    $prompt .= "1. Follow Drupal coding standards\n";
    $prompt .= "2. Maintain backward compatibility where possible\n";
    $prompt .= "3. Include appropriate documentation updates\n";
    $prompt .= "4. Add upgrade path notes if needed\n";
    $prompt .= "5. Consider performance implications\n";
    $prompt .= "6. Follow security best practices\n";

    return $prompt;
  }

  /**
   * Generates a prompt for analyzing potential security issues.
   *
   * @param array $analysis_results
   *   The complete analysis results.
   *
   * @return string
   *   The generated prompt.
   */
  public function generateSecurityAnalysisPrompt(array $analysis_results) {
    $prompt = "Perform a security analysis of the following code patterns:\n\n";

    // Analyze class usage for potential security issues
    if (!empty($analysis_results['analysis']['class_usage'])) {
      $prompt .= "Class Usage Patterns:\n";
      foreach ($analysis_results['analysis']['class_usage'] as $usage) {
        $prompt .= "- {$usage['type']}: " . ($usage['class'] ?? $usage['interface']) . "\n";
        $prompt .= "  File: {$usage['file']}, Line: {$usage['line']}\n\n";
      }
    }

    // Analyze hooks for security considerations
    if (!empty($analysis_results['analysis']['hooks'])) {
      $prompt .= "Hook Implementations:\n";
      foreach ($analysis_results['analysis']['hooks'] as $hook) {
        $prompt .= "- {$hook['name']}\n";
        $prompt .= "  Parameters: " . implode(', ', $hook['params']) . "\n\n";
      }
    }

    $prompt .= "\nPlease analyze for:\n";
    $prompt .= "1. Potential SQL injection vulnerabilities\n";
    $prompt .= "2. Cross-site scripting (XSS) risks\n";
    $prompt .= "3. Access control issues\n";
    $prompt .= "4. Input validation concerns\n";
    $prompt .= "5. Authentication and authorization gaps\n";
    $prompt .= "6. Data sanitization requirements\n";
    $prompt .= "7. Security implications of deprecated code usage\n";

    return $prompt;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc