Suggest a fix for an error. Args: error_type: Type of error error_message: Full error message Returns: Suggested fix or None
(self, error_type: str, error_message: str)
| 283 | return results[:limit] |
| 284 | |
| 285 | def suggest_fix(self, error_type: str, error_message: str) -> Optional[str]: |
| 286 | """ |
| 287 | Suggest a fix for an error. |
| 288 | |
| 289 | Args: |
| 290 | error_type: Type of error |
| 291 | error_message: Full error message |
| 292 | |
| 293 | Returns: |
| 294 | Suggested fix or None |
| 295 | """ |
| 296 | # First, check learned fixes |
| 297 | similar = self.find_similar_errors(error_type, error_message, limit=3) |
| 298 | for pattern, score in similar: |
| 299 | if pattern.success and pattern.fix: |
| 300 | info(f"Using learned fix (similarity: {score:.2f})") |
| 301 | return pattern.fix |
| 302 | |
| 303 | # Fallback: use fix patterns |
| 304 | category = self.ERROR_CATEGORIES.get(error_type, "unknown") |
| 305 | if category in self.FIX_PATTERNS: |
| 306 | for err_pattern, fix_template in self.FIX_PATTERNS[category]: |
| 307 | if err_pattern in error_type or err_pattern in error_message: |
| 308 | # Extract context for template |
| 309 | context = { |
| 310 | "module": self._extract_module(error_message), |
| 311 | "line": self._extract_line(error_message), |
| 312 | } |
| 313 | return fix_template.format(**context) |
| 314 | |
| 315 | return None |
| 316 | |
| 317 | def _extract_module(self, error_message: str) -> str: |
| 318 | """Extract module name from error message.""" |