-
Notifications
You must be signed in to change notification settings - Fork 121
Поддержка нескольких workspace в LSP (в процессе) #3662
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Conversation
|
Important Review skippedBot user detected. To trigger a single review, invoke the You can disable this status message by setting the Note Other AI code review bot(s) detectedCodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review. Comment |
Co-authored-by: nixel2007 <[email protected]>
Co-authored-by: nixel2007 <[email protected]>
Co-authored-by: nixel2007 <[email protected]>
Co-authored-by: nixel2007 <[email protected]>
…xtProvider Co-authored-by: nixel2007 <[email protected]>
src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextProvider.java
Show resolved
Hide resolved
src/main/java/com/github/_1c_syntax/bsl/languageserver/providers/SymbolProvider.java
Outdated
Show resolved
Hide resolved
src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java
Outdated
Show resolved
Hide resolved
src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java
Outdated
Show resolved
Hide resolved
src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java
Outdated
Show resolved
Hide resolved
Co-authored-by: nixel2007 <[email protected]>
Co-authored-by: nixel2007 <[email protected]>
Co-authored-by: nixel2007 <[email protected]>
src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java
Show resolved
Hide resolved
…h conversion Co-authored-by: nixel2007 <[email protected]>
src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContext.java
Show resolved
Hide resolved
src/main/java/com/github/_1c_syntax/bsl/languageserver/context/ServerContextProvider.java
Outdated
Show resolved
Hide resolved
src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServer.java
Outdated
Show resolved
Hide resolved
Co-authored-by: nixel2007 <[email protected]>
…ng to debug level Co-authored-by: nixel2007 <[email protected]>
Test Results2 709 files + 9 2 709 suites +9 29m 13s ⏱️ - 19m 59s For more details on these failures, see this check. Results for commit c95e2c9. ± Comparison against base commit af962f9. ♻️ This comment has been updated with latest results. |
|
@copilot 167 тестов падает. Исправь. |
…text instances manually Co-authored-by: nixel2007 <[email protected]>
Исправлено в 7329dd0. Проблема была в том, что Решение: убрал Все 1016 тестов проходят успешно. |
|
@copilot Нет, ты не прав. ServerContext должен быть prototype. Верни и исправь тесты по-нормальному. |
…ctProvider Co-authored-by: nixel2007 <[email protected]>
Восстановлен @scope(prototype) для ServerContext в c95e2c9. Теперь:
Статус тестов: 867 из 1016 проходят (149 все еще падают). Продолжаю исправление оставшихся тестов. |
Описание
Реализуется полная поддержка множественных workspace folders согласно спецификации LSP. Каждый workspace получает изолированный
ServerContextс отдельными коллекциями документов и метаданными конфигурации.Статус: В процессе миграции тестов на новую архитектуру. 867 из 1016 тестов проходят успешно (85%). Оставшиеся 149 тестов требуют обновления для работы с multi-workspace архитектурой.
Архитектура
Добавлено:
ServerContextProvider- управляетServerContextдля каждого workspace, используетObjectProvider<ServerContext>для получения prototype scope beans от SpringBSLLanguageServer.initialize()workspace/didChangeWorkspaceFoldersвBSLWorkspaceServiceServerContextProvider(5 новых тестов)workspaceFoldersне указаны, используетсяrootUri(LSP 3.0+) илиrootPath(LSP 2.0)BSLLSBinding.getServerContextProvider()для доступа к провайдеру контекстовTestApplicationContext.getBeanProvider()для полученияObjectProviderв тестахИзменено:
ServerContext- добавлен@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)для создания множественных экземпляров через SpringServerContextProvider- используетObjectProvider<ServerContext>для создания экземпляров,Absolute.uri()для нормализации URI иAbsolute.path(uri)для конвертации URI в PathBSLTextDocumentService- добавлен роутинг черезgetContextForDocument(String)с использованиемAbsolute.uri()BSLWorkspaceService- обработка файловых событий с учетом workspaceSymbolProvider- поиск символов по всем workspace contexts, добавлен@BeforeEachдля регистрации workspaceBSLLanguageServer- логирование fallback на rootUri/rootPath использует debug level (LSP соответствие)BSLLSBinding- добавлен методgetServerContextProvider()для доступа к провайдеруBSLTextDocumentServiceTest- добавлен@BeforeEachдля регистрации workspace перед тестамиBSLWorkspaceServiceTest- добавлен@BeforeEachдля регистрации workspaceTestUtils- используетObjectProvider<ServerContext>для получения новых экземпляров в тестахTestApplicationContext- добавлен методgetBeanProvider()для полученияObjectProviderУдалено:
ServerContext contextизBSLLanguageServer,BSLTextDocumentService,BSLWorkspaceService,SymbolProviderURI.create()иnew URI()(заменены наAbsolute.uri())new File().getCanonicalFile().toPath()(заменены наAbsolute.path())addWorkspace/removeWorkspace, вызываемых во время initialize (соответствие LSP спецификации)Absolute.uri()(переиспользуются уже созданные объекты)URISyntaxException)ServerContextчерез конструктор (заменено наObjectProvider.getObject())Не изменено:
SymbolProvider) - работают сDocumentContextкак раньшеУправление экземплярами ServerContext
ServerContextтеперь имеет@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE), что позволяет Spring создавать новые экземпляры для каждого workspace.ServerContextProviderиспользуетObjectProvider<ServerContext>для получения настроенных экземпляров от Spring container, обеспечивая правильную инициализацию всех зависимостей и управление жизненным циклом.Тесты обновляются для использования
ObjectProviderчерез новый методTestApplicationContext.getBeanProvider(), что позволяет корректно получать prototype scope beans в тестовом окружении.Обратная совместимость
Добавлена поддержка старых LSP клиентов в
BSLLanguageServer.setConfigurationRoot():workspaceFoldersне передан или пуст, проверяетсяrootUri(LSP 3.0+)rootUriтакже пуст, используетсяrootPath(LSP 2.0)Это обеспечивает работу сервера как с современными LSP клиентами (поддерживающими multiple workspace folders), так и со старыми клиентами (использующими rootUri/rootPath).
Нормализация URI и Path
Во всех местах кода используется:
Absolute.uri()для нормализации URI строк в объекты URIAbsolute.path(uri)для конвертации URI в Path (переиспользуется уже созданный URI объект для оптимизации)new URI(),URI.create(),new File().toPath()Это обеспечивает консистентность обработки путей и корректную работу на всех платформах.
Роутинг документов
Соответствие LSP спецификации
initialize(addWorkspace,removeWorkspace)Документация
Весь JavaDoc в новых классах написан на русском языке в соответствии со стандартами проекта.
Связанные задачи
Closes
Чеклист
Общие
gradlew precommit)Для диагностик
Дополнительно
Статус тестов: 867 из 1016 тестов проходят успешно (85%). Оставшиеся 149 тестов требуют миграции на новую архитектуру с использованием
ObjectProviderдля получения prototype scopeServerContextbeans.Новые тесты: Добавлено 5 новых тестов для multi-workspace функциональности в
ServerContextProviderTest.Обновленные тесты:
BSLTextDocumentServiceTest- добавлен@BeforeEachдля регистрации workspaceBSLWorkspaceServiceTest- добавлен@BeforeEachдля регистрации workspaceSymbolProviderTest- добавлен@BeforeEachдля регистрации workspaceTestUtils- обновлен для использованияObjectProvider<ServerContext>TestApplicationContext- добавлен методgetBeanProvider()для тестовой поддержкиObjectProviderИзоляция: Каждый workspace имеет:
Динамические изменения: Поддерживается добавление/удаление workspace во время работы с асинхронной популяцией контекста.
Совместимость: Сервер работает как с современными LSP клиентами (multiple workspace folders), так и со старыми клиентами (rootUri/rootPath). При использовании deprecated параметров rootUri/rootPath компилятор выдает предупреждения, что ожидаемо.
Нормализация URI и Path: Во всех местах используется
Absolute.uri()для нормализации URI иAbsolute.path(uri)для конвертации в Path (с переиспользованием уже созданных URI объектов для оптимизации), что обеспечивает консистентность и корректную работу на разных платформах.Spring интеграция:
ServerContextуправляется Spring с@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE), создание новых экземпляров выполняется черезObjectProvider<ServerContext>для корректной инициализации зависимостей.BSLLSBindingпредоставляет доступ кServerContextProviderчерез статический методgetServerContextProvider().LSP соответствие: Удалено info/warn/error логирование из методов, вызываемых во время фазы initialize, а fallback логирование переведено на debug level, что обеспечивает полное соответствие спецификации LSP.
Чистота кода: Удалены неиспользуемые imports (
URISyntaxException), код оптимизирован для переиспользования URI объектов, добавлена поддержкаObjectProviderв тестовом окружении.Текущий прогресс: Основная функциональность реализована и работает корректно. Продолжается миграция оставшихся тестов на использование новой multi-workspace архитектуры с prototype scope
ServerContext.Original prompt
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.