Команда jQuery выпустила первую за почти 10 лет мажорную версию — jQuery 4.0.0, приуроченную к 20-летию библиотеки. Это масштабное обновление, которое модернизирует код, удаляет устаревшие API и вносит ряд изменений ломающих совместимость.
📅 Сроки поддержки браузеров:
jQuery 4.0 перестаёт поддерживать IE10 и старше, Edge Legacy (не-Chromium), очень старые версии iOS, Firefox и Android Browser. Поддержка IE11 пока остаётся, но будет удалена в jQuery 5.0.
1️⃣ Удалены давно устаревшие методы (их следует заменить на нативные аналоги):
🔹
jQuery.isArray → Array.isArray()🔹
jQuery.parseJSON → JSON.parse()🔹
jQuery.trim → String.prototype.trim()🔹
jQuery.type, jQuery.now, jQuery.isNumeric и другие.🔹 Это сократило размер библиотеки более чем на 3 КБ в gzip.
2️⃣ Модернизация кодовой базы:
🔹 Исходный код переведён с AMD на ES-модули, что улучшает совместимость с современными сборщиками.
🔹 Добавлена поддержка Trusted Types для безопасной работы с HTML под строгими политиками CSP.
3️⃣ Изменения в поведении:
🔹Порядок событий фокуса (
focus, blur, focusin, focusout) теперь соответствует актуальной спецификации W3C, а не старому решению jQuery.🔹Автоматическое добавление "
px" к unitless-значениям в .css() сильно ограничено. Теперь px добавляется только к известному набору свойств.🔹Slim-сборка стала ещё меньше: из неё удалены модули
Deferred и Callbacks (размер ~19.5 КБ в gzip), так как в поддерживаемых браузерах (кроме IE11) можно использовать нативные Promise.🛠 Как обновляться? Важные шаги:
1️⃣ Внимательно изучите официальное руководство по обновлению до версии 4.0.
2️⃣ Используйте плагин jQuery Migrate для выявления проблем в существующем коде.
3️⃣ Если нужна поддержка удалённых старых браузеров (IE10 и др.) — оставайтесь на ветке 3.x.
💾 Ссылки для скачивания:
Полная версия: https://code.jquery.com/jquery-4.0.0.js
Slim-версия: https://code.jquery.com/jquery-4.0.0.slim.js
Через npm:
npm install jquery@4.0.0Это историческое обновление очищает библиотеку от исторического багажа, делая её более современной и ориентированной на будущее. Для новых проектов стоит рассматривать нативные API браузеров, но для поддержки legacy-кода jQuery 4.0 — отличный путь вперёд.
#jQuery #JavaScript #Frontend #WebDev #jQuery4
Please open Telegram to view this post
VIEW IN TELEGRAM
Знаете ли вы, что классическая цепочка
items.filter().map().slice(0,10) обрабатывает тысячи элементов, хотя нужны лишь первые десять? Это как перелопатить тонну песка ради щепотки золота.В статье разбираем нативное решение — хелперы итераторов (Iterator Helpers). Они позволяют:
Это меняет подход к оптимизации в JavaScript. Разбираемся, как их внедрять и каких подводных камней избегать.
#JavaScript #IteratorHelpers
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
В Pull Request #58379 для ветки 12.x было добавлено полезное улучшение в HTTP-клиент Laravel. Теперь в объекте
💡 В чём суть
Раньше метод
Тихие ошибки:
Потеря данных: PHP может некорректно обрабатывать очень большие числа (например,
Как теперь можно решить
В метод
❗️ Сценарии использования
✅ Защита от потери больших чисел (часто встречается в платежных системах и соц. сетях):
✅ Строгий режим для отладки:
При малейшей ошибке в JSON будет выброшено исключение, а не возвращён NULL.
✅ Комбинированный режим для продакшена:
И данные целы, и ошибки не пройдут незамеченными.
⚡️ Что изменилось для разработчика
Раньше для такого контроля нужно было вручную парсить
Небольшое изменение, которое устраняет целый класс проблем при интеграции с реальными, неидеальными API.
📱 @dev_notes_ru
#Laravel #Laravel12
Response можно устанавливать флаги для декодирования JSON.Раньше метод
$response->json() просто парсил JSON с настройками PHP по умолчанию. Это могло приводить к скрытым проблемам:Тихие ошибки:
json_decode() по умолчанию молча возвращает NULL при ошибке в структуре JSON, что усложняет отладку.Потеря данных: PHP может некорректно обрабатывать очень большие числа (например,
transaction_id или Snowflake ID из Discord/X), что ведёт к повреждению данных.Как теперь можно решить
В метод
json() добавлен параметр flags. Это позволяет передавать стандартные константы PHP для управления парсингом.$data = $response->json(flags: JSON_BIGINT_AS_STRING);
Большие целые числа будут возвращены как строки, что гарантирует их сохранность.
$data = $response->json(flags: JSON_THROW_ON_ERROR);
При малейшей ошибке в JSON будет выброшено исключение, а не возвращён NULL.
$data = $response->json(
flags: JSON_BIGINT_AS_STRING | JSON_THROW_ON_ERROR
);
И данные целы, и ошибки не пройдут незамеченными.
Раньше для такого контроля нужно было вручную парсить
$response->body(). Теперь всё решается одним параметром встроенного метода.Небольшое изменение, которое устраняет целый класс проблем при интеграции с реальными, неидеальными API.
#Laravel #Laravel12
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
[12.x] Allow setting flags for decoding json in the Http Client's Response by cosmastech · Pull Request #58379 · laravel/framework
I really want to be able to specify that when I'm parsing JSON from a response, it should throw when receiving invalid JSON.
How to use
Call-site
$response = Http::get('https://some...
How to use
Call-site
$response = Http::get('https://some...
🔥2
Symbol.iteratorЧто, если ваш объект мог бы быть и структурой с понятными свойствами, и коллекцией для мгновенного разворачивания через
...? Оказывается, в JavaScript это встроенная возможность через Symbol.iterator.В статье разбираем на конкретной задаче:
🔹 Как работает spread «под капотом» и почему
Map разворачивается парами.🔹 Решаем дилемму «объект или массив» — пишем утилиту, результат которой можно и читать как
fileInit.bytes, и подставить в new File(...fileInit).🔹 Плюсы, минусы и когда это реально нужно — чтобы не усложнять код без дела.
Инструмент мощный, но требует осмысленного применения.
#JavaScript #SymbolIterator #Symbol
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🤔1
Устали выбирать между быстрой первой загрузкой и моментальными переходами по сайту? Словари сжатия в HTTP/3 решают эту проблему, сокращая объём передаваемых CSS до минимума.
В статье разбираем:
🔹 Как технология устраняет дублирование кода
🔹 Пошаговая настройка
🔹 Стратегия внедрения с fallback для всех браузеров
Это не теория — метод уже работает в Chromium и готов к использованию в production.
#DevOps #CSS
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🤔1
Работаете над фичей, но срочно нужен хотфикс? Не хотите терять контекст и грязные файлы?
🚀 Git Worktree создаёт изолированные рабочие директории для параллельной работы над разными ветками! Теперь можно:
✅ Вносить срочные исправления, не трогая основную ветку
✅ Работать над несколькими задачами одновременно
✅ Экспериментировать без риска для продакшена
✅ Тестировать PR и чужие ветки в чистом окружении
📖 В статье:
🔹 Как создать, переместить и удалить рабочее дерево
🔹 Архитектура и принципы работы
🔹 Когда использовать (а когда не стоит)
🔹 Сравнение с
git stash и clone🔹 Ответы на частые вопросы
#Git #Worktree
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
Вышло очередное обновление фреймворка — версия 12.49.0. Как всегда, релиз нацелен на стабильность, исправление ошибок и добавление небольших, но полезных улучшений в различные компоненты системы.
🛠 Исправления ошибок и улучшения
simplePaginate() в связке с withQueryString().queue:prune-batches — теперь корректно удаляются устаревшие записи в таблице job_batches.mimetypes теперь корректно обрабатывает файлы без расширения.BelongsToMany отношениях.channel() в маршрутах.Queue::extend().Paginator: В Paginator добавлен метод appendsQueryString(), позволяющий тонко управлять параметрами строки запроса.Pipeline, Conditionable, ValidatedInput.JobProcessing, JobProcessed, JobFailed для улучшенного мониторинга очередей через Horizon.TestResponse добавлены методы assertSessionHasErrorsIn() и assertSessionDoesntHaveErrorsIn() для точной проверки ошибок по ключам.make:model появилась опция --pivot для быстрого создания моделей сводных таблиц.HttpClient, DatabaseManager, BladeCompiler.Полный список изменений можно найти в официальном релизе
#Laravel #Laravel12
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Release v12.49.0 · laravel/framework
[12.x] Clean up compiled views after parallel testing by @dxnter in #58440
[12.x] Support "where subquery between columns" by @gdebrauwer in #58441
[12.x] Use searchable prompt for db:tab...
[12.x] Support "where subquery between columns" by @gdebrauwer in #58441
[12.x] Use searchable prompt for db:tab...
❤2🔥1
А вы знали, что можно получить все преимущества TypeScript, оставаясь в рамках чистого JavaScript? Всё благодаря JSDoc — системе типизации, которая работает через комментарии. В обновлённой статье:
Этот подход идеален для легаси-проектов, скриптов и случаев, где важна скорость разработки без настройки сборки. Обновление делает материал ещё более прикладным.
#JavaScript #JSDoc #TypeScript
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1
Используете JSDoc только для подсказок в редакторе? Тогда вы теряете главное: сквозную проверку типов от локальной разработки до продакшена.
В свежей статье рассматриваем профессиональную настройку системы типов через TypeScript Compiler:
🔹 Как за 5 минут включить проверку типов во всём проекте.
🔹 Автоматическая генерация
.d.ts файлов для ваших библиотек.🔹 Интеграция строгой проверки в CI/CD — код с ошибками не попадёт в main.
Это не хак, а легитимный подход для больших проектов. Если вы до сих пор просто ставите
// @ts-check и думаете, что это всё — вам сюда.#JavaScript #JSDoc #TypeScript
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
location в Nginx: Полное руководство с примерамиЭффективная и безопасная конфигурация веб-сервера требует чёткого понимания принципов работы директивы location в Nginx. В новом материале представлено полное руководство, охватывающее ключевые аспекты:
root и aliasРуководство также актуально для пользователей Angie, сохраняя полную совместимость конфигураций.
#Nginx #Angie #location #DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
matchMedia()Знаешь, как в JavaScript проверить, соответствует ли текущий viewport мобильному виду?
Не нужно городить
window.innerWidth и слушать resize вручную.Используй
matchMedia — тот же самый медиа-запрос, что и в CSS:const mq = matchMedia('(max-width: 550px)');
// Текущее состояние
console.log(mq.matches); // true / false
// Реагируем на изменения
mq.addEventListener('change', e => {
console.log('Мобильный?', e.matches);
});#JavaScript #CSS #Frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
Вышла новая версия PHPStan 2.1.38
Этот релиз продолжает курс проекта на постоянное повышение производительности и приносит очередное значительное ускорение анализа.
🔥 Главная новость: еще быстрее!
Разработчикам удалось добиться еще 5–10% прироста скорости работы статического анализатора. Это улучшение — результат масштабной работы по оптимизации, которая ведется уже несколько релизов.
Основные изменения
Исправления ошибок:
✅ Исправлена обработка экранированного символа
✅ Устранена ошибка в определении типов (type inference) для замыканий (closures), связанная с сокращенными именами функций (Function Normalization and Shortening Rule, FNSR).
Улучшения:
✅ Убрано ограничение на версию PHP для правил, проверяющих атрибут
✅ Улучшен анализ для выражений с
✅ Улучшен вывод типов при сравнении результатов двух функций (
✅ Теперь
Оптимизация производительности (основная часть работы):
Большинство изменений в этом выпуске направлены на повышение скорости. Были оптимизированы:
✅ Наследование phpDoc-комментариев (теперь используется рефлексия).
✅ Работа с шаблонными типами (
✅ Логика в
✅ Кэширование результатов для предотвращения повторных вычислений.
Прочие правки:
✅ Исправление сигнатур функций.
✅ Внутренние улучшения кода и тесты.
Скачать обновление и увидеть все изменения можно как обычно на GitHub.
Обновляйтесь и наслаждайтесь еще более быстрым анализом кода! Если вы заметили какие-либо проблемы, сообщайте о них в трекере проекта.
📱 @dev_notes_ru
Этот релиз продолжает курс проекта на постоянное повышение производительности и приносит очередное значительное ускорение анализа.
🔥 Главная новость: еще быстрее!
Разработчикам удалось добиться еще 5–10% прироста скорости работы статического анализатора. Это улучшение — результат масштабной работы по оптимизации, которая ведется уже несколько релизов.
Основные изменения
Исправления ошибок:
# в регулярных выражениях в расширенном режиме.Улучшения:
#[\Override].New_ при использовании StaticMethodParameterClosureTypeExtension.FuncCall === FuncCall).array_merge() не теряет информацию о типах известных ключей (offset-types) массивов.Оптимизация производительности (основная часть работы):
Большинство изменений в этом выпуске направлены на повышение скорости. Были оптимизированы:
TemplateTypeHelper), постоянными массивами (ConstantArrayType) и пересечениями типов (IntersectionType).ImpossibleCheckTypeHelper, CombinationHelper и MutatingScope.Прочие правки:
Скачать обновление и увидеть все изменения можно как обычно на GitHub.
Обновляйтесь и наслаждайтесь еще более быстрым анализом кода! Если вы заметили какие-либо проблемы, сообщайте о них в трекере проекта.
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Release 2.1.38 · phpstan/phpstan
This version brings another 5-10 % faster performance! 🏎️
Improvements 🔧
Remove PHP version constraint from the #[\Override] attribute rules (#4436), thanks @johnbillion!
OverridingPropertyRule - ...
Improvements 🔧
Remove PHP version constraint from the #[\Override] attribute rules (#4436), thanks @johnbillion!
OverridingPropertyRule - ...
👍2
Знаете, что чаще всего приводит к взлому Docker-контейнеров? Не 0-day уязвимости, а запуск от
root и забытые секреты в образах. В статье рассматривается 11 практических шагов для реального усиления безопасности:В статье — готовые примеры
Dockerfile, команды и контрольный список перед деплоем.#Docker #DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2
Устали вручную группировать массивы? Теперь это встроенная функция!
Object.groupBy() — ваш новый лучший друг для сортировки данных по любому строковому свойству.const tasks = [
{ description: 'Task 1', tag: 'Tag 1', project: 'Project A' },
{ description: 'Task 2', tag: 'Tag 1', project: 'Project B' },
{ description: 'Task 3', tag: 'Tag 2', project: 'Project A' },
];
const tasksByProject = Object.groupBy(tasks, (task) => task.project);
console.log(tasksByProject);
Результат:
{
'Project A': [
{ description: 'Task 1', tag: 'Tag 1', project: 'Project A' },
{ description: 'Task 3', tag: 'Tag 2', project: 'Project A' },
],
'Project B': [
{ description: 'Task 2', tag: 'Tag 1', project: 'Project B' },
]
}Для старых платформ доступен полифил через
core-js.🔑 Ключи любого типа: Если нужно использовать в качестве ключа не только строки, но и объекты, числа и другие типы — используйте
Map.groupBy().#JavaScript #WebDev #Frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
В Laravel предложили стандартизировать PHP-атрибуты
Тейлор Отвелл выступил с инициативой сделать код Laravel более единообразным и современным. В рамках нового PR (Pull Request) предлагается повсеместно внедрить использование PHP 8 атрибутов в качестве основного способа конфигурации вместо свойств класса.
Что это значит?
Раньше для настройки, например, модели или задачи в очереди, использовались свойства класса (properties). Теперь для этого предлагаются нативные PHP-атрибуты, что делает код чище и современнее.
Что можно будет настраивать через атрибуты?
✅ Eloquent-модели:
✅ Задачи в очереди (Jobs):
✅ Консольные команды:
✅ Form Request, Resources, Factories и другие компоненты.
Важно: изменения не ломают обратную совместимость. Старый подход через свойства классов продолжит работать. Атрибуты предлагаются как современная, альтернативная опция.
Это предложение — важный шаг к единообразию кодовой базы Laravel и полноценному использованию возможностей PHP 8.
Attributes #58578
📱 @dev_notes_ru
#Laravel #PHP
Тейлор Отвелл выступил с инициативой сделать код Laravel более единообразным и современным. В рамках нового PR (Pull Request) предлагается повсеместно внедрить использование PHP 8 атрибутов в качестве основного способа конфигурации вместо свойств класса.
Что это значит?
Раньше для настройки, например, модели или задачи в очереди, использовались свойства класса (properties). Теперь для этого предлагаются нативные PHP-атрибуты, что делает код чище и современнее.
Что можно будет настраивать через атрибуты?
#[Table('users')], #[PrimaryKey('user_id')], #[Hidden(['password'])]#[Connection('redis')], #[Queue('podcasts')], #[Tries(3)]#[Signature('mail:send {user}')]Важно: изменения не ломают обратную совместимость. Старый подход через свойства классов продолжит работать. Атрибуты предлагаются как современная, альтернативная опция.
Это предложение — важный шаг к единообразию кодовой базы Laravel и полноценному использованию возможностей PHP 8.
Attributes #58578
#Laravel #PHP
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1
Ошибки безопасности VPS и как их исправить
Знаешь, сколько времени нужно ботам, чтобы начать атаковать новый сервер? Меньше минуты. А дальше — сотни попыток подбора паролей и сканирования портов.
Если ты администрируешь VPS, эта статья — обязательный минимум. Здесь нет теории, только конкретные шаги:
✅ Настройка SSH-ключей и запрет root-доступа
✅ Установка Fail2ban и фаервола UFW
✅ Настройка автономных бэкапов
Прочитай и закрой базовые векторы атак, которые используют 99% автоматических сканеров.
🖥 Читать статью
📱 @dev_notes_ru
#DevOps #Security
Знаешь, сколько времени нужно ботам, чтобы начать атаковать новый сервер? Меньше минуты. А дальше — сотни попыток подбора паролей и сканирования портов.
Если ты администрируешь VPS, эта статья — обязательный минимум. Здесь нет теории, только конкретные шаги:
Прочитай и закрой базовые векторы атак, которые используют 99% автоматических сканеров.
#DevOps #Security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
Семантическая диффузия
Термины со временем могут терять точность и размываться. Изначально четкое понятие обрастает трактовками, смягчается или упрощается для широкого употребления.
Это явление — семантическая диффузия.
Эрик Эванс описал её для DDD (Domain-Driven Design). Концепция "ограниченного контекста" стала трактоваться как просто модуль, а "вездесущий язык" — как глоссарий. Суть терминов теряется.
Рефакторинг тоже подвержен диффузии. Первоначальное определение — это контролируемое улучшение структуры кода без изменения поведения. Теперь же "рефакторингом" часто называют любое изменение кода, даже хаотичное и рискованное.
Создатели термина не могут контролировать его использование. Можно попытаться защитить определение через книги и статьи, но это лишь замедляет процесс.
Диффузия имеет два последствия:
1. Сложность общения. Без точных терминов сложно вести глубокие обсуждения.
2. Потеря полезных концепций. Ключевые идеи, стоящие за термином, забываются.
Полезный термин может быть утерян. Иногда его можно вернуть, настойчиво используя в первоначальном смысле и поправляя других. Иногда приходится находить новые слова для старой идеи (например, "рефакторинг (в оригинальном смысле)").
Важно помнить: когда термины становятся модными, их исходное значение часто размывается.
📱 @dev_notes_ru
Термины со временем могут терять точность и размываться. Изначально четкое понятие обрастает трактовками, смягчается или упрощается для широкого употребления.
Это явление — семантическая диффузия.
Эрик Эванс описал её для DDD (Domain-Driven Design). Концепция "ограниченного контекста" стала трактоваться как просто модуль, а "вездесущий язык" — как глоссарий. Суть терминов теряется.
Рефакторинг тоже подвержен диффузии. Первоначальное определение — это контролируемое улучшение структуры кода без изменения поведения. Теперь же "рефакторингом" часто называют любое изменение кода, даже хаотичное и рискованное.
Создатели термина не могут контролировать его использование. Можно попытаться защитить определение через книги и статьи, но это лишь замедляет процесс.
Диффузия имеет два последствия:
1. Сложность общения. Без точных терминов сложно вести глубокие обсуждения.
2. Потеря полезных концепций. Ключевые идеи, стоящие за термином, забываются.
Полезный термин может быть утерян. Иногда его можно вернуть, настойчиво используя в первоначальном смысле и поправляя других. Иногда приходится находить новые слова для старой идеи (например, "рефакторинг (в оригинальном смысле)").
Важно помнить: когда термины становятся модными, их исходное значение часто размывается.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1
Лицензионный аудит зависимостей
А вы знаете, что безобидная сторонняя библиотека может заставить открыть исходный код всего вашего SaaS? Лицензионные риски в PHP-зависимостях — это не юридическая абстракция, а реальная угроза проекту.
В новой статье разбираем:
• Как автоматически находить «опасные» лицензии (GPL, AGPL, SSPL)
• Готовый скрипт для интеграции проверки в GitHub Actions
• Пошаговый план внедрения политики за один день
🖥 Читать статью
📱 @dev_notes_ru
#PHP #License
А вы знаете, что безобидная сторонняя библиотека может заставить открыть исходный код всего вашего SaaS? Лицензионные риски в PHP-зависимостях — это не юридическая абстракция, а реальная угроза проекту.
В новой статье разбираем:
• Как автоматически находить «опасные» лицензии (GPL, AGPL, SSPL)
• Готовый скрипт для интеграции проверки в GitHub Actions
• Пошаговый план внедрения политики за один день
#PHP #License
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1
Как автоматически генерировать сообщения коммитов с помощью Claude
Сообщения коммитов важны, но их написание — рутинная задача. Claude от Anthropic отлично справляется с их генерацией. Для автоматизации процесса можно использовать локальный скрипт.
Процесс работы
🔹 Скрипт получает изменения (
🔹 Дифф передается в API Claude (через Anthropic SDK) с запросом создать краткое, информативное сообщение коммита в conventional commits стиле.
🔹 Полученный ответ используется для выполнения коммита.
Пример скрипта на Python
Ключевые моменты
🔹 Используйте переменную окружения
🔹 Модель
🔹 Промт инструктирует Claude придерживаться формата conventional commits.
Процесс автоматизирует рутинную работу, оставляя пользователю финальный контроль.
Альтернативный подход: Husky + скрипт
Для запуска генерации перед каждым коммитом можно использовать хуки Git (например, через Husky).
🔹 Установите Husky:
🔹 Активируйте хуки:
🔹 Создайте хук
Использование Claude для генерации сообщений коммитов экономит время и улучшает их качество. Локальный скрипт или интеграция с хуками Git делают процесс seamless. Всегда проверяйте сгенерированные сообщения перед отправкой коммита.
📱 @dev_notes_ru
#Git #Commit
Сообщения коммитов важны, но их написание — рутинная задача. Claude от Anthropic отлично справляется с их генерацией. Для автоматизации процесса можно использовать локальный скрипт.
Процесс работы
🔹 Скрипт получает изменения (
git diff) для индексированных файлов.🔹 Дифф передается в API Claude (через Anthropic SDK) с запросом создать краткое, информативное сообщение коммита в conventional commits стиле.
🔹 Полученный ответ используется для выполнения коммита.
Пример скрипта на Python
import subprocess
import anthropic
import os
# 1. Получить дифф
diff_output = subprocess.run(
["git", "diff", "--cached"],
capture_output=True,
text=True
).stdout
# 2. Создать промт и отправить в Claude
client = anthropic.Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
message = client.messages.create(
model="claude-3-haiku-20240307",
max_tokens=100,
temperature=0,
system="Сгенерируй краткое, информативное сообщение коммита на основе git diff. Используй формат conventional commits (например, feat:, fix:, chore:).",
messages=[
{"role": "user", "content": f"Создай сообщение коммита для этого diff:\n\n{diff_output}"}
]
)
commit_message = message.content[0].text.strip()
# 3. Выполнить коммит
subprocess.run(["git", "commit", "-m", commit_message])
print(f"Коммит создан: {commit_message}")
Ключевые моменты
🔹 Используйте переменную окружения
ANTHROPIC_API_KEY.🔹 Модель
claude-3-haiku быстрая и недорогая для этой задачи.🔹 Промт инструктирует Claude придерживаться формата conventional commits.
Процесс автоматизирует рутинную работу, оставляя пользователю финальный контроль.
Альтернативный подход: Husky + скрипт
Для запуска генерации перед каждым коммитом можно использовать хуки Git (например, через Husky).
🔹 Установите Husky:
npm install husky --save-dev.🔹 Активируйте хуки:
npx husky install.🔹 Создайте хук
prepare-commit-msg:#!/bin/bash
# .husky/prepare-commit-msg
# Выполнить скрипт генерации и записать сообщение в файл
python generate_commit_message.py > "$1"
Использование Claude для генерации сообщений коммитов экономит время и улучшает их качество. Локальный скрипт или интеграция с хуками Git делают процесс seamless. Всегда проверяйте сгенерированные сообщения перед отправкой коммита.
#Git #Commit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1