73 lines
2.7 KiB
Python
73 lines
2.7 KiB
Python
from __future__ import annotations
|
|
|
|
import argparse
|
|
import json
|
|
from pathlib import Path
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
DEFAULT_INPUT = ROOT / "plugins" / "1c" / "metadata" / "examples" / "bsl-modules.example.json"
|
|
DEFAULT_OUTPUT = ROOT / "plugins" / "1c" / "rag" / "sources" / "bsl-modules.generated.md"
|
|
|
|
|
|
def module_to_markdown(module: dict) -> str:
|
|
lines = [
|
|
f"## Модуль: {module.get('module_id')}",
|
|
"",
|
|
f"Объект: {module.get('object_name')}",
|
|
f"Тип объекта: {module.get('object_kind', 'не указан')}",
|
|
f"Тип модуля: {module.get('module_type')}",
|
|
"",
|
|
]
|
|
procedures = module.get("procedures") or []
|
|
functions = module.get("functions") or []
|
|
if procedures:
|
|
lines.extend(["### Процедуры", ""])
|
|
for proc in procedures:
|
|
export = " Экспорт" if proc.get("export") else ""
|
|
params = ", ".join(proc.get("params") or [])
|
|
lines.append(f"- {proc.get('name')}({params}){export}")
|
|
lines.append("")
|
|
if functions:
|
|
lines.extend(["### Функции", ""])
|
|
for func in functions:
|
|
export = " Экспорт" if func.get("export") else ""
|
|
params = ", ".join(func.get("params") or [])
|
|
lines.append(f"- {func.get('name')}({params}){export}")
|
|
lines.append("")
|
|
refs = module.get("references") or []
|
|
if refs:
|
|
lines.extend(["### Ссылки", ""])
|
|
for ref in refs:
|
|
lines.append(f"- {ref}")
|
|
lines.append("")
|
|
lines.extend(["### Код", "", "```bsl", module.get("content") or "", "```"])
|
|
return "\n".join(lines)
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser(description="Convert 1C BSL module snapshot to Markdown RAG source.")
|
|
parser.add_argument("--input", type=Path, default=DEFAULT_INPUT)
|
|
parser.add_argument("--output", type=Path, default=DEFAULT_OUTPUT)
|
|
args = parser.parse_args()
|
|
with args.input.open("r", encoding="utf-8") as handle:
|
|
snapshot = json.load(handle)
|
|
sections = [
|
|
"# 1C BSL Module Snapshot",
|
|
"",
|
|
f"Источник: {(snapshot.get('source') or {}).get('name', 'unknown')}",
|
|
f"Дата снимка: {snapshot.get('created_at', 'unknown')}",
|
|
"",
|
|
]
|
|
for module in snapshot.get("modules") or []:
|
|
sections.append(module_to_markdown(module))
|
|
sections.append("")
|
|
args.output.parent.mkdir(parents=True, exist_ok=True)
|
|
args.output.write_text("\n".join(sections).strip() + "\n", encoding="utf-8")
|
|
print(f"Wrote BSL RAG source to {args.output}")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|