Skip to content

Межфайловый анализ ​

Описание проблемы ​

В ранней реализации 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