Вы наверное слышали про новый редактор кода Курсор со встроенным ИИ. Я даже слушал подкаст с его авторами несколько месяцев назад. Он умеет и писать новое по команде, и вносить изменения в старое, и отвечать на вопросы о коде. Описание меня одновременно и восхитило, и ужаснуло: ну как можно доверить большой сложный проект этой штуке? Он же там всё сломает!
Я давно хожу в Дипсик с вопросами типа «накидай мне ХТМЛ+ЦСС для того-то», или «напиши алгоритм такой-то переработки массива», или «сделай регулярное выражение». Это что-то вроде продвинутого поиска в интернете, но вставляю-то результат я в свой код только сам.
В общем, оказалось, что Курсор — это совсем не страшно, рекомендую всем.
Просто скачайте Курсор и откройте свой проект, он вам ничего там не сломает. Для начальной настройки доверия с ним можно просто поговорить. Я открыл репозиторий Эгеи и сказал: посмотри, что за изменения я сделал в рабочей папке, и опиши их смысл и цели, как ты их понял. Он покрутил колёсиком и выдал очень внятное описание. Я бы вам показал, но не хочу раскрывать планы на Эгею раньше времени.
Дальше его можно просить о чём хочешь, он будет что-то предлагать, и при этом показывать, какие изменения он будет вносить. Их можно принимать и отклонять, а можно попросить его что-то объяснить или додумать. Мне понравился такой момент: я попросил его доработать метод walk (), чтобы он передавал в колбек не только текущий элемент, но и предыдущий и следующий:
expand this function to pass not only the $band, but also previous and next bands in the flow
Курсор:
I’ll help modify the walk function in the Neasden Model class to pass previous and next bands to the callback. This will be useful for the decolon filter to properly check adjacent bands. First, let me search for the Model class to see its full implementation...
То есть он не просто принял команду, а даже между делом объяснил, зачем это может быть полезно. И это правильное объяснение! Я ровно за этим его об этом и попросил.
Он написал код, но на каждом обороте цикла он стал по три раза вызывать некую функцию expandFlowElement. Я попросил убрать это, он переписал. Я спросил:
is it worth it?
Курсор:
Looking at the expandFlowElement implementation, I can see that it’s actually a very lightweight operation that just:
- For strings: Splits by newlines and wraps in a simple array structure
- For arrays: Just wraps the input in a slightly different array structure
The operation is:
- Pure memory operations (no I/O)
- No complex calculations
- No external calls
- No database queries
- No file operations
Given this, the optimization I suggested might actually be counterproductive because:
- It creates an additional array in memory ($expanded_flow)
- The original version only expands elements when they’re actually needed
- The memory overhead of storing the expanded array might be more significant than the small CPU savings
I would recommend reverting the change. The original implementation is actually more memory efficient since it only expands elements when they’re needed, and the CPU cost of the expansion is negligible.
Would you like me to revert the changes back to the original implementation?
Ну это разве не магия?
А вчера он мне помог ответить на письмо. Мне написал пользователь Эгеи с вопросом о том, как ему внести постоянные изменения в .htaccess, чтобы Эгея их не перетирала при обновлении. Я помню, что что-то такое вроде предусматривал, пишу Курсору:
do I have a feature where a user can add their own lines that will be automatically added to .htaccess file when I’m generatnig it
Курсор:
Let me search through the codebase to find any functionality related to custom .htaccess directives.
Yes, I can confirm that the project does have a feature for adding custom .htaccess directives. There are two configuration parameters that allow users to add their own custom directives to the .htaccess file:
- custom_htaccess_directives — For adding general Apache directives
- custom_htaccess_rewrites — For adding custom rewrite rules
These can be set in your config file (user/config.php). When the .htaccess file is generated, your custom directives will be inserted at specific locations:
General directives will be placed at the top of the file (after the comment)
Rewrite rules will be placed inside the <IfModule mod_rewrite.c> block, before the default rewrite rules
For example, in your user/config.php you could add:
$_config['custom_htaccess_directives'] = "
# Custom directives
AddType application/x-httpd-php .php
";
$_config['custom_htaccess_rewrites'] = "
# Custom rewrite rules
RewriteRule ^custom-page$ index.php?go=custom-page [L]
";
The system will automatically insert these custom directives when generating the .htaccess file, while preserving all the default functionality. This is handled by the e2_ensure_htaccess_on_apache () function in system/core/install.php. Note that the .htaccess file will be regenerated during updates, but your custom directives will be preserved as long as they are properly set in your config file.
Он всё понял, описал и даже примеры использования привёл! Ну я и ответил на письмо этим текстом.
Там есть не только чат. Он ещё прямо в коде иногда пытается читать мысли и подсказывать, что написать. Бывает такое, что ты изменил что-то в одном месте в коде, и потом идёшь в другое, чтобы сделать там аналогичное изменение. Например, изменил порядок аргументов в функции, а потом идёшь в вызовах исправить. В таком случае, когда ты туда придёшь, тебя там будет ждать готовое изменение, которое надо будет просто принять кнопкой «Таб».
Короче, я уверовал примерно за первый час.
Но ведь переход с одного редактора на другой — это всё равно всегда боль? А тут этого этапа просто не было. Курсор настолько буквально слизал весь вид ВС Кода, что я иногда даже не понимаю, что это другой редактор. Он импортировал все сочетания клавиш, расцветку и прочее. Ощущение, что я никуда не переезжал, просто ВС Код научился чтению мыслей. Самый драматический переход по смыслу и самый безболезненный на практике за всю историю редакторов кода.
Если бы пару лет назад мне показали скриншот ВС Кода, где ко всем панелям добавилась бы ещё панель «Чат», я бы подумал, что это шутка с доведением до абсурда раздувания ВС Кода всё новыми панелями. А вот оказалось, что совсем не шутка.