Skip to content

Тестовый полигон: сверка с рекомендацией «Типизация кода» - #4345

Draft
nixel2007 wants to merge 17 commits into
developfrom
test/typification-spec-conformance
Draft

Тестовый полигон: сверка с рекомендацией «Типизация кода»#4345
nixel2007 wants to merge 17 commits into
developfrom
test/typification-spec-conformance

Conversation

@nixel2007

@nixel2007 nixel2007 commented Jul 31, 2026

Copy link
Copy Markdown
Member

Методическая рекомендация «Типизация кода» разобрана на 138 проверяемых пунктов, на каждый заведён отдельный тест. Номер пункта стоит в @DisplayName, поэтому соответствие «пункт — тест» проверяется машинно: пропусков, дублей и лишних тестов нет.

Зачем

Полигон показывает расстояние между рекомендацией и языковым сервером и служит опорой при реализации пунктов. Ветку периодически ребейзим на develop.

Как устроено

Тест выражает требование рекомендации, а не наше текущее поведение:

  • имена типов — как их пишет рекомендация: ТабличнаяЧасть, СтрокаТабличнойЧасти, ФормаКлиентскогоПриложения, ДанныеФормыСтруктура, ДанныеФормыЭлементКоллекции, ТабличныйДокумент;
  • поведение — из её же примеров: Форма.Объект.Ссылка, Форма.Элементы.Артикул, Список.ТекущиеДанные.Артикул, Адрес.Улица, Элемент.Видимость, реквизит строки табличной части;
  • пункты про контроль типов требуют диагностику по ключу (MissingType, TypeChange, IncompatibleArgumentType, DeclaredTypeMismatch и др.);
  • пункты про возможности редактора требуют кодовое действие по идентификатору (source.generateMethodDescription, source.showDescriptionStructure, source.enableStrictTypes).

Ключи диагностик и идентификаторы действий пока предложены — уточняются при реализации соответствующих пунктов.

Раздел рекомендации Тест-класс Тестов Зелёных Красных
Как это работает SpecSection2Test 14 13 1
Возможности документирующих комментариев SpecSection3Test 37 34 3
Практики: данные и коллекции SpecSection4DataObjectsTest 39 33 6
Практики: формы, контейнеры, выборки SpecSection4FormsAndContainersTest 16 11 5
Пункты, проверяемые в модуле формы SpecFormModuleTest 4 4 0
Контроль типов SpecStrictTypingControlTest 18 1 17
Возможности редактора SpecEditorFeaturesTest 10 6 4
Итого 138 102 36

Состояние

102 зелёных, 36 красных (на ребейзе от 2026-08-08). Красный тест означает, что пункт рекомендации у нас не закрыт; падений по ошибкам нет — все красные это расхождение ожидания с фактом.

CI на этой ветке будет красным — это ожидаемо. Полигон не предназначен для зелёного прогона целиком: он чинится по мере реализации пунктов. Прогон всего пакета types (1824 теста) показывает, что ни один существующий тест не сломан: все 36 падений — внутри классов Spec*.

Тяжелее всего раздел «Контроль типов» — 17 красных из 18: он целиком про диагностики, которых пока нет. Раздел «Пункты, проверяемые в модуле формы» закрыт полностью.

