feat(types): ссылка «См.» на параметр метода другого модуля - #4386
Conversation
У членов модульных типов типы параметров не заполнялись: тип возврата читался из описания, а параметры оставались пустыми — и ссылка «Модуль.Метод.Параметр» упиралась в пустую сигнатуру. Теперь имена типов параметра разрешаются так же, как имя типа возврата. «Произвольный» в объявленные не попадает: он ничего не сообщает о значении.
|
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 (2)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthroughThe change adds a shared resolver for documented method parameter and return types. Common-module descriptors use it, completion expects typed parameters, and an integration test verifies ChangesParameter type inference
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
Sequence Diagram(s)sequenceDiagram
participant ReferenceResolver
participant ConfigurationModuleMembersProvider
participant DescribedTypeResolver
participant TypeRegistry
ReferenceResolver->>ConfigurationModuleMembersProvider: Resolve common-module method parameter
ConfigurationModuleMembersProvider->>DescribedTypeResolver: Resolve documented parameter type
DescribedTypeResolver->>TypeRegistry: Resolve documented type name
TypeRegistry-->>DescribedTypeResolver: Return Строка type
DescribedTypeResolver-->>ConfigurationModuleMembersProvider: Provide parameter type
ConfigurationModuleMembersProvider-->>ReferenceResolver: Return inferred parameter type
🚥 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 |
Тип объявлен в описании метода явно, поэтому виден и в сигнатуре подсказки: «(Значение: Произвольный): Массив». Ожидание теста автодополнения обновлено.
Убрана мёртвая проверка на null, регулярка вынесена в константу Pattern, общий разбор имени типа для параметров и возвращаемого значения — в одном месте. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015awbqkuFMyTddXSsVuoHhc
…онент Разрешение типов параметров и возвращаемого значения из документирующего комментария вынесено в DescribedTypeResolver: ConfigurationModuleMembersProvider занимается регистрацией типов модулей, а не разбором описаний. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015awbqkuFMyTddXSsVuoHhc
|



Пункт 3.34 рекомендации «Типизация кода», подраздел «Ссылка на тип параметра метода в модели менеджера, объекта, общем модуле»:
Что было
Тип не выводился. Разбор ссылки до параметра доходит, но берёт его типы из сигнатуры члена, а у членов модульных типов параметры заводились с пустыми типами:
ConfigurationModuleMembersProvider#toMethodMemberчитал из описания метода тип возвращаемого значения, а параметрам ставилTypeSet.EMPTY.Что сделано
Типы параметра разрешаются там же и так же, как тип возврата — по головному имени из описания (
Массив из Строка→Массив). Ссылка на параметр после этого работает сама: остальной путь уже был.Объявленный
Произвольныйпри этом не отбрасывается: тип написан автором описания, поэтому виден и в подсказке автодополнения — у метода общего модуля сигнатура стала(Значение: Произвольный): Массиввместо(Значение): Массив. ОжиданиеCompletionProviderTest#dotCompletionCommonModuleMethodHasSignatureAndDocumentationLikePlatformобновлено под это.Проверки
SeeMethodParameterRefInferenceTest:См. ОбщегоНазначения.ОбщийМодуль.ИмяМодулядаётСтрока— тип, объявленный у параметра метода-цели. Тест красный до правки. Общие фикстуры не менялись: взят метод, который в тестовой конфигурации уже есть.Прогоны
*types.*,*providers.*,*hover.*— зелёные.Что осталось за рамками
Пункт 3.35 (параметр метода модуля объекта, у цели объявлен
Массив из Строка) требует ещё и типа элемента коллекции — головного имени для него мало. Пункт 3.36 (наследование типов по сигнатуре чужого метода) опирается на ту же сигнатуру и станет проверяем после этого.Summary by CodeRabbit