Skip to content

v0.9.5 — отпечаток с окружением и память отпечатков между сеансами

Latest

Choose a tag to compare

@github-actions github-actions released this 08 Aug 09:00

Продолжение работы над безопасностью подавления замечаний. В v0.9.4 плагин перестал доверять номеру строки и начал сверять содержимое; этот выпуск закрывает два оставшихся слабых места, найденных при разборе архитектуры.

Отпечаток строки теперь учитывает окружение

Раньше замечание запоминало отпечаток одной строки. В коде 1С это ненадёжно: по измерениям на 400 реальных модулях (≈67 000 строк) у каждой третьей строки есть точный дубликат в пределах поиска — Возврат;, КонецЕсли;, однотипные присваивания. Если номер строки устарел, плагин мог выбрать не то вхождение.

Теперь запоминается сама строка и до трёх значащих строк выше и ниже (пустые строки и ранее вставленные комментарии // BSLLS: пропускаются — иначе наши же вставки портили бы ориентиры соседних замечаний). При поиске кандидаты оцениваются по количеству совпавших строк окружения, и правка выполняется, только если один кандидат уверенно лучше остальных. Во всех спорных случаях плагин ничего не пишет и просит обновить список замечаний.

Заодно устранены три ошибки, которые оставались в предыдущей схеме:

  • если строка «уехала» и правка выполнялась в новом месте, номера остальных замечаний пересчитывались вокруг старой строки;
  • замечание без отпечатка правилось «вслепую» по номеру — теперь такое подавление отклоняется;
  • в нормализации схлопывались пробелы внутри строковых литералов, из-за чего "a b" и "a b" считались одинаковыми.

Память отпечатков переживает перезапуск

Отпечатки хранились только в маркерах и в открытом окне замечаний. Маркеры не сохраняются между сеансами EDT, а при выключенной настройке «Показывать замечания в панели „Проблемы“» их нет вовсе — после перезапуска или обновления списка защита слабела именно там, где нужна: сервер продолжает сообщать номера строк на момент последнего анализа и не знает о ваших локальных правках.

Теперь плагин ведёт собственный небольшой индекс отпечатков в своём служебном каталоге. Он:

  • переживает перезапуск EDT и не зависит от настройки маркеров;
  • раздельно хранит данные для разных серверов, проектов, веток и привязок;
  • никогда не заменяет сохранённый отпечаток отпечатком «устаревшей» строки с сервера — если сопоставить не удалось, подавление честно отказывает;
  • ограничен по размеру и сам чистит устаревшие записи; при повреждении файла считается пустым (с записью в журнал), а не источником ложной уверенности.

Дополнительно закрыта гонка: обновление, начатое до подавления и завершившееся после него, больше не может записать устаревшие данные в маркеры или в индекс.

Тесты

651 (было 578). Новые проверки описывают правила: при неоднозначности — отказ и файл не меняется; отпечаток переживает перезапуск и работает с выключенными маркерами; сохранённый отпечаток не подменяется данными сервера.

Установка/обновление

p2-архив ru.jimmo.edt.sonarq.repository из вложения. Требуется 1C:EDT 2026.2+; для EDT 2026.1 используйте v0.8.1.

Полный список изменений: v0.9.4...v0.9.5