Межфайловый анализ
Описание проблемы
В ранней реализации check_files_with_diagnostics создавал отдельный Compiler для каждого файла и не мог обнаруживать межфайловые ссылки. pub функция, определённая в fileA, не могла быть распознана в fileB.
Решение
Использование общего TypeEnvironment и проверка всех модулей в порядке зависимостей.
Процесс реализации
text
1. Параллельный парсинг всех .yx файлов → Vec<(PathBuf, ModuleId, AST)>
2. Построение графа зависимостей через ModuleDependencyGraph::build_from_ast
3. Проверка циклических зависимостей через detect_cycles() → ошибка
4. Получение порядка компиляции через topological_sort()
5. Проверка типов по порядку:
a. Создание общего TypeEnvironment (включая модуль std)
b. Для каждого модуля: регистрация его экспортов в общем окружении → проверка типов
c. Сбор диагностической информации
6. Возврат CheckResultИзоляция пространств имён
Для хранения экспортируемых символов используется формат module_name.symbol_name, что позволяет избежать конфликтов одноимённых символов в разных модулях.
Известные ограничения
- Заглушки в
traits/(coherence/impl_check/object_safety/resolution) не завершены check_single_moduleпо-прежнему создаёт отдельныйCompilerдля каждого модуля (передача информации о типах через общее окружение полностью не реализована)
Будущая работа
- T8: сквозное тестирование межфайловой проверки типов
- A4: общий
trait_tableиnative_signatures
