Тестовый полигон: сверка с рекомендацией «Типизация кода» - #4345
Тестовый полигон: сверка с рекомендацией «Типизация кода»#4345nixel2007 wants to merge 18 commits into
Conversation
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: trueThanks 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 3 465 files - 651 3 465 suites - 651 44m 56s ⏱️ - 7m 36s For more details on these failures, see this check. Results for commit 30e945e. ± Comparison against base commit 42a7549. ♻️ This comment has been updated with latest results. |
e943315 to
9d675e9
Compare
Два пункта, где ожидание теста не подпирается текстом рекомендацииОба оставлены красными — правка меняет смысл пункта, поэтому нужно решение. 4.23 «Обращение к колонке по имени в переменной». Тест требует, чтобы у Вариант правки: сверять, что объединение типов колонок доступно, вместо требования пустоты. 4.50 «Имя основной формы даёт общий тип формы». Рекомендация пишет, что ссылка на основную форму ( Здесь нельзя просто перевести сверку на вхождение, как в 4.47/4.48: тогда пункт перестанет отличаться от них, а весь смысл пары 4.49/4.50 против 4.47/4.48 — в контрасте «общий тип против конкретного». Правильнее либо переформулировать пункт как «мы точнее рекомендации», либо оставить красным как осознанное расхождение. Соседний 4.49 (имя формы в переменной) — настоящий пробел: мы не даём ничего, тогда как рекомендация обещает хотя бы общий тип. |
Методическая рекомендация «Типизация кода» из 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
Рекомендация записывает примеры 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
ecbd8b9 to
6fa9c1f
Compare
За динамическим списком стоит основная таблица (`Catalog.Номенклатура`), и колонки его строки — это её поля. Раньше их взять было неоткуда, и `Список.ТекущиеДанные` отдавал обобщённую строку без единой колонки; теперь источник данных приходит из mdclasses, и строка заводится на конкретный реквизит-список с полями его таблицы. Ссылочная основная таблица даёт и идентификатор строки: `ТекущаяСтрока`, `ТекущийРодитель` и элементы `ВыделенныеСтроки` — это ссылка, а не «неизвестно что». У списка с произвольным запросом колонок по-прежнему нет: там поля выборки запроса, а не поля таблицы — разбор текста запроса это отдельная задача. Виртуальные таблицы регистров своего имени в реестре не имеют и тоже остаются без колонок. Этим закрываются пункты 3.31-3.33 методической рекомендации «Типизация кода» (полигон сверки — #4345). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Cahj3rSEFT21HnukHP9vxb
Рекомендация называет тип элемента формы и его строки обобщённо — «ТаблицаФормы» и «ДанныеФормыЭлементКоллекции», — а система типов отдаёт тип этой конкретной таблицы и её строки: колонки берутся из основной таблицы динамического списка, и у каждого списка они свои. Это строго точнее, поэтому сверка переведена на вхождение — как уже сделано в 3.20, 3.22, 3.23, 4.45, 4.47 и 4.48. Пункты остаются красными: падают они теперь на самой сути — реквизит списка, прочитанный через «ТекущиеДанные», типа пока не имеет. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Cahj3rSEFT21HnukHP9vxb
За динамическим списком стоит основная таблица (`Catalog.Номенклатура`), и колонки его строки — это её поля. Раньше их взять было неоткуда, и `Список.ТекущиеДанные` отдавал обобщённую строку без единой колонки; теперь источник данных приходит из mdclasses, и строка заводится на конкретный реквизит-список с полями его таблицы. Ссылочная основная таблица даёт и идентификатор строки: `ТекущаяСтрока`, `ТекущийРодитель` и элементы `ВыделенныеСтроки` — это ссылка, а не «неизвестно что». У списка с произвольным запросом колонок по-прежнему нет: там поля выборки запроса, а не поля таблицы — разбор текста запроса это отдельная задача. Виртуальные таблицы регистров своего имени в реестре не имеют и тоже остаются без колонок. Этим закрываются пункты 3.31-3.33 методической рекомендации «Типизация кода» (полигон сверки — #4345). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Cahj3rSEFT21HnukHP9vxb
Методическая рекомендация «Типизация кода» разобрана на 138 проверяемых пунктов, на каждый заведён отдельный тест. Номер пункта стоит в
@DisplayName, поэтому соответствие «пункт — тест» проверяется машинно: пропусков, дублей и лишних тестов нет.Зачем
Полигон показывает расстояние между рекомендацией и языковым сервером и служит опорой при реализации пунктов. Ветку периодически ребейзим на
develop.Как устроено
Тест выражает требование рекомендации, а не наше текущее поведение:
ТабличнаяЧасть,СтрокаТабличнойЧасти,ФормаКлиентскогоПриложения,ДанныеФормыСтруктура,ДанныеФормыЭлементКоллекции,ТабличныйДокумент;Форма.Объект.Ссылка,Форма.Элементы.Артикул,Список.ТекущиеДанные.Артикул,Адрес.Улица,Элемент.Видимость, реквизит строки табличной части;MissingType,TypeChange,IncompatibleArgumentType,DeclaredTypeMismatchи др.);source.generateMethodDescription,source.showDescriptionStructure,source.enableStrictTypes).Ключи диагностик и идентификаторы действий пока предложены — уточняются при реализации соответствующих пунктов.
SpecSection2TestSpecSection3TestSpecSection4DataObjectsTestSpecSection4FormsAndContainersTestSpecFormModuleTestSpecStrictTypingControlTestSpecEditorFeaturesTestСостояние
104 зелёных, 34 красных (на ребейзе от 2026-08-23). Красный тест означает, что пункт рекомендации у нас не закрыт; падений по ошибкам нет — все красные это расхождение ожидания с фактом.
CI на этой ветке будет красным — это ожидаемо. Полигон не предназначен для зелёного прогона целиком: он чинится по мере реализации пунктов. Прогон всего пакета
types(1873 теста) показывает, что ни один существующий тест не сломан: все 34 падения — внутри классовSpec*.Тяжелее всего раздел «Контроль типов» — 17 красных из 18: он целиком про диагностики, которых пока нет. Раздел «Пункты, проверяемые в модуле формы» закрыт полностью.
Красные по пунктам:
Сверка фикстур с буквой рекомендации
Часть красных оказалась дефектами самого полигона, а не расхождением с рекомендацией; они исправлены:
Возврат Неопределеноподмешивала в объединение свой тип. Тела приведены к объявленным типам;ТаблицаФормы, тогда как рекомендация пишет здесь ссылку на конкретный элемент формы. С обобщённым типом колонки конкретного списка неизвестны в принципе, и проверка не могла пройти ни при какой реализации;ФормаКлиентскогоПриложения,ДанныеФормыСтруктура), а система типов отдаёт тип конкретной формы — строго более точный. Сверка переведена на вхождение, как уже сделано в 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.