Тестовый полигон: сверка с рекомендацией «Типизация кода» - #4345
Тестовый полигон: сверка с рекомендацией «Типизация кода»#4345nixel2007 wants to merge 17 commits into
Conversation
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Test Results 4 086 files + 42 4 086 suites +42 50m 21s ⏱️ -15s For more details on these failures, see this check. Results for commit ecbd8b9. ± Comparison against base commit 4879d10. ♻️ This comment has been updated with latest results. |
4f6d5db to
ead9618
Compare
Методическая рекомендация «Типизация кода» из v8-code-style разобрана на 138 проверяемых пунктов, на каждый заведён отдельный тест. Номер пункта указан в @DisplayName, так что соответствие «пункт — тест» проверяется машинно. Тест выражает требование рекомендации, а не текущее поведение: её имена типов (ТабличнаяЧасть, СтрокаТабличнойЧасти, ФормаКлиентскогоПриложения, ДанныеФормыСтруктура, ТабличныйДокумент) и её поведение из примеров (Форма.Объект.Ссылка, Форма.Элементы.Артикул, Список.ТекущиеДанные.Артикул, Адрес.Улица, Элемент.Видимость). Пункты контроля требуют диагностику по ключу, возможности редактора — кодовое действие по идентификатору. Из 138 тестов 71 зелёный и 67 красных: красный означает, что пункт рекомендации у нас не закрыт. Полигон не предназначен для зелёного прогона целиком — он показывает расстояние до рекомендации и чинится по мере реализации пунктов. Фикстуры: пробы по разделам рекомендации в src/test/resources/types/spec, документированные методы в модулях СправочникСМенеджером (для ссылок вида Модуль.Метод.Параметр) и реквизит с типом «Произвольный» в форме Документ1.
…еменным Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MnWpDdNSEFohPZHG6voe6y
Разделы 2 и 3 и возможности редактора: у каждого теста подраздел рекомендации, её формулировка и приведённая там запись.
Формы и контейнеры, контроль типов, модуль формы: у каждого теста подраздел рекомендации, её формулировка и приведённая там запись.
Рекомендация называет тип обобщённо — «ТабличнаяЧасть», система типов отдаёт конкретную табличную часть объекта. Точное сравнение имени этого не допускало.
Как и в 3.20: рекомендация называет тип обобщённо, система типов отдаёт конкретную табличную часть объекта.
В конкретном имени слова стоят в другом порядке, чем в рекомендации, поэтому вхождение здесь не годится. В 3.20 и 3.22 расхождение с буквой рекомендации теперь тоже объяснено комментарием.
Фикстура называла пакет и пространство имён из текста рекомендации, которых в тестовой конфигурации нет. Теперь ссылки указывают на её пакет, а свойство берётся из его схемы.
Буквальный «ПолеВвода» из рекомендации — элемент обычной формы, такого типа в системе типов нет. В фикстуре взят аналог из управляемых форм — «ПолеФормы». Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015awbqkuFMyTddXSsVuoHhc
Рекомендация называет типы формы обобщённо — «ФормаКлиентскогоПриложения», «ДанныеФормыСтруктура», «ТаблицаФормы», «ДанныеФормыЭлементКоллекции», — а система типов отдаёт тип конкретной формы, реквизита, элемента и строки. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015awbqkuFMyTddXSsVuoHhc
…блицы Пункты 3.12, 3.13, 3.18, 4.34, 4.39 спрашивали локальные поля у ТаблицаЗначений — это внутреннее представление, а не наблюдаемое следствие рекомендации: объявленная колонка видна у строки таблицы, а свойства с именем колонки у самой таблицы нет. Проверка идёт обходом строк, а отсутствие члена у таблицы проверяется отдельно. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015awbqkuFMyTddXSsVuoHhc
Рекомендация допускает только дефис-минус, а разбор описаний принимает и тире, поэтому типы за ним разбираются. На сам символ ругается диагностика InvalidCharacterInFile с быстрым исправлением. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015awbqkuFMyTddXSsVuoHhc
Рекомендация считает такой список текстовым описанием, а разбор описаний принимает его как декларацию. Неоднозначности с прозой это почти не создаёт: текст вроде «Строка, содержащая имя» под запись типов не подходит. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015awbqkuFMyTddXSsVuoHhc
e943315 to
9d675e9
Compare
Рекомендация записывает примеры 3.15-3.17, 3.20, 4.4 и 4.5 одной сигнатурой, без тела. Заглушка «Возврат Неопределено» добавляла в объединение свой тип и роняла проверки, хотя расхождения с рекомендацией не было. Тела приведены к объявленным типам: конструктор структуры, обращение к табличной части, функция без «Возврат» — там, где рекомендация показывает вызов метода с неизвестным типом возврата. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015awbqkuFMyTddXSsVuoHhc
Рекомендация в этом пункте пишет параметр ссылкой на конкретный элемент формы — тип текущих данных динамического списка ссылкой не записывается, передают сам элемент. В фикстуре стоял обобщённый «ТаблицаФормы», у которого колонки конкретного списка неизвестны в принципе, поэтому проверка реквизита не могла пройти ни при какой реализации. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015awbqkuFMyTddXSsVuoHhc
Пункты 4.45, 4.47 и 4.48 требуют, чтобы был доступен весь контекст конкретной формы, а сверяли имя типа с обобщённым «ФормаКлиентскогоПриложения» и «ДанныеФормыСтруктура». Система типов отдаёт тип этой конкретной формы, он строго точнее и содержит обобщённое имя головой. Сверка переведена на вхождение — так же, как это уже сделано в пунктах 3.20, 3.22, 3.23 и 3.29-3.33. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015awbqkuFMyTddXSsVuoHhc
Два пункта, где ожидание теста не подпирается текстом рекомендацииОба оставлены красными — правка меняет смысл пункта, поэтому нужно решение. 4.23 «Обращение к колонке по имени в переменной». Тест требует, чтобы у Вариант правки: сверять, что объединение типов колонок доступно, вместо требования пустоты. 4.50 «Имя основной формы даёт общий тип формы». Рекомендация пишет, что ссылка на основную форму ( Здесь нельзя просто перевести сверку на вхождение, как в 4.47/4.48: тогда пункт перестанет отличаться от них, а весь смысл пары 4.49/4.50 против 4.47/4.48 — в контрасте «общий тип против конкретного». Правильнее либо переформулировать пункт как «мы точнее рекомендации», либо оставить красным как осознанное расхождение. Соседний 4.49 (имя формы в переменной) — настоящий пробел: мы не даём ничего, тогда как рекомендация обещает хотя бы общий тип. |
Методическая рекомендация «Типизация кода» разобрана на 138 проверяемых пунктов, на каждый заведён отдельный тест. Номер пункта стоит в
@DisplayName, поэтому соответствие «пункт — тест» проверяется машинно: пропусков, дублей и лишних тестов нет.Зачем
Полигон показывает расстояние между рекомендацией и языковым сервером и служит опорой при реализации пунктов. Ветку периодически ребейзим на
develop.Как устроено
Тест выражает требование рекомендации, а не наше текущее поведение:
ТабличнаяЧасть,СтрокаТабличнойЧасти,ФормаКлиентскогоПриложения,ДанныеФормыСтруктура,ДанныеФормыЭлементКоллекции,ТабличныйДокумент;Форма.Объект.Ссылка,Форма.Элементы.Артикул,Список.ТекущиеДанные.Артикул,Адрес.Улица,Элемент.Видимость, реквизит строки табличной части;MissingType,TypeChange,IncompatibleArgumentType,DeclaredTypeMismatchи др.);source.generateMethodDescription,source.showDescriptionStructure,source.enableStrictTypes).Ключи диагностик и идентификаторы действий пока предложены — уточняются при реализации соответствующих пунктов.
SpecSection2TestSpecSection3TestSpecSection4DataObjectsTestSpecSection4FormsAndContainersTestSpecFormModuleTestSpecStrictTypingControlTestSpecEditorFeaturesTestСостояние
102 зелёных, 36 красных (на ребейзе от 2026-08-08). Красный тест означает, что пункт рекомендации у нас не закрыт; падений по ошибкам нет — все красные это расхождение ожидания с фактом.
CI на этой ветке будет красным — это ожидаемо. Полигон не предназначен для зелёного прогона целиком: он чинится по мере реализации пунктов. Прогон всего пакета
types(1824 теста) показывает, что ни один существующий тест не сломан: все 36 падений — внутри классовSpec*.Тяжелее всего раздел «Контроль типов» — 17 красных из 18: он целиком про диагностики, которых пока нет. Раздел «Пункты, проверяемые в модуле формы» закрыт полностью.
Из пяти пунктов, что раньше ждали типы форм (#4337, влит), красным остался только 4.50: имя основной формы у нас даёт конкретный тип формы, а рекомендация описывает общий.
Сверка фикстур с буквой рекомендации
Часть красных оказалась дефектами самого полигона, а не расхождением с рекомендацией; они исправлены:
Возврат Неопределеноподмешивала в объединение свой тип. Тела приведены к объявленным типам;ТаблицаФормы, тогда как рекомендация пишет здесь ссылку на конкретный элемент формы. С обобщённым типом колонки конкретного списка неизвестны в принципе, и проверка не могла пройти ни при какой реализации;ФормаКлиентскогоПриложения,ДанныеФормыСтруктура), а система типов отдаёт тип конкретной формы — строго более точный. Сверка переведена на вхождение, как уже сделано в 3.20, 3.22, 3.23 и 3.29-3.33.Фикстуры
src/test/resources/types/spec/SpecSection{2,3,4}.bsl— пробы по разделам рекомендации;СправочникСМенеджеромдобавлены документированные методы — для ссылок видаМодуль.Метод.Параметр;Документ1.ФормаДокументадобавлен реквизит с типом «Произвольный» — для пунктов 4.59 и 4.60.