Итак, я навайбкодил себе синтаксический анализ кода Kotlin
У меня за последние два дня произошёл крутой AI-момент. Есть у меня одна CLI-тулза, которая ищет тесты на проекте. Ищет она их тупо, пробегаясь по всем файлам. Заглядываем в файл, пробегаемся по всем методам и вытаскиваем все, у кого есть аннотация "Test" и "AllureID".
Для задачи можно было тупо использовать regex. Однако там ещё есть хитрая логика exclude тестов по специальной аннотации, которая может быть как на методе, так и на классе. Короче, regex, конечно, можно использовать, но это получится очень хрупкая штука.
Поэтому, чтобы не париться и при этом сделать стабильное решение, я затащил Kotlin embedded compiler. Он даёт полный карт-бланш на работу с AST. Однако есть ложка дёгтя — compiler весит под 70 MB. При этом я использую максимум полпроцента функционала.
Поэтому я решил: а дай-ка я навайбкодю себе свой анализ, который будет делать самый минимум, который мне нужен. В этом мне поможет мой безмолвный напарник в виде Aider и Claude под капотом.
Когда я дал Claude задачу верхнеуровнево, он, как и полагается ленивому разрабу, попытался всё сделать через regex. Пришлось его явно просить о том, чтобы он сделал машину состояний, а также сначала разбил код на токены и только потом провёл анализ и вытащил нужные мне данные. Я, конечно, знатно удивился, но он всё сделал с первой попытки – от меня потребовалась лишь правка в одном месте.
Код хоть и был рабочий, но абсолютно не поддерживаемый. Claude любит делать всё в одной гигантской функции, в которой потом сам же и запутывается. Поэтому сразу после я попросил его сгенерировать мне кучу тестов и кучу проверочных файлов.
Далее я пошёл и вручную отрефакторил его код в более читаемый вид – сгенерированные тесты помогли убедиться, что я ничего не сломал.
После рефакторинга Claude уже намного бодрее и проще добавлял нужный функционал – он сразу понимал, что не нужно менять весь код, а только вот эту конкретную функцию.
В итоге я сделал нужную мне штуку за полтора дня. Без LLM я бы, наверное, потратил примерно неделю.
Что из этого можно вынести:
👉 Сейчас много где кричат о том, что разрабов заменят на LLM. Чем больше работаю с LLM, тем больше убеждаюсь, насколько это чушь. Сама по себе LLM генерит неподдерживаемое, ломающееся говно.
👉 С LLM ты реально получаешь буст производительности, потому как я бы одни только тесты полдня писал, а тут они были готовы за пару минут.
👉 При работе с LLM крайне важна база. Благодаря универу я более-менее знал, как правильно делать синтаксический анализ. Без этих знаний я бы до сих пор возился с решением через regex, которое абсолютно не расширяемое.
Короче, LLM не заменит разраба. Однако разраб, который умеет грамотно работать в паре с LLM, вероятнее всего заменит :)
Post #476
3.56K
- ❤ 25
- 👍 17
- 😁 2
- 🤔 2
- 🤡 1