Add rules module: security and antipattern detection rules
Some checks failed
CI / test (push) Has been cancelled
CI / build (push) Has been cancelled

This commit is contained in:
2026-01-29 23:09:44 +00:00
parent 4ec376c6ff
commit a95d298ad8

57
src/rules/__init__.py Normal file
View File

@@ -0,0 +1,57 @@
"""Rule registry and loading functionality."""
from pathlib import Path
from typing import Optional
import yaml
class RuleRegistry:
"""Registry for analysis rules."""
def __init__(self):
self._rules = {}
self._enabled_by_default = set()
def register(self, rule_id: str, rule_config: dict, enabled: bool = True):
self._rules[rule_id] = rule_config
if enabled:
self._enabled_by_default.add(rule_id)
def get_rule(self, rule_id: str) -> Optional[dict]:
return self._rules.get(rule_id)
def is_enabled(self, rule_id: str, config: Optional[dict] = None) -> bool:
if config and "rules" in config:
rule_config = config["rules"].get(rule_id, {})
if "enabled" in rule_config:
return rule_config["enabled"]
return rule_id in self._enabled_by_default
def get_enabled_rules(self, config: Optional[dict] = None) -> list[str]:
enabled = []
for rule_id in self._rules:
if self.is_enabled(rule_id, config):
enabled.append(rule_id)
return enabled
def list_rules(self) -> list[str]:
return list(self._rules.keys())
def load_config(config_path: Optional[Path] = None) -> dict:
"""Load configuration from file."""
if config_path and config_path.exists():
with open(config_path) as f:
return yaml.safe_load(f) or {}
default_paths = [
Path.home() / ".aicoderc.yaml",
Path.cwd() / ".aicoderc.yaml",
]
for path in default_paths:
if path.exists():
with open(path) as f:
return yaml.safe_load(f) or {}
return {}