From 38c588b251e10d9e0f0cdeebecf33e09b4e21c07 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Sun, 1 Feb 2026 03:56:17 +0000 Subject: [PATCH] Initial upload: ErrorFix CLI with rule engine and pattern matching --- README.md | 258 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 256 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 84c8129..5e6b6cf 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,257 @@ -# errorfix-cli +# ErrorFix CLI -Offline CLI tool for error fix suggestions using pattern-matching rules \ No newline at end of file +A CLI tool that takes error output from compilers, linters, or build tools and generates actionable fix suggestions using a pattern-matching rule system. Works completely offline with extensible YAML/JSON rule definitions for different languages and tools. + +## Features + +- **Pattern-based fixes**: Uses regex patterns to match error messages and suggest fixes +- **Multi-language support**: Python, JavaScript, TypeScript, and more +- **Extensible rules**: Add custom YAML/JSON rules for your specific errors +- **Plugin system**: Load community rule packages via entry points +- **Multiple output formats**: Text, JSON, or structured output +- **Pipeline integration**: Works with stdin/stdout for CI/CD integration +- **Offline operation**: No network calls required + +## Installation + +```bash +pip install errorfix-cli +``` + +Or install from source: + +```bash +pip install -e . +``` + +## Usage + +### Basic usage with stdin + +```bash +echo "NameError: name 'foo' is not defined" | errorfix fix +``` + +### With custom rules + +```bash +errorfix fix -r /path/to/rules "Your error message here" +``` + +### Specify output format + +```bash +errorfix fix -f json "TypeError: unsupported operand type" +``` + +### Filter by language + +```bash +errorfix fix -l python "SyntaxError: invalid syntax" +``` + +## Commands + +### fix + +Analyze error text and suggest fixes. + +```bash +errorfix fix [OPTIONS] [INPUT_FILE] + +Options: + -f, --output-format [text|json|structured] + Output format (default: text) + -l, --language TEXT Filter rules by language + -t, --tool TEXT Filter rules by tool + --limit INTEGER Limit number of matches + --no-color Disable colored output +``` + +### plugins + +List loaded plugins. + +```bash +errorfix plugins +``` + +### check + +Check loaded rules from specified paths. + +```bash +errorfix check -r /path/to/rules +``` + +## Configuration + +### Environment Variables + +- `ERRORFIX_RULES_PATH`: Custom path to rule directory (default: `rules/`) + +### Rule Files + +Rules are defined in YAML or JSON format: + +```yaml +- id: python-name-error + name: "Python Name Error" + pattern: "NameError: name '(?P[a-zA-Z_][a-zA-Z0-9_]*)' is not defined" + fix: "Define '{name}' before using it" + description: "A name is not defined" + severity: error + language: python + tool: python + tags: [name-error, undefined] + priority: 9 +``` + +### Rule Fields + +| Field | Required | Description | +|-------|----------|-------------| +| `id` | Yes | Unique identifier for the rule | +| `name` | Yes | Human-readable name | +| `pattern` | Yes | Regex pattern to match error messages | +| `fix` | Yes | Fix suggestion (can use `{variable}` for captured groups) | +| `description` | Yes | Description of the error | +| `severity` | No | `error`, `warning`, `info`, or `suggestion` (default: `error`) | +| `language` | No | Programming language (e.g., `python`, `javascript`) | +| `tool` | No | Tool that produced the error (e.g., `python`, `node`) | +| `tags` | No | List of tags for categorization | +| `priority` | No | Priority for matching order (default: 0) | + +## Plugins + +Create a plugin by defining an entry point: + +```python +# my_plugin.py +from errorfix.plugins import Plugin + +class MyPlugin(Plugin): + @property + def name(self) -> str: + return "my-plugin" + + @property + def version(self) -> str: + return "1.0.0" + + @property + def description(self) -> str: + return "My custom error rules" + + def load_rules(self) -> list: + return [ + { + 'id': 'custom-error', + 'name': 'Custom Error', + 'pattern': 'CustomError: .*', + 'fix': 'Fix the custom error', + 'description': 'Custom error rule', + } + ] + +def register(): + return MyPlugin() +``` + +Add to your `pyproject.toml`: + +```toml +[project.entry-points] +errorfix.plugins = "my_plugin:register" +``` + +## Examples + +### Python Error + +```bash +$ echo "ModuleNotFoundError: No module named 'requests'" | errorfix fix +Fix #1: Python Import Error +-------------------------------------------------- +Rule ID: python-import-error +Description: A module could not be found +Severity: error +Language: python + +Matched: +ModuleNotFoundError: No module named 'requests' + +Suggested Fix: +Install the module 'requests' using pip: pip install requests +``` + +### Git Error + +```bash +$ echo "CONFLICT (content): Merge conflict in src/main.py" | errorfix fix -r rules/tools +Fix #1: Git Merge Conflict +-------------------------------------------------- +Rule ID: git-merge-conflict +Description: A merge conflict was detected +Severity: error +Tool: git + +Matched: +CONFLICT (content): Merge conflict in src/main.py + +Suggested Fix: +Open src/main.py and resolve the merge conflict. Remove the conflict markers... +``` + +### JSON Output + +```bash +$ echo "TypeError: unsupported operand type" | errorfix fix -f json +{ + "input_text": "TypeError: unsupported operand type", + "match_count": 1, + "matches": [ + { + "rule": { + "id": "python-type-error", + "name": "Python Type Error", + "description": "An operation was performed on incompatible types", + "severity": "error", + "language": "python", + "tool": "python", + "tags": ["type", "type-error"] + }, + "matched_text": "TypeError: unsupported operand type", + "suggested_fix": "Check the types of your operands." + } + ] +} +``` + +## Built-in Rules + +The tool includes rules for: + +- **Python**: SyntaxError, NameError, TypeError, ImportError, AttributeError, IndexError, KeyError, and more +- **JavaScript/TypeScript**: ReferenceError, TypeError, SyntaxError, ModuleNotFound +- **Git**: Merge conflicts, repository errors, remote errors +- **Docker**: Container conflicts, image not found +- **Make**: Target not found, command not found +- **NPM**: Package not found, missing script + +## Development + +```bash +# Install development dependencies +pip install -e ".[dev]" + +# Run tests +pytest tests/ -v + +# Run tests with coverage +pytest tests/ --cov=errorfix +``` + +## License + +MIT