test(types): массив, объявленный через себя, покрыт тестами - #4453
Conversation
Функция с объявлением `Массив из см. ЭтаЖеФункция` задаёт значением уравнение
T = Массив{элемент: T} — то же, что структура с полем, только ребро идёт через
элемент коллекции. Случай работал, но проверен не был: покрыт был лишь вариант,
где такой массив лежит полем структуры.
Проверяется, что элементом массива снова он сам и что обращение по индексу
разворачивается по уровню на обращение, а не уходит в бесконечность.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017cu7S3zYn7n6GMsdYf5v1q
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthroughThe PR adds tests for recursive collection return types. The tests verify self-typed elements, repeated indexing, and stable repeated return-type inference. ChangesRecursive return types
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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 |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@src/test/java/com/github/_1c_syntax/bsl/languageserver/types/RecursiveReturnTypeTest.java`:
- Around line 89-107: Update navigationThroughSelfTypedArrayResolves to call
typeService.expressionTypesAt for “Ветки()[0][0]” a second time, then assert the
repeated result matches the first result while retaining the existing
qualified-name assertion.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 1449101c-5f1a-4b0c-9e33-e24e23da7f2f
⛔ Files ignored due to path filters (1)
src/test/resources/types/RecursiveCollection.bslis excluded by!src/test/resources/**
📒 Files selected for processing (1)
src/test/java/com/github/_1c_syntax/bsl/languageserver/types/RecursiveReturnTypeTest.java
…сылку Проверяется то, ради чего ребро рекурсии держится ссылкой, а не содержимым: два расчёта подряд при непустом индексе — откуда узел и берёт приближение — дают одно и то же. Разойдись они, каждый заход разворачивал бы самоссылку ещё на уровень, и приближения не сходились бы. Повторный вызов expressionTypesAt для этого не годится: он попадает в кэш выражений и ничего не считает. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017cu7S3zYn7n6GMsdYf5v1q
|



Зачем
Функция с описанием
Массив из см. ЭтаЖеФункциязадаёт значением уравнениеT = Массив{элемент: T}— то же, что структура с полем, только ребро идёт через элемент коллекции. Случай работал, но проверен не был: покрывался лишь вариант, где такой массив лежит полем структуры (RecursiveSeeRefInferenceTest), а прямое объявление функции — нет.Проверяется два свойства:
Ветки()[0][0]) разворачивается по уровню на обращение и не уходит в бесконечность.Как проверялось
Тесты писались как проба, чтобы выяснить, не даёт ли этот случай вклада в недетерминизм из #4429. Не даёт: оба свойства выполняются, а повторный расчёт при непустом индексе даёт то же самое.
Попутно выяснилось другое: у массива, собранного в коде, тип элемента остаётся
Произвольный, потому чтоМассив.Добавить(значение)состав не уточняет вовсе — на это заведено #4452. К рекурсии это отношения не имеет, элемент там берётся из умолчания реестра.Правок в коде нет — только тесты и фикстура.
Summary by CodeRabbit
Bug Fixes
Tests