File size: 2,336 Bytes
5a3532a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# -*- coding: utf-8 -*-
"""Преобразования кода — три режима в одном инструменте.

Запуск:
  python code_utils.py docs <файл.py>              — докстринги + README (№3)
  python code_utils.py refactor <файл.py>          — рефакторинг/чистка (№4)
  python code_utils.py translate <файл.py> <язык>  — перевод кода (№5)

Языки перевода: python, javascript, typescript, go, rust, java, cpp, csharp.
"""
import sys

from brain import pick, generate


def main():
    args = sys.argv[1:]
    if len(args) < 2:
        print("usage: code_utils.py <docs|refactor|translate> <файл> [язык]")
        sys.exit(2)
    mode, path = args[0], args[1]
    backend = pick()
    try:
        code = open(path, encoding="utf-8").read()
    except Exception as e:
        print(f"не прочитан: {e}")
        sys.exit(1)

    if mode == "docs":
        prompt = (f"Сгенерируй документацию для этого кода: добавь докстринги и "
                  f"комментарии на русском, затем короткий README-блок (что делает, "
                  f"как запустить). Верни код с докстрингами, потом README.\n\n{code}")
    elif mode == "refactor":
        prompt = (f"Отрефактори этот код: понятные имена, упрощение, выделение "
                  f"повторяющегося в функции, чистота. Поведение сохрани. Верни ТОЛЬКО "
                  f"исправленный код, без пояснений и без ```.\n\n{code}")
    elif mode == "translate":
        lang = args[2] if len(args) > 2 else "javascript"
        prompt = (f"Переведи этот код на {lang}, сохранив логику и структуру. Верни "
                  f"ТОЛЬКО переведённый код, без пояснений и без ```.\n\n{code}")
    else:
        print("неизвестный режим: docs | refactor | translate")
        sys.exit(2)

    print(generate(backend, [{"role": "user", "content": prompt}], 2048))


if __name__ == "__main__":
    main()