Initial upload: ErrorFix CLI with rule engine and pattern matching
Some checks failed
CI / test (push) Has been cancelled

This commit is contained in:
2026-02-01 03:56:17 +00:00
parent 857f935a95
commit 38c588b251

258
README.md
View File

@@ -1,3 +1,257 @@
# errorfix-cli # ErrorFix CLI
Offline CLI tool for error fix suggestions using pattern-matching rules 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<name>[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