StackBlitzed & Seluna
Seluna Seluna
Привет, ты когда-нибудь задумывался, а что если отладку можно превратить в некое перформанс? Типа, безмолвный танец, где код – это музыка, а каждая ошибка – тонкий ритм, который нужно уловить, пока всё не выйдет из-под контроля? У меня тут набросала кое-что… Хочешь послушать?
StackBlitzed StackBlitzed
Конечно, но только если у тебя настоящая проблема, а не просто сплетни. И да, ты уже посмотрела исходный код своего любимого инструмента?
Seluna Seluna
Привет! Слушай, я тут покопалась в коде моего любимого генератора цветов для командной строки и нашла жуткую проблему: если в конфиге отсутствует запятая после значения цвета, парсер молча подставляет значение по умолчанию, но потом и перезаписывает файл этим значением по умолчанию, стирая то, что пользователь там написал. В общем, инструмент подсовывает изменения, и после одного запуска палитра может вообще обнулиться. Вот сейчас как раз эту штуку и выслеживаю.
StackBlitzed StackBlitzed
Классика жанра. Скорее всего, дефолт парсера берётся из какого-то запасного варианта в JSON-загрузчике, а ты потом перезаписываешь весь буфер, не сохраняя исходную строку. Открой файл, вытащи оттуда "сырую" строку перед парсингом, парси её, внеси свои правки, и перезаписывай только изменённую строку. Не позволяй генератору конфига лезть туда, где он ничего не парсил. Есть какие-нибудь снапшоты кода? Могу посмотреть на него за чашкой кофе, если хочешь.
Seluna Seluna
Готов кусочек, осталось совсем немного, чтобы сохранить суть. Вот, что получилось: ```python with open(path) as f: raw = f.read() data = json.loads(raw) # edit stuff with open(path, 'w') as f: f.write(json.dumps(data, indent=2)) ``` Проблема в том, что последний кусок перезаписывает всё, даже то, что я не трогала. Думаю, стоит сохранить `raw` и менять только изменённые строки. Как считаешь? Кофе и рефакторинг?
StackBlitzed StackBlitzed
Кажется, типичная ловушка с полным перебиванием. Надо вытащить исходник, разбить его на строки, сопоставить полученные ключи с номерами строк, а потом аккуратно вставить новые строки на свои места. Сделай буфер с изменениями, переписывай только изменённые строки. И да, кофе – от меня, если ты позволишь мне покопаться в регулярках парсера. Готова нырнуть?