Из пяти пунктов, что раньше ждали типы форм (#4337, влит), красным остался только 4.50: имя основной формы у нас даёт конкретный тип формы, а рекомендация описывает общий.

Сверка фикстур с буквой рекомендации

Часть красных оказалась дефектами самого полигона, а не расхождением с рекомендацией; они исправлены:

  • тела функций-заглушек (3.15-3.17, 3.20, 4.4, 4.5). Рекомендация записывает эти примеры одной сигнатурой, без тела. Заглушка Возврат Неопределено подмешивала в объединение свой тип. Тела приведены к объявленным типам;
  • 3.32 объявлял параметр обобщённым ТаблицаФормы, тогда как рекомендация пишет здесь ссылку на конкретный элемент формы. С обобщённым типом колонки конкретного списка неизвестны в принципе, и проверка не могла пройти ни при какой реализации;
  • 4.45, 4.47, 4.48 сверяли имя типа с обобщённым (ФормаКлиентскогоПриложения, ДанныеФормыСтруктура), а система типов отдаёт тип конкретной формы — строго более точный. Сверка переведена на вхождение, как уже сделано в 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.

@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 58aae9dd-430f-4cdb-9570-616ab19a8216

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Test Results

 4 086 files  + 42   4 086 suites  +42   50m 21s ⏱️ -15s
 4 341 tests +138   4 234 ✅ +102   71 💤 ±0   36 ❌ + 36 
26 046 runs  +828  25 400 ✅ +612  430 💤 ±0  216 ❌ +216 

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.

nixel2007 and others added 14 commits August 8, 2026 09:07
Методическая рекомендация «Типизация кода» из v8-code-style разобрана на 138
проверяемых пунктов, на каждый заведён отдельный тест. Номер пункта указан в
@DisplayName, так что соответствие «пункт — тест» проверяется машинно.

Тест выражает требование рекомендации, а не текущее поведение: её имена типов
(ТабличнаяЧасть, СтрокаТабличнойЧасти, ФормаКлиентскогоПриложения,
ДанныеФормыСтруктура, ТабличныйДокумент) и её поведение из примеров
(Форма.Объект.Ссылка, Форма.Элементы.Артикул, Список.ТекущиеДанные.Артикул,
Адрес.Улица, Элемент.Видимость). Пункты контроля требуют диагностику по ключу,
возможности редактора — кодовое действие по идентификатору.

Из 138 тестов 71 зелёный и 67 красных: красный означает, что пункт рекомендации
у нас не закрыт. Полигон не предназначен для зелёного прогона целиком — он
показывает расстояние до рекомендации и чинится по мере реализации пунктов.

Фикстуры: пробы по разделам рекомендации в src/test/resources/types/spec,
документированные методы в модулях СправочникСМенеджером (для ссылок вида
Модуль.Метод.Параметр) и реквизит с типом «Произвольный» в форме Документ1.
Разделы 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
@nixel2007
nixel2007 force-pushed the test/typification-spec-conformance branch from e943315 to 9d675e9 Compare August 8, 2026 07:09
nixel2007 and others added 3 commits August 8, 2026 09:45
Рекомендация записывает примеры 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
@nixel2007

Copy link
Copy Markdown
Member Author

Два пункта, где ожидание теста не подпирается текстом рекомендации

Оба оставлены красными — правка меняет смысл пункта, поэтому нужно решение.

4.23 «Обращение к колонке по имени в переменной». Тест требует, чтобы у СтрокаТаблицы[ИмяКолонки] типа не было вовсе (isEmpty), со ссылкой на то, что рекомендация этого не требует. Но рекомендация про этот случай говорит только одно: такие методы — исключение из правила «обращаться к колонкам напрямую», когда набор колонок неизвестен в рантайме. Про тип выражения там не сказано ничего. У нас параметр объявлен как См. ТоварыДляСписания, колонки известны, и мы отдаём объединение их типов — СправочникСсылка.Справочник1, Число. Это не противоречит рекомендации.

Вариант правки: сверять, что объединение типов колонок доступно, вместо требования пустоты.

4.50 «Имя основной формы даёт общий тип формы». Рекомендация пишет, что ссылка на основную форму (Справочник.X.ФормаОбъекта) даёт общий ФормаКлиентскогоПриложения и «весь контекст формы не будет доступен». У нас ПолучитьФорму("Справочник.Справочник1.ФормаОбъекта") резолвится в конкретный тип формы — строго точнее, чем описывает рекомендация.

Здесь нельзя просто перевести сверку на вхождение, как в 4.47/4.48: тогда пункт перестанет отличаться от них, а весь смысл пары 4.49/4.50 против 4.47/4.48 — в контрасте «общий тип против конкретного». Правильнее либо переформулировать пункт как «мы точнее рекомендации», либо оставить красным как осознанное расхождение.

Соседний 4.49 (имя формы в переменной) — настоящий пробел: мы не даём ничего, тогда как рекомендация обещает хотя бы общий тип.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant