Сразу важное: сам Голем знает все языки. Спрашивайте про JS, Go, Rust — ответит, напишет код, найдёт баги в сниппетах.
Но автоматический анализ целых проектов (ZIP, репозитории) пока только для Python. Почему? Потому что кормить код сразу в LLM — тупо. Нейросеть галлюцинирует, не видит зависимостей и жрёт токены.
Правильный путь: сначала прогнать код через родные линтеры и сканеры языка. Для
Python это Bandit и Ruff. Для JS — ESLint. Для Go — golangci-lint.Почему я сам не пилю под все языки?
Потому что у меня ещё дохуя работы по Голему. Сейчас занимаюсь системой /
fix — автоисправлением багов и уязвимостей. Дальше автодеплой, интеграция с GitHub, самоэволюция, восстание машин, захват мира, полёт в космос.... На всё рук не хватает. Но если есть желающие по участвовать в разработке Голема, милости просим!))Как помочь:
Я сделал модульную архитектуру. Чтобы добавить новый язык, нужно написать один файл на
Python. Ниже шаблон и инструкция.# core/langs/ТВОЙ_ЯЗЫК.py
import asyncio
import json
from typing import Dict, Any
from core.langs.base import BaseLanguageAnalyzer
class ТВОЙ_ЯЗЫКAnalyzer(BaseLanguageAnalyzer):
name = "ТВОЙ_ЯЗЫК" # JavaScript, Go, Rust...
async def analyze(self, project_dir: str) -> Dict[str, Any]:
results = {}
total_issues = {}
# Запуск линтера
lint_result = await self._run_command([
"линтер", project_dir, "--format", "json"
])
lint_issues = []
if lint_result.get("stdout"):
try:
data = json.loads(lint_result["stdout"])
for item in data:
lint_issues.append({
"file": item.get("filePath"),
"line": item.get("line"),
"message": item.get("message"),
"rule": item.get("ruleId")
})
except:
pass
results["linter"] = {"results": lint_issues, "error": None}
total_issues["linter"] = len(lint_issues)
return {
"language": self.name,
**results,
"total_issues": total_issues
}
async def _run_command(self, cmd: list) -> Dict[str, Any]:
proc = await asyncio.create_subprocess_exec(
*cmd,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE
)
stdout, stderr = await proc.communicate()
return {
"stdout": stdout.decode('utf-8', errors='ignore'),
"stderr": stderr.decode('utf-8', errors='ignore'),
"returncode": proc.returncode
}
def get_context_for_llm(self, results: Dict[str, Any]) -> str:
total = results.get("total_issues", {})
return f"{self.name}-проект. Найдено проблем: {sum(total.values())}"```
Что заменить:
Что я делаю:
Пиши в личку @zero_tolerance91 или в чат @sandbox_hardcore.
#Голем #OpenSource
Please open Telegram to view this post
VIEW IN TELEGRAM