Add generate, report, and utils modules
This commit is contained in:
110
config_auditor/generate.py
Normal file
110
config_auditor/generate.py
Normal file
@@ -0,0 +1,110 @@
|
||||
from pathlib import Path
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
|
||||
class ConfigGenerator:
|
||||
TEMPLATES = {
|
||||
"node": {
|
||||
"name": "my-node-project",
|
||||
"version": "1.0.0",
|
||||
"description": "A Node.js project",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"start": "node index.js",
|
||||
"build": "echo \"No build step required\"",
|
||||
"lint": "eslint .",
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "MIT",
|
||||
"devDependencies": {},
|
||||
"dependencies": {},
|
||||
},
|
||||
"python": {
|
||||
"tool": {
|
||||
"poetry": {
|
||||
"name": "my-python-project",
|
||||
"version": "1.0.0",
|
||||
"description": "A Python project",
|
||||
"authors": [],
|
||||
"license": "MIT",
|
||||
},
|
||||
"pytest": {
|
||||
"testpaths": ["tests"],
|
||||
"python_files": ["test_*.py"],
|
||||
"python_classes": ["Test*"],
|
||||
"python_functions": ["test_*"],
|
||||
},
|
||||
},
|
||||
"build-system": {
|
||||
"requires": ["poetry-core>=1.0.0"],
|
||||
"build-backend": "poetry.core.masonry.api",
|
||||
},
|
||||
},
|
||||
"typescript": {
|
||||
"name": "my-ts-project",
|
||||
"version": "1.0.0",
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
"scripts": {
|
||||
"build": "tsc",
|
||||
"test": "jest",
|
||||
"lint": "eslint src --ext .ts",
|
||||
"dev": "ts-node src/index.ts",
|
||||
},
|
||||
"compilerOptions": {
|
||||
"target": "ES2020",
|
||||
"module": "commonjs",
|
||||
"lib": ["ES2020"],
|
||||
"outDir": "./dist",
|
||||
"rootDir": "./src",
|
||||
"strict": True,
|
||||
"esModuleInterop": True,
|
||||
"skipLibCheck": True,
|
||||
"forceConsistentCasingInFileNames": True,
|
||||
"declaration": True,
|
||||
"declarationMap": True,
|
||||
"sourceMap": True,
|
||||
},
|
||||
"include": ["src/**/*"],
|
||||
"exclude": ["node_modules", "dist"],
|
||||
},
|
||||
}
|
||||
|
||||
def detect_project_type(self, path: Path) -> Optional[str]:
|
||||
for item in path.iterdir():
|
||||
if item.is_file():
|
||||
if item.name == "package.json":
|
||||
return "node"
|
||||
elif item.name == "pyproject.toml":
|
||||
return "python"
|
||||
elif item.name == "tsconfig.json":
|
||||
return "typescript"
|
||||
elif item.name == "requirements.txt":
|
||||
return "python"
|
||||
elif item.name == "Cargo.toml":
|
||||
return "rust"
|
||||
|
||||
if (path / "src").exists() and (path / "src").is_dir():
|
||||
for item in (path / "src").iterdir():
|
||||
if item.suffix == ".ts":
|
||||
return "typescript"
|
||||
elif item.suffix == ".py":
|
||||
return "python"
|
||||
|
||||
return None
|
||||
|
||||
def generate_from_template(self, template_type: str, path: Path) -> Dict[str, Any]:
|
||||
template = self.TEMPLATES.get(template_type)
|
||||
if template:
|
||||
return template.copy()
|
||||
|
||||
raise ValueError(f"Unknown template type: {template_type}")
|
||||
|
||||
def analyze_project(self, path: Path) -> Dict[str, Any]:
|
||||
project_type = self.detect_project_type(path)
|
||||
return {
|
||||
"type": project_type,
|
||||
"files": [f.name for f in path.rglob("*") if f.is_file()],
|
||||
}
|
||||
Reference in New Issue
Block a